コード例 #1
0
    def put(self, request):
        '''编辑新闻分类'''
        json_data = request.body.decode('utf-8')
        data = json.loads(json_data)

        forms = EditNewCoregoryForm(data)
        if forms.is_valid():
            pk = forms.cleaned_data.get('pk')
            name = forms.cleaned_data.get('name')
            name = name.strip()
            if not name:
                return ToJsonData().paramserr('请输入内容')
            tag = Tag.objects.filter(name=name).exists()
            if tag:
                return ToJsonData().paramserr('该分类已存在')
            try:
                # Tag.objects.filter(pk=pk).update(name=name)
                tag = Tag.objects.filter(pk=pk).first()
                tag.name = name
                tag.save(update_fields=['name'])
                return ToJsonData().ok(message='修改成功')
            except Exception as f:
                return ToJsonData().paramserr(message='分类不存在')
        else:
            errors = forms.get_errors()
            return ToJsonData().paramserr(message=errors)
コード例 #2
0
ファイル: views.py プロジェクト: mPythonYtd/-
def register(request):
    '''注册用户'''
    if request.method == 'GET':
        return render(request, 'users/register.html')

    if request.method == 'POST':
        try:
            json_data = request.body
            data = json.loads(json_data)
        except Exception as e:
            logger.error('参数传递出现错误,json.loads无法解析')
            return ToJsonData().paramserr(message='参数错误')
        forms = RegisterForm(data)
        if forms.is_valid():
            username = forms.cleaned_data.get('username')
            password = forms.cleaned_data.get('password')
            mobile = forms.cleaned_data.get('mobile')
            user = MyUser.objects.create_user(mobile=mobile,
                                              username=username,
                                              password=password)
            # 注册成功直接登陆
            login(request, user)
            return ToJsonData().ok('注册成功')
        else:
            error = forms.get_errors()
            return ToJsonData().paramserr(message=error)
コード例 #3
0
    def put(self, request, news_id):
        json_data = request.body.decode('utf-8')
        data = json.loads(json_data)
        forms = EditNewsForm(data)
        if forms.is_valid():
            title = forms.cleaned_data.get('title')
            content = forms.cleaned_data.get('content')
            digest = forms.cleaned_data.get('digest')
            image_url = forms.cleaned_data.get('image_url')
            tag = forms.cleaned_data.get('tag')

            news = News.objects.filter(is_delete=False, pk=news_id).first()
            news.title = title
            news.content = content
            news.digest = digest
            news.image_url = image_url
            news.tag = tag
            news.save(update_fields=[
                'title',
                'content',
                'digest',
                'image_url',
                'tag_id',
            ])

            return ToJsonData().ok()
        else:
            errors = forms.get_errors()

            return ToJsonData().paramserr(message=errors)
コード例 #4
0
ファイル: views.py プロジェクト: mPythonYtd/-
def parentComment(request):
    '''添加子评论视图'''
    if not request.user.is_authenticated:
        return ToJsonData().paramserr('请登录')
    try:
        comment_id = int(request.POST.get('comment_id'))
        content = request.POST.get('content')
        if not content:
            return ToJsonData().paramserr('请输入内容')
    except:
        logger.error('获取父评论时出错')
        raise Http404('页面未找到')

    try:
        # 获取父评论
        parents = Comment.objects.get(pk=comment_id)
    except:
        logger.error('评论不存在的评论')
        return ToJsonData().paramserr('该评论不存在')
    author = request.user
    # 新增评论
    comment = Comment.objects.create(author=author,
                                     news_id=parents.news_id,
                                     content=content)
    # 添加评论的评论
    comment.parents = parents
    comment.save()
    data = {
        'content': content,
        'author': author.username,
        'create_time': comment.update_time
    }
    return ToJsonData().ok(data=data)
コード例 #5
0
 def delete(self, request, course_id):
     course = Course.objects.filter(is_delete=False, pk=course_id).first()
     if course_id:
         course.is_delete = True
         course.save(update_fields=['is_delete'])
         return ToJsonData().ok('删除成功')
     else:
         return ToJsonData().paramserr('课程不存在')
コード例 #6
0
 def post(self, request):
     json_data = request.body.decode('utf-8')
     data = json.loads(json_data)
     forms = CourseForm(data)
     if forms.is_valid():
         forms.save()
         return ToJsonData().ok('保存成功')
     else:
         error = forms.get_errors()
         return ToJsonData().paramserr(error)
