Пример #1
0
    def post(self, request):
        json_str = request.body
        if not json_str:
            to_json_data(errno=Code.PARAMERR, errmsg='参数错误')
        dict_data = json.loads(json_str)

        # 数据清洗
        form = NewsForm(data=dict_data)
        if form.is_valid():
            # 对于作者更新对于的新闻, 知道新闻是哪个作者发布的
            # 创建实例  不保存到数据库
            news = models.News.objects.filter(
                title=form.cleaned_data.get('title'),
                content=form.cleaned_data.get('content'),
                tag=form.cleaned_data.get('tag'),
                digest=form.cleaned_data.get('digest'),
                image_url=form.cleaned_data.get('image_url')).first()
            if news:
                news.is_delete = False
                news.save(update_fields=['is_delete'])
            else:
                news = form.save(commit=False)
                news.author_id = request.user.id
                news.save()
            return to_json_data(errmsg='文章发布成功')

        else:
            err_m_l = []
            for i in form.errors.values():
                err_m_l.append(i[0])
            err_msg_str = '/'.join(err_m_l)
            return to_json_data(errno=Code.PARAMERR, errmsg=err_msg_str)
Пример #2
0
    def put(self, request, news_id):
        news = models.News.objects.filter(id=news_id, is_delete=False).first()
        if not news:
            return to_json_data(errno=Code.PARAMERR, errmsg='文章不存在')

        json_str = request.body
        if not json_str:
            return to_json_data(errno=Code.NODATA,
                                errmsg=error_map[Code.NODATA])
        dict_data = json.loads(json_str.decode('utf8'))
        form = NewsForm(data=dict_data)
        if form.is_valid():
            news.title = form.cleaned_data.get('title')
            news.digest = form.cleaned_data.get('digest')
            news.tag = form.cleaned_data.get('tag')
            news.content = form.cleaned_data.get('content')
            news.image_url = form.cleaned_data.get('image_url')
            news.save()
            return to_json_data(errmsg='文章更新成功')
        else:
            err_m_l = []
            for i in form.errors.values():
                err_m_l.append(i[0])
            errmsg_str = '/'.join(err_m_l)
            return to_json_data(errno=Code.PARAMERR, errmsg=errmsg_str)
Пример #3
0
    def delete(self, request):
        json_str = request.body

        if not json_str:
            return to_json_data(errno=Code.NODATA,
                                errmsg=error_map[Code.NODATA])
        dict_data = json.loads(json_str.decode('utf8'))
        news_id = dict_data.get('news_id')
        if type(news_id) == type(list()):
            news_list = []
            for id in news_id:
                news = models.News.objects.filter(is_delete=False,
                                                  id=id).first()
                if news:
                    news_list.append(news)
                else:
                    return to_json_data(errno=Code.PARAMERR,
                                        errmsg='选择的文章中有ID错误')
            for news in news_list:
                news.is_delete = True
                news.save(update_fields=['is_delete'])
            return to_json_data(errno=Code.OK)
        else:
            news = models.News.objects.filter(is_delete=False,
                                              id=news_id).first()
            if news:
                news.is_delete = True
                news.save(update_fields=['is_delete'])
                return to_json_data(errmsg='文章删除成功')
            else:
                return to_json_data(errno=Code.PARAMERR, errmsg='该文章不存在')
Пример #4
0
 def delete(self, request, banner_id):
     banner = models.Banners.objects.filter(is_delete=False,
                                            id=banner_id).first()
     if banner:
         banner.is_delete = True
         banner.save(update_fields=['is_delete'])
         return to_json_data(errmsg='轮播图删除成功')
     else:
         return to_json_data(errno=Code.PARAMERR, errmsg='该轮播图不存在')
Пример #5
0
    def post(self, request):
        if not request.user.is_authenticated:
            return to_json_data(errno=Code.USERERR, errmsg='用户未登录')
        json_str = request.body

        if not json_str:
            return to_json_data(errno=Code.NODATA,
                                errmsg=error_map[Code.NODATA])
        dict_data = json.loads(json_str.decode('utf-8'))
        mobile = dict_data.get('mobile')
        smsCode = dict_data.get('sms_code')
        if not all([mobile, smsCode]):
            return to_json_data(errno=Code.PARAMERR, errmsg='输入的信息为空')
        # 手机号校验

        if User.objects.filter(mobile=mobile).exists():
            return to_json_data(errno=Code.PARAMERR,
                                errmsg='该手机号已绑定,请更换其他的手机号')
        if not re.match(r'^1[345789]\d{9}$', mobile):
            return to_json_data(errno=Code.PARAMERR, errmsg='手机号格式不正确')
        # 验证码校验
        redis_conn = get_redis_connection('verify_codes')
        sms_code = redis_conn.get('sms_{}'.format(mobile))
        if not sms_code:
            return to_json_data(errno=Code.NODATA, errmsg='短信验证码已过期,请重新获取')
        if sms_code.decode() != smsCode:
            return to_json_data(errno=Code.PARAMERR, errmsg='短信验证码输入错误,请重新输入')
        redis_conn.delete('sms_flag_{}'.format(mobile))
        redis_conn.delete('sms_{}'.format(mobile))
        user = request.user
        user.mobile = mobile
        user.save(update_fields=['mobile'])
        return to_json_data(errmsg='手机号修改成功')
Пример #6
0
    def post(self, request):
        json_str = request.body

        if not json_str:
            return to_json_data(errno=Code.NODATA,
                                errmsg=error_map[Code.NODATA])
        dict_data = json.loads(json_str.decode('utf8'))
        try:
            priority = int(dict_data.get('priority'))
            priority_list = [i for i, _ in models.Banners.B_CHOICES]
            if priority not in priority_list:
                return to_json_data(errno=Code.PARAMERR, errmsg='轮播图优先级不存在')
        except Exception as e:
            logger.error('轮播图优先级获取异常:{}'.format(e))
            return to_json_data(errno=Code.PARAMERR, errmsg='优先级获取异常')
        image_url = dict_data.get('image_url')
        if not image_url:
            return to_json_data(errno=Code.NODATA, errmsg='图片URL为空')
        news_id = int(dict_data.get('news_id'))
        if not models.News.objects.filter(is_delete=False,
                                          id=news_id).exists():
            return to_json_data(errno=Code.NODATA, errmsg='新闻不存在')
        banner, is_create = models.Banners.objects.get_or_create(
            news_id=news_id, priority=priority, image_url=image_url)
        if not is_create:
            if banner.is_delete:
                banner.is_delete = False
                banner.save(update_fields=['is_delete'])
                return to_json_data(errmsg='轮播图添加成功')
            else:
                return to_json_data(errno=Code.DATAEXIST, errmsg='该轮播图已存在')
        else:
            return to_json_data(errno=Code.OK)
Пример #7
0
 def post(self, request):
     if request.user.is_authenticated:
         return to_json_data(errno=Code.DATAERR, errmsg='用户已登录,请退出登录')
     json_str = request.body
     if not json_str:
         return to_json_data(errno=Code.NODATA,
                             errmsg=error_map[Code.NODATA])
     dict_data = json.loads(json_str.decode('utf8'))
     mobile = dict_data.get('mobile')
     password = dict_data.get('password')
     password_repeat = dict_data.get('password_repeat')
     smsCodeText = dict_data.get('smsCodeText')
     if not all([mobile, password, password_repeat, smsCodeText]):
         return to_json_data(errno=Code.PARAMERR,
                             errmsg=error_map[Code.PARAMERR])
     if not User.objects.filter(mobile=mobile):
         return to_json_data(errno=Code.PARAMERR, errmsg='手机号输入错误')
     if not ((20 >= len(password) >= 6) or
             (20 >= len(password_repeat) >= 6)):
         return to_json_data(errno=Code.PARAMERR, errmsg='密码长度为6-20位')
     redis_conn = get_redis_connection('verify_codes')
     sms_code = redis_conn.get('sms_{}'.format(mobile))
     if sms_code.decode() != smsCodeText:
         return to_json_data(errno=Code.PARAMERR, errmsg='验证码输入错误')
     redis_conn.delete('sms_flag_{}'.format(mobile))
     redis_conn.delete('sms_{}'.format(mobile))
     user = User.objects.get(mobile=mobile)
     if user:
         user.set_password(password)
         user.save(update_fields=['password'])
         return to_json_data(errmsg='密码修改成功,请重新登录')
     else:
         return to_json_data(errno=Code.PARAMERR, errmsg='该用户不存在')
Пример #8
0
    def dispatch(self, request, *args, **kwargs):
        if Group.objects.filter(user=request.user).first():
            user_permissions = Group.objects.filter(
                user=request.user).first().permissions.all()
            user_permissions = [
                i.content_type.app_label + '.' + i.codename
                for i in user_permissions
            ]

            local_permission_required = self.method_to_permission(request)
            if local_permission_required not in user_permissions:
                if request.method.lower() == 'get':
                    return render(
                        request,
                        '403.html',
                        context={'errmsg': '很抱歉,您没有权限使用该功能,请联系管理员申请权限!'})
                return to_json_data(errno=Code.ROLEERR,
                                    errmsg='您未拥有权限,请向超管申请',
                                    data={'redirect_url': '403.html'})
            return super(PermissionRequiredMixin,
                         self).dispatch(request, *args, **kwargs)
        else:
            return render(request,
                          '403.html',
                          context={'errmsg': '很抱歉,您没有权限使用该功能,请联系管理员申请权限!'})