コード例 #7
0
 def post(self, request):
     forms = BannerForm(request.POST)
     if forms.is_valid():
         banner = forms.save(commit=False)
         banner.news = forms.cleaned_data.get('news_id')
         banner.save()
         return ToJsonData().ok(message='保存成功')
     else:
         error = forms.get_errors()
         return ToJsonData().paramserr(message=error)
コード例 #8
0
ファイル: views.py プロジェクト: mPythonYtd/-
    def post(self, request):
        # 1,获取参数
        try:
            json_data = request.body.decode()
            data = json.loads(json_data)
        except Exception as e:
            logger.error('参数传递出现错误,json.loads无法解析')
            return ToJsonData().paramserr(message='参数错误')
        form = smsCodeForms(data=data)
        # 2,校检参数
        if form.is_valid():
            # 3,获取手机号码
            mobile = form.cleaned_data.get('mobile')
            # 4,产生随机验证码
            code = ''.join([
                random.choice(string.digits)
                for _ in range(constants.SMS_LENGTH)
            ])  # 写算法随机
            # 5,获取redis数据库连接
            try:
                redis_con = get_redis_connection(alias='verification')  # 连接数据库
                logger.info('{}短信验证码发送成功'.format(mobile))
                # 7,将短信验证码存入数据库
                sms_key = 'sms_{}'.format(mobile)
                sms_flag_key = 'sms_flag_{}'.format(mobile)
                # 创建管道,执行多条写入命令
                pipe = redis_con.pipeline()
            except:
                logger.error('获取redis连接时出错')
                return ToJsonData().servererr(message='未知错误')  # 6,发送短信验证码
            '''开发阶段不用正式的短信,已测试成功可用'''
            # send_sms_code.delay(mobile,code) #调用异步任务,存入异步redis队列

            # res = send_sms(mobile, code=code).decode()
            # result = json.loads(res)
            # # 判断验证码是否发送成功
            # if result['Message'].lower() != 'ok':
            #     logger.error('{}短信验证码超额'.format(mobile))
            #     return ToJsonData().paramserr(message='验证码数量已超额')

            try:
                pipe.setex(sms_key, constants.SMS_CODE_EXPIRY, code)
                # 保存发送短信标记
                pipe.setex(sms_flag_key, constants.SMS_FLAG_EXPIRY, 1)
                # 执行管道内的命令
                pipe.execute()
                logger.info('验证码保存成功:{}'.format(code))
            except Exception as e:
                logger.debug('保存短信验证码时出现异常,{}'.format(e))
                return ToJsonData().servererr(message='服务器异常', data={})
            # 8,返回发送成功结果
            return ToJsonData().ok(message='发送成功', data={})
        else:
            errors = form.get_errors()
            return ToJsonData().paramserr(message=errors)
コード例 #9
0
 def post(self, request):
     '''添加新闻分类'''
     name = request.POST.get('name', None)
     if not name or not name.strip():
         return ToJsonData().paramserr('请填写内容')
     name = name.strip()
     exist = Tag.objects.filter(name=name, is_delete=False).exists()
     if exist:
         return ToJsonData().paramserr(message='该分类已存在')
     else:
         Tag.objects.create(name=name)
         return ToJsonData().ok(message='创建成功')
コード例 #10
0
    def post(self, request):
        json_data = request.body.decode('utf-8')
        data = json.loads(json_data)
        forms = AddNewsForm(data)
        if forms.is_valid():
            news = forms.save(commit=False)  # commit 为True直接提交保存
            news.author_id = request.user.id
            news.save()

            return ToJsonData().ok('添加成功')
        else:
            errors = forms.get_errors()

            return ToJsonData().paramserr(errors)
コード例 #11
0
    def put(self, request, course_id):
        course = Course.objects.filter(is_delete=False, pk=course_id)
        if course:
            json_data = request.body.decode('utf-8')
            data = json.loads(json_data)
            forms = CourseForm(data)
            if forms.is_valid():
                course.update(**forms.cleaned_data)
                return ToJsonData().ok('修改成功')
            else:
                error = forms.get_errors()
                return ToJsonData().paramserr(error)

        else:
            return ToJsonData().paramserr('课程不存在')