Пример #9
0
    def put(self, request, g_id):
        group = Group.objects.filter(id=g_id).first()
        if not group:
            return to_json_data(errno=Code.PARAMERR, errmsg='该用户组不存在')

        json_str = request.body

        if not json_str:
            return to_json_data(errno=Code.NODATA,
                                errmsg=error_map[Code.NODATA])
        dict_data = json.loads(json_str.decode('utf8'))
        name = dict_data.get('name').strip()
        permissions = dict_data.get('group_permission')
        local_group_permissions = set(i.id for i in group.permissions.all())
        try:
            permissions = set(int(i) for i in permissions)
        except Exception as e:
            logger.error('传入的权限参数异常:{}'.format(e))
            return to_json_data(errno=Code.PARAMERR, errmsg='传入的权限参数异常')
        if not name:
            return to_json_data(errno=Code.PARAMERR, errmsg='请输入用户组名')
        if name != group.name and Group.objects.filter(name=name).exists():
            return to_json_data(errno=Code.DATAEXIST, errmsg='该用户组名已存在')
        permissions.update(local_group_permissions)
        group.permissions.clear()
        for i in permissions:
            p = Permission.objects.get(id=i)
            if not p:
                return to_json_data(errno=Code.PARAMERR, errmsg='传入的权限不合法')
            group.permissions.add(p)

        group.name = name
        group.save()
        return to_json_data(errmsg='用户组更新成功 ')
Пример #10
0
    def put(self, request):

        json_str = request.body
        if not json_str:
            return to_json_data(errno=Code.NODATA, errmsg=error_map[Code.NODATA])
        dict_data = json.loads(json_str.decode('utf8'))

        mobile = dict_data.get('mobile')
        flag = dict_data.get('flag')
        if not mobile:
            return to_json_data(errno=Code.NODATA, errmsg=error_map[Code.NODATA])
        if not flag:
            if not User.objects.filter(mobile=mobile).exists():
                return to_json_data(errno=Code.NODATA, errmsg='该用户不存在,请检查手机号是否输入正确')
        else:
            if User.objects.filter(mobile=mobile).exists():
                return to_json_data(errno=Code.NODATA, errmsg='该手机号已绑定,请输入新的手机号')
        if not re.match(r'^1[345789]\d{9}$', mobile):
            return to_json_data(errno=Code.PARAMERR, errmsg='手机号格式不正确')
        redis_conn = get_redis_connection('verify_codes')
        send_flag = redis_conn.get("sms_flag_{}".format(mobile))
        if send_flag:
            return to_json_data(errno=Code.DATAEXIST, errmsg='短信发送频繁,请稍后重试')

        sms_code = "%06d" % random.randint(0, 999999)
        redis_conn.setex('sms_{}'.format(mobile), 300, sms_code)
        redis_conn.setex('sms_flag_{}'.format(mobile), 60, 1)
        logger.info('短信验证码发送成功[mobile:{},sms_code:{}]'.format(mobile, sms_code))
        return to_json_data(errmsg='短信验证码发送成功')
Пример #11
0
    def put(self, request, banner_id):
        json_str = request.body

        if not json_str:
            return to_json_data(errno=Code.NODATA,
                                errmsg=error_map[Code.NODATA])
        dict_data = json.loads(json_str.decode('utf8'))
        try:
            priority = int(dict_data.get('priority'))
            priority_list = [i for i, _ in models.Banners.B_CHOICES]
            if priority not in priority_list:
                return to_json_data(errno=Code.NODATA, errmsg='传入的轮播图优先级不存在')
        except Exception as e:
            logger.error('优先级传入异常:{}'.format(e))
            return to_json_data(errno=Code.PARAMERR, errmsg='传入的优先级参数不合法')
        image_url = dict_data.get('image_url')
        if not image_url:
            return to_json_data(errno=Code.NODATA, errmsg='传入的图片参数为空')
        banner = models.Banners.objects.filter(is_delete=False,
                                               id=banner_id).first()
        if banner.priority == priority and banner.image_url == image_url:
            return to_json_data(errno=Code.DATAEXIST,
                                errmsg='传入的图片和优先级和与原轮播图一致')
        if banner:
            banner.priority = priority
            banner.image_url = image_url
            banner.save(update_fields=['priority', 'image_url'])
            return to_json_data(errmsg='轮播图更新成功')
        else:
            return to_json_data(errno=Code.PARAMERR, errmsg='轮播图不存在')
Пример #12
0
 def post(self, request):
     if not request.user.is_authenticated:
         return to_json_data(errno=Code.USERERR, errmsg='用户未登录')
     json_str = request.body
     if not json_str:
         return to_json_data(errno=Code.NODATA,
                             errmsg=error_map[Code.NODATA])
     dict_data = json.loads(json_str.decode('utf8'))
     username = dict_data.get('username')
     avatar_url = dict_data.get('avatar_url')
     if not all([username, avatar_url]):
         return to_json_data(errno=Code.PARAMERR, errmsg='参数错误')
     if not re.match(r'^[\w_\u4e00-\u9fa5]{2,20}', username):
         return to_json_data(errno=Code.PARAMERR, errmsg='用户名格式不正确')
     user = request.user
     user.username = username
     user.avatar_url = avatar_url
     user.save(update_fields=['username', 'avatar_url'])
     return to_json_data(errmsg='用户信息更新成功')
Пример #13
0
 def post(self, request):
     name = request.FILES
     image_file = name.get('image_files')
     if image_file.content_type not in ConstantDefinition.IMAGE_TYPE_LIST:
         return to_json_data(errno=Code.PARAMERR, errmsg='不能上传非图片文件')
     ext_name = image_file.name.split('.')[-1]
     try:
         upload_img = FDFS_Client.upload_by_buffer(image_file.read(),
                                                   file_ext_name=ext_name)
     except Exception as e:
         logger.error('图片上传失败:{}'.format(e))
         return to_json_data(errno=Code.UNKOWNERR, errmsg='图片上传失败')
     else:
         if upload_img.get('Status') != 'Upload successed.':
             return to_json_data(errno=Code.UNKOWNERR, errmsg='图片上传到服务器失败')
         else:
             img_id = upload_img.get('Remote file_id')
             img_url = settings.FDFS_URL + img_id
             return to_json_data(data={'image_url': img_url},
                                 errmsg='图片上传成功')
Пример #14
0
    def put(self, request, tag_id):

        json_str = request.body
        if not json_str:
            return to_json_data(errno=Code.NODATA,
                                errmsg=error_map[Code.NODATA])
        dict_data = json.loads(json_str.decode('utf8'))
        name = dict_data.get('name').strip()
        if not name:
            return to_json_data(errno=Code.NODATA,
                                errmsg=error_map[Code.NODATA])
        if len(name) > 20:
            return to_json_data(errno=Code.PARAMERR, errmsg='分类名称请控制在20字内')
        tag = models.Tag.objects.get(id=tag_id)
        if tag:
            if not models.Tag.objects.filter(is_delete=False,
                                             name=name).exists():
                tag.name = name
                tag.save(update_fields=['name'])
                return to_json_data(errno=Code.OK)
            else:
                return to_json_data(errno=Code.DATAEXIST,
                                    errmsg=error_map[Code.DATAEXIST])
        else:
            return to_json_data(errno=Code.PARAMERR, errmsg='该分类不存在')
Пример #15
0
    def post(self, request):
        json_str = request.body
        if not json_str:
            return to_json_data(errno=Code.NODATA,
                                errmsg=error_map[Code.NODATA])
        dict_data = json.loads(json_str.decode('utf8'))
        name = dict_data.get('name').strip()
        permissions = dict_data.get('group_permission')
        try:
            permissions = set(int(i) for i in permissions)
        except Exception as e:
            logger.error('传入的权限参数异常:{}'.format(e))
            return to_json_data(errno=Code.PARAMERR, errmsg='传入的权限参数异常')
        if not name:
            return to_json_data(errno=Code.PARAMERR, errmsg='请输入用户组名')
        group, is_create = Group.objects.get_or_create(name=name)
        if is_create:
            for i in permissions:
                p = Permission.objects.get(id=i)
                if not p:
                    return to_json_data(errno=Code.PARAMERR, errmsg='传入的权限不合法')
                group.permissions.add(p)

            group.save()
            return to_json_data(errmsg='用户组更新成功 ')
        else:
            return to_json_data(errno=Code.PARAMERR, errmsg='组名已存在')
Пример #16
0
    def post(self, request, news_id):
        if not request.user.is_authenticated:
            return to_json_data(errno=Code.SESSIONERR,
                                errmsg=error_map[Code.SESSIONERR])
        if not News.objects.filter(is_delete=False, id=news_id).exists():
            return to_json_data(errno=Code.PARAMERR,
                                errmsg=error_map[Code.PARAMERR])

        json_str = request.body
        if not json_str:
            return to_json_data(errno=Code.PARAMERR,
                                errmsg=error_map[Code.PARAMERR])
        dict_data = json.loads(json_str.decode('utf8'))

        content = dict_data.get('content')
        parent_id = dict_data.get('parent_id')
        if not content:
            return to_json_data(errno=Code.NODATA, errmsg='请填写评论内容')
        if parent_id is not None and not Comments.objects.filter(
                is_delete=False, id=parent_id, news_id=news_id).exists():
            return to_json_data(errno=Code.PARAMERR, errmsg='评论信息不存在')

        comment = Comments()
        comment.news_id = news_id
        comment.content = content
        comment.author = request.user
        comment.parent_id = parent_id
        comment.save()
        return to_json_data(errmsg='评论成功')