コード例 #12
0
ファイル: views.py プロジェクト: mPythonYtd/-
def news(request):
    # 1,获取分类和页码,并校检

    try:
        tag_id = int(request.GET.get('tag_id', 0))
    except:
        logger.error('没有传递有效的分类id')

        tag_id = 0
    try:
        page = int(request.GET.get('page', 1))
    except:
        logger.error('没有传递有效的页码数值')
        page = 1

    # 分析前端页面需要哪些数据,针对性查找,优化sql
    newses_queryset = News.objects.filter(is_delete=False).select_related('author', 'tag'). \
        only('title', 'tag__name', 'author__username', 'create_time', 'digest', 'image_url')
    # 判断分类id是否存在,不存在则获取全部
    news = newses_queryset.filter(tag_id=tag_id) or newses_queryset.all()
    # 分页
    paginator = Paginator(news, constants.PAGE_NUM)
    # 获取当前页数
    try:
        cur_p_news = paginator.page(page)
    except EmptyPage as e:
        logger.error('页码超过最大页数')
        # 返回最后一页
        cur_p_news = paginator.page(paginator.num_pages)
    ser = NewsSerialize(instance=cur_p_news.object_list, many=ToJsonData)
    data = {
        'total_page': paginator.num_pages,
        'newses': ser.data  # 可以序列化分页结果
    }
    return ToJsonData().ok(data=data)
コード例 #13
0
 def get(self, request):
     news_id = request.GET.get('news_id', None)
     tags = Tag.objects.filter(is_delete=False).only('name')
     if news_id:
         news = News.objects.filter(is_delete=False, pk=news_id).defer('update_time', 'create_time', ).first()
         if not news:
             return ToJsonData().paramserr('分类不存在')
         return render(request, 'cms/writenews.html', locals())
     else:
         return render(request, 'cms/writenews.html', locals())
コード例 #14
0
def up_thumbnail(request):
    # 上传到本地
    # file = request.FILES.get('file')
    #
    # FDFS_client = Fdfs_client('/home/pyvip/tanzhou/utils/fastdfs/storage/client.conf')
    # Fdfs_client.append_by_buffer(file)
    # try:
    #     file_path = os.path.join(MEDIA_ROOT, file.name)
    #     with open(file_path, 'wb') as fp:
    #         for chunk in file.chunks():
    #             fp.write(chunk)
    # except AttributeError as f:
    #     pass
    # url = request.build_absolute_uri(MEDIA_URL + file.name)
    # return ToJsonData().ok(message='上传成功', data={'url': url})
    image_file = request.FILES.get('file')  # 记得这个不要写错啦
    if not image_file:
        logger.info('从前端获取图片失败')
        return JsonResponse({'code': 500, 'message': '从前端获取图片失败'})

    if image_file.content_type not in ('image/jpeg', 'image/png', 'image/gif'):
        return JsonResponse({'code': 500, 'message': '不能上传非图片文件'})

    try:  # jpg
        image_ext_name = image_file.name.split('.')[-1]  # 切割后返回列表取最后一个元素尾缀
    except Exception as e:
        logger.info('图片拓展名异常:{}'.format(e))
        image_ext_name = 'jpg'

    try:
        img = image_file.read()
        upload_res = FDFS_Client.upload_by_buffer(img, file_ext_name=image_ext_name)
    except Exception as e:
        logger.error('图片上传出现异常:{}'.format(e))
        return ToJsonData().servererr(message='上传图片异常')
    else:
        if upload_res.get('Status') != 'Upload successed.':
            logger.info('图片上传到FastDFS服务器失败')
            return ToJsonData().paramserr(message='上传图片失败')
        else:
            image_name = upload_res.get('Remote file_id')
            image_url = settings.FASTDFS_SERVER_DOMAIN + image_name
            return ToJsonData().ok(message='上传成功', data={'url': image_url})
コード例 #15
0
 def put(self, request, banner_id):
     json_data = request.body.decode('utf-8')
     data = json.loads(json_data)
     forms = BannerForm(data)
     if forms.is_valid():
         image_url = forms.cleaned_data.get('image_url')
         news_id = forms.cleaned_data.get('news_id')
         priority = forms.cleaned_data.get('priority')
         try:
             banner = Banner.objects.filter(is_delete=False, pk=banner_id).first()
             banner.image_url = image_url
             banner.news_id = news_id
             banner.priority = priority
             banner.save()
         except Exception as e:
             logger.error('获取轮播图失败:{}'.format(e))
         return ToJsonData().ok('修改成功', data={'priority': priority})
     else:
         error = forms.get_errors()
         return ToJsonData().paramserr(message=error)