Пример #17
0
 def get(self, request):
     banner = Banners.objects.select_related('news').only(
         'image_url',
         'news__title').filter(is_delete=False).order_by('priority')
     b_info = []
     for i in banner:
         b_info.append({
             'image_url': i.image_url,
             'news_title': i.news.title,
             'news_id': i.news.id
         })
     data = {'banner': b_info}
     return to_json_data(data=data)
Пример #18
0
    def post(self, request):
        json_str = request.body
        if not json_str:
            return to_json_data(errno=Code.NODATA,
                                errmsg=error_map[Code.NODATA])
        dict_data = json.loads(json_str.decode('utf8'))

        form = LoginForm(data=dict_data, request=request)
        if form.is_valid():

            return to_json_data(errmsg='登录成功',
                                data={
                                    'referer':
                                    request.session['referer'] if
                                    (request.session['referer']
                                     and request.user.is_staff) else None
                                })
        else:
            # 表单验证失败处理
            msg_list = []
            for i in form.errors.get_json_data().values():
                msg_list.append(i[0].get('message'))
            msg_str = '/'.join(msg_list)
            return to_json_data(errno=Code.PARAMERR, errmsg=msg_str)
Пример #19
0
    def post(self, request):
        if not request.user.is_authenticated:
            return to_json_data(errno=Code.SESSIONERR, errmsg='请登录之后再操作')
        json_str = request.body
        if not json_str:
            return to_json_data(errno=Code.NODATA,
                                errmsg=error_map[Code.NODATA])
        dict_data = json.loads(json_str.decode('utf8'))
        comment_id = dict_data.get('comment_id')

        if not comment_id:
            return to_json_data(errno=Code.PARAMERR, errmsg='参数错误')
        comment = Comments.objects.filter(is_delete=False,
                                          id=comment_id).first()
        if not comment:
            return to_json_data(errno=Code.PARAMERR, errmsg='该评论不存在')
        is_add = ThumbsUpClicks.objects.filter(
            comments_id=comment_id, author_id=request.user.id).first()
        if is_add:
            if not is_add.is_delete:
                try:
                    if comment.clicks == 0:
                        raise Exception('点赞数异常')
                except Exception as e:
                    logger.error(e)
                    return to_json_data(errno=Code.PARAMERR, errmsg='点赞数异常')
                comment.clicks -= 1
                comment.save(update_fields=['clicks'])
                is_add.is_delete = True
                is_add.save(update_fields=['is_delete'])
                data = {
                    'clicks': comment.clicks if comment.clicks != 0 else "赞",
                    'is_add': False
                }
                # return to_json_data(data=comment.clicks)
            else:
                comment.clicks += 1
                comment.save(update_fields=['clicks'])
                is_add.is_delete = False
                is_add.save(update_fields=['is_delete'])
                data = {
                    'clicks': comment.clicks if comment.clicks != 0 else "赞",
                    'is_add': True
                }
        else:
            comment.clicks += 1
            comment.save(update_fields=['clicks'])
            thumbs = ThumbsUpClicks()
            thumbs.comments_id = comment_id
            thumbs.author_id = request.user.id
            thumbs.save()
            data = {
                'clicks': comment.clicks if comment.clicks != 0 else "赞",
                'is_add': True
            }
        return to_json_data(data=data)
Пример #20
0
 def delete(self, request):
     json_str = request.body
     if not json_str:
         return to_json_data(errno=Code.NODATA,
                             errmsg=error_map[Code.NODATA])
     dict_data = json.loads(json_str.decode('utf8'))
     user_id = dict_data.get('user_list')
     if type(user_id) == type(list()):
         user_list = []
         for i in user_id:
             user = User.objects.filter(is_active=True, id=i).first()
             if user.username == request.user.username:
                 return to_json_data(errno=Code.USERERR,
                                     errmsg='用户不能操作自己的权限')
             if user:
                 user_list.append(user)
             else:
                 return to_json_data(errno=Code.PARAMERR, errmsg='有用户不存在')
         for user in user_list:
             user.groups.clear()
             user.user_permissions.clear()
             user.is_active = False
             user.save()
         return to_json_data(errmsg='选中的用户均已被删除')
     else:
         try:
             user_id = int(user_id)
         except Exception as e:
             logger.error('用户id异常:{}'.format(e))
             return to_json_data(errno=Code.PARAMERR, errmsg='用户的id不合法')
         user = User.objects.filter(is_active=True, id=user_id).first()
         if user:
             if user.username == request.user.username:
                 return to_json_data(errno=Code.USERERR,
                                     errmsg='用户不能操作自己的权限')
             user.groups.clear()
             user.user_permissions.clear()
             user.is_active = False
             user.save()
             return to_json_data(errmsg='用户删除成功')
         else:
             return to_json_data(errno=Code.PARAMERR, errmsg='该用户不存在')
Пример #21
0
    def delete(self, request):
        json_str = request.body

        if not json_str:
            return to_json_data(errno=Code.NODATA,
                                errmsg=error_map[Code.NODATA])
        dict_data = json.loads(json_str.decode('utf-8'))
        tag_id = dict_data.get('tag_id')
        if not tag_id:
            return to_json_data(errno=Code.NODATA,
                                errmsg=error_map[Code.NODATA])
        if type(tag_id) == type(list()):
            tag_list = []
            for id in tag_id:
                tag = models.Tag.objects.get(is_delete=False, id=id)
                if tag:
                    if models.Tag.objects.values('id').annotate(num_news=Count('news')).filter(is_delete=False, id=id). \
                            get()['num_news']:
                        return to_json_data(errno=Code.NODATA,
                                            errmsg='文章数量不为零的分类不允许删除')
                    tag_list.append(tag)
                else:
                    return to_json_data(errno=Code.NODATA, errmsg='分类信息不存在')
            for tag in tag_list:
                tag.is_delete = True
                tag.save(update_fields=['is_delete'])

            return to_json_data(errno=Code.OK)
        else:
            tag = models.Tag.objects.get(id=tag_id)
            if tag:
                if models.Tag.objects.values('id').annotate(num_news=Count('news')).filter(is_delete=False, id=tag_id). \
                        get()['num_news']:
                    return to_json_data(errno=Code.NODATA,
                                        errmsg='文章数量不为零的分类不允许删除')
                else:
                    tag.is_delete = True
                    tag.save(update_fields=['is_delete'])
                    return to_json_data(errno=Code.OK)
            else:
                return to_json_data(errno=Code.PARAMERR, errmsg='该分类不存在')
Пример #22
0
    def get(self, request):
        try:
            tag = int(request.GET.get('tag_id', 0))
        except Exception as e:
            logger.error('页面分类错误{}'.format(e))
            tag = 0
        try:
            page = int(request.GET.get('page', 1))
        except Exception as e:
            logger.error('页面页数错误{}'.format(e))
            page = 1
        news_list = News.objects.values(
            'title', 'digest', 'image_url', 'update_time', 'clicks',
            'id').annotate(tag_name=F('tag__name'),
                           author=F('author__username'))
        news_info = news_list.filter(
            is_delete=False, tag_id=tag) or news_list.filter(is_delete=False)

        # 分页
        pages = Paginator(news_info, 5)
        try:
            news_page = pages.page(page)
        except Exception as e:
            logger.error(e)
            news_page = pages.page(pages.num_pages)
        # print(news_page)
        # print([news['id'] for news in news_page])
        comment_count = []
        # news_list_info = []
        for news in news_page:
            news['update_time'] = time_filter(news['update_time'])

            comment_count.append([
                i.id for i in Comments.objects.filter(is_delete=False,
                                                      news_id=news['id'])
            ].__len__())
        data = {
            'news': list(news_page),
            'total_pages': pages.num_pages,
            'comment_count': comment_count
        }
        return to_json_data(data=data)
Пример #23
0
 def post(self, request):
     json_str = request.body
     if not json_str:
         return to_json_data(errno=Code.NODATA, errmsg=error_map[Code.NODATA])
     dict_data = json.loads(json_str.decode('utf8'))
     text = dict_data.get('text')
     UUID = dict_data.get('image_code_id')
     mobile = dict_data.get('mobile')
     if not all([text, UUID, mobile]):
         return to_json_data(errno=Code.NODATA, errmsg=error_map[Code.NODATA])
     if not re.match(r'^1[345789]\d{9}$', mobile):
         return to_json_data(errno=Code.PARAMERR, errmsg='手机号格式不正确')
     redis_conn = get_redis_connection('verify_codes')
     send_flag = redis_conn.get("sms_flag_{}".format(mobile))
     if send_flag:
         return to_json_data(errno=Code.DATAEXIST, errmsg='短信发送频繁,请稍后重试')
     image_code_server = redis_conn.get('img_{}'.format(UUID))
     if not image_code_server:
         return to_json_data(errno=Code.PARAMERR, errmsg='图形验证码已过期,请重新获取')
     try:
         redis_conn.delete("img_{}".format(UUID))
     except Exception as e:
         logger.error(e)
     image_code_server = image_code_server.decode()
     if text.upper() != image_code_server.upper():
         return to_json_data(errno=Code.PARAMERR, errmsg='图形验证码输入错误')
     sms_code = "%06d" % random.randint(0, 999999)
     redis_conn.setex('sms_{}'.format(mobile), 300, sms_code)
     redis_conn.setex('sms_flag_{}'.format(mobile), 60, 1)
     # logger.info('短信验证码发送成功[mobile:{},sms_code:{}]'.format(mobile, sms_code))
     # return to_json_data(errmsg='短信验证码发送成功')
     # # 异步发送短信 需要事先把celery任务开起来才能使用
     # send_res = send_sms_code.delay(mobile, sms_code)
     # print(send_res)
     # if send_res == 0:
     #     return to_json_data(errmsg='短信验证码发送成功')
     # else:
     #     return to_json_data(errno=Code.PARAMERR, errmsg='短信验证码发送失败,请检查手机号你是否正确')
     # 调用接口发送短信
     ccp = CCP()
     ccp.send_template_sms(mobile, [sms_code, 5], 1)
     return to_json_data(errmsg='短信验证码发送成功')