コード例 #16
0
ファイル: views.py プロジェクト: mPythonYtd/-
def login_view(request):
    '''登录视图'''
    if request.method == 'POST':
        # 1,获取数据
        forms = LoginForm(request.POST)
        # 2,验证数据
        if forms.is_valid():
            mobile = forms.cleaned_data.get('mobile')
            password = forms.cleaned_data.get('password')
            remember = forms.cleaned_data.get('remember')
            # 3,验证用户
            user = authenticate(request, username=mobile, password=password)
            # 4,验证用户是否存在
            if user:
                # 5,验证用户是否活跃
                if user.is_active:
                    # 6,登录,保存session
                    login(request, user)
                    # 7,是否记住该用户
                    if remember:
                        # 8,设置session过期时间
                        request.session.set_expiry(None)
                        # 9,返回登陆成功
                        return ToJsonData().ok(message='登录成功')
                    else:
                        request.session.set_expiry(0)
                        return ToJsonData().ok(message='登陆成功')
                else:
                    # 10,返回用户不活跃信息
                    return ToJsonData().unauth(message='该用户已被冻结', data={})
            else:
                # 11,返回校检用户失败信息
                return ToJsonData().paramserr(message='用户名或密码错误')
        else:
            error = forms.get_errors()
            print(error)
            return ToJsonData().paramserr(message=error, data={})
    # get请求返回登录页面
    if request.method == 'GET':
        return render(request, 'users/login.html')
コード例 #17
0
def edit_staff(request):
    mobile = request.POST.get('telephone')
    # 获取多个同名的值
    groups_id = request.POST.getlist('groups')
    groups = Group.objects.filter(id__in=groups_id)
    try:
        user = MyUser.objects.get(mobile=mobile)
        user.is_staff = True
        user.save()
    except Exception as e:
        return ToJsonData().paramserr('添加失败')
    user.groups.set(groups)
    return redirect(reverse('cms:staff'))
コード例 #18
0
ファイル: views.py プロジェクト: mPythonYtd/-
def comment(request):
    '''评论'''
    if not request.user.is_authenticated:
        return ToJsonData().paramserr('请登录')
    try:
        content = request.POST.get('content')
        if not content:
            return ToJsonData().paramserr('请输入内容!')
        news_id = int(request.POST.get('newsId'))
    except:
        logger.error('添加评论时出现错误')
        raise Http404('系统出错!!!!')
    author = request.user

    comment = Comment.objects.create(content=content,
                                     author=author,
                                     news_id=news_id)
    comment.save()
    data = {
        'author_name': author.username,
        'create_time': comment.update_time,
        'content': content
    }
    return ToJsonData().ok(data=data)
コード例 #19
0
ファイル: views.py プロジェクト: mPythonYtd/-
def image_code(request, uuid):
    ''' 定义获取图形验证视图'''
    # 1,获取redis数据库连接
    try:
        redis_connection = get_redis_connection(alias='verification')  # 连接数据库
    except:
        return ToJsonData().servererr(message='未知错误')
    # 2,获取前端传递的uuid
    img_key = 'img_{}'.format(uuid)
    # 3,生成验证图片和验证码
    text, img = captcha.generate_captcha()
    # 4,将图形验证码通过拼接uuid的方式储存之redis数据库
    redis_connection.setex(img_key, constants.IMG_CODE_EXPIRY,
                           text)  # 键,过期时间,值,
    # 5,打印logger日志
    logger.info('Img_code:{}'.format(text))
    # 6,返回图形验证码
    return HttpResponse(content=img, content_type='image/jpg'
                        )  # 返回一张图片,可在模板中{% url 'verification:code' %}加载
コード例 #20
0
ファイル: verify_views.py プロジェクト: mPythonYtd/-
 def handle_no_permission(self):
     if self.raise_exception:
         return ToJsonData().unauth('没有权限访问')
     else:
         return super(VerifyView, self).handle_no_permission()
コード例 #21
0
def banner_list(request):
    bannerList = Banner.objects.filter(is_delete=False).only('image_url', 'priority', 'news_id')
    banners = BannaerSerial(instance=bannerList, many=True)
    banner = banners.data
    return ToJsonData().ok(data=banner)
コード例 #22
0
 def delete(self, request, news_id):
     news = News.objects.filter(pk=news_id).first()
     news.is_delete = True
     news.save(update_fields=['is_delete'])
     return ToJsonData().ok()
コード例 #23
0
def del_staff(request, user_id):
    if request.method == 'DELETE':
        user = MyUser.objects.filter(pk=user_id).first()
        user.is_staff = False
        user.save()
        return ToJsonData().ok()
コード例 #24
0
 def delete(self, request, banner_id):
     banner = Banner.objects.filter(is_delete=False, pk=banner_id).first()
     banner.is_delete = True
     banner.save(update_fields=['is_delete'])
     return ToJsonData().ok('删除成功')