Пример #24
0
    def put(self, request, user_id):
        user = User.objects.filter(is_active=True, id=user_id).first()
        if user.username == request.user.username:
            return to_json_data(errno=Code.USERERR, errmsg='用户不能操作自己的权限')
        if not user:
            return to_json_data(errno=Code.PARAMERR, errmsg='该用户不存在')
        json_str = request.body
        if not json_str:
            return to_json_data(errno=Code.NODATA,
                                errmsg=error_map[Code.NODATA])
        dict_data = json.loads(json_str.decode('utf8'))
        is_staff = int(dict_data.get('is_staff'))
        is_superuser = int(dict_data.get('is_superuser'))
        is_active = int(dict_data.get('is_active'))
        is_VIP = int(dict_data.get('is_VIP'))
        groups = dict_data.get('groups')
        if not all(
            [q in [0, 1]
             for q in (is_staff, is_superuser, is_active, is_VIP)]):
            return to_json_data(errno=Code.PARAMERR, errmsg='参数错误')
        try:
            if groups:
                group_set = set(int(i) for i in groups)
            else:
                group_set = set()
        except Exception as e:
            logger.error('传入的用户组参数异常:{}'.format(e))
            return to_json_data(errno=Code.PARAMERR, errmsg='用户组参数异常')
        all_groups_set = set(i.id for i in Group.objects.only('id'))

        if not group_set.issubset(all_groups_set):
            return to_json_data(errno=Code.PARAMERR, errmsg='传入的用户组参数不合法')
        gsa = Group.objects.filter(id__in=group_set)

        user.groups.set(gsa)
        user.is_staff = bool(is_staff)
        user.is_superuser = bool(is_superuser)
        user.is_active = bool(is_active)
        user.is_VIP = bool(is_VIP)
        user.save()
        return to_json_data(errmsg='用户权限信息更新成功')
Пример #25
0
    def post(self, request):
        if not request.user.is_authenticated:
            return to_json_data(errno=Code.SESSIONERR, errmsg='用户未登录')
        if not request.user.is_VIP:
            return to_json_data(errno=Code.DATAERR,
                                errmsg='该用户暂未拥有该权限,请联系管理员进行修改后在进行操作')
        json_str = request.body

        if not json_str:
            return to_json_data(errno=Code.NODATA, errmsg='没有参数')

        dict_data = json.loads(json_str.decode('utf8'))
        words = dict_data.get('words').strip()
        if not words:
            return to_json_data(errno=Code.NODATA, errmsg='未传入参数')
        try:
            per = int(dict_data.get('per'))
            per = per if per else 5
        except Exception as e:
            logger.error('人声选择传参异常:{}'.format(e))
            per = 5
        try:
            speed = int(dict_data.get('speed'))
            speed = speed if speed else 5
        except Exception as e:
            logger.error('语速传参异常:{}'.format(e))
            speed = 5
        try:
            column = int(dict_data.get('column'))
            column = column if column else 5
        except Exception as e:
            logger.error('音调传参异常:{}'.format(e))
            column = 5
        song_length = int(dict_data.get('song_length'))
        engine = BaiduVoiceToWord()
        if song_length == 0:
            result = engine.say_words(words, per=per, pit=column, spd=speed)
        else:
            result = engine.stop()
        if result.get('err_msg'):
            return to_json_data(errno=Code.UNKOWNERR, errmsg='播放错误')
        return to_json_data(errno=Code.OK,
                            data={'song_length': result['song_length']})
Пример #26
0
    def delete(self, request):
        json_str = request.body
        if not json_str:
            return to_json_data(errno=Code.NODATA,
                                errmsg=error_map[Code.NODATA])
        dict_data = json.loads(json_str.decode('utf-8'))

        group_id = dict_data.get('group_list')
        if type(group_id) != type(list()):
            try:
                group_id = int(group_id)
            except Exception as e:
                logger.error('用户组ID传入异常:{}'.format(e))
                return to_json_data(errno=Code.PARAMERR, errmsg='用户组ID异常')
            group = Group.objects.filter(id=group_id).first()
            if group:
                group.permissions.clear()
                group.delete()
                return to_json_data(errmsg='用户组删除成功')
            else:
                return to_json_data(errno=Code.PARAMERR, errmsg='该用户组不存在')
        else:
            group_list = []
            for id in group_id:
                group = Group.objects.get(id=id)
                if group:
                    if Group.objects.values('id').annotate(num_users=Count('user')).filter(id=id). \
                            get()['num_users']:
                        return to_json_data(errno=Code.NODATA,
                                            errmsg='还有用户存在的用户组不允许被删除')
                    group_list.append(group)
                else:
                    return to_json_data(errno=Code.NODATA, errmsg='用户组不存在')
            for group in group_list:
                group.permissions.clear()
                group.delete()

            return to_json_data(errno=Code.OK)
Пример #27
0
 def post(self, request):
     json_str = request.body
     if not json_str:
         return to_json_data(errno=Code.PARAMERR,
                             errmsg=error_map[Code.PARAMERR])
     dict_data = json.loads(json_str.decode('utf8'))
     name = dict_data.get('name')
     if not name:
         return to_json_data(errno=Code.NODATA,
                             errmsg=error_map[Code.NODATA])
     if len(name) > 20:
         return to_json_data(errno=Code.PARAMERR, errmsg='分类名称请控制在20字内')
     tag = models.Tag.objects.get_or_create(name=name)
     if not tag[-1]:
         if tag[0].is_delete:
             tag[0].is_delete = False
             tag[0].save(update_fields=['is_delete'])
             return to_json_data(errno=Code.OK)
         else:
             return to_json_data(errno=Code.DATAEXIST, errmsg='该分类已存在')
     else:
         return to_json_data(errno=Code.OK)
Пример #28
0
 def get(self, request, mobile):
     data = {
         'mobile': mobile,
         'count': User.objects.filter(mobile=mobile).count()
     }
     return to_json_data(data=data)
Пример #29
0
 def get(self, request, username):
     data = {
         'username': username,
         'count': User.objects.filter(username=username).count()
     }
     return to_json_data(data=data)
Пример #30
0
    def post(self, request):
        json_str = request.body
        if not json_str:
            return to_json_data(errno=Code.NODATA,
                                errmsg=error_map[Code.NODATA])
        dict_data = json.loads(json_str.decode('utf8'))

        username = dict_data.get('username')
        mobile = dict_data.get('mobile')
        password = dict_data.get('password')
        password_repeat = dict_data.get('password_repeat')
        smsCode = dict_data.get('smsCode')

        if not all([username, mobile, password, password_repeat, smsCode]):
            return to_json_data(errno=Code.PARAMERR, errmsg='参数错误')

        # 验证用户名
        if not re.match(r'^[\u4e00-\u9fa5\w\d_]{2,20}$', username):
            return to_json_data(errno=Code.PARAMERR, errmsg='用户名格式不正确')
        if User.objects.filter(username=username).count() > 0:
            return to_json_data(errno=Code.DATAEXIST, errmsg='用户名已存在')
        # 验证手机号
        if not re.match(r'^1[345789]\d{9}$', mobile):
            return to_json_data(errno=Code.PARAMERR, errmsg='手机号格式不正确')
        if User.objects.filter(mobile=mobile).count() > 0:
            return to_json_data(errno=Code.DATAEXIST, errmsg='手机号已存在')
        # 验证密码
        if not re.match(r'^[\w\d]{6,20}', password):
            return to_json_data(errno=Code.PARAMERR, errmsg='密码格式不正确')
        if password != password_repeat:
            return to_json_data(errno=Code.PARAMERR, errmsg='两次输入的密码不一致,请重新输入')
        # 验证码校验
        redis_conn = get_redis_connection('verify_codes')
        sms_code = redis_conn.get('sms_{}'.format(mobile))
        if not sms_code:
            return to_json_data(errno=Code.NODATA, errmsg='验证码已过期,请重新获取')
        if sms_code.decode() != smsCode:
            return to_json_data(errno=Code.PARAMERR, errmsg='验证码输入错误,请重新输入')
        redis_conn.delete('sms_{}'.format(mobile))
        redis_conn.delete('sms_flag_{}'.format(mobile))
        user, is_create = User.objects.get_or_create(username=username,
                                                     password=password,
                                                     mobile=mobile)
        if is_create:
            login(request, user)

            return to_json_data(errmsg='恭喜您,注册成功',
                                data={'referer': request.session['referer']})
        else:
            if user.is_active:
                return to_json_data(errno=Code.USERERR, errmsg='该用户已被注册')
            else:
                user.is_active = True
                user.save(update_fields=['is_active'])
                login(request, user)
                return to_json_data(errmsg='恭喜您,注册成功')