Exemple #1
0
 def delete(self, request, menu_id):
     menu = Menu.objects.filter(id=menu_id).only('name')
     if menu:
         menu = menu[0]
         if menu.children.filter(is_delete=False).exists():
             return json_response(errorno=Code.DATAERR, errmsg='父菜单不能删除!')
         menu.permission.delete()
         return json_response(errmsg='删除菜单:%s成功' % menu.name)
     else:
         return json_response(errorno=Code.NODATA, errmsg='菜单不存在!')
Exemple #2
0
    def post(self, request):
        """

        - 发送短信验证码
        - 发送短信
        - 保存短信验证码
        - 保存发送记录
        :param request:
        :return:
        """
        form = CheckImageForm(request.POST, request=request)

        if form.is_valid():
            # 获取手机号
            mobile = form.cleaned_data.get('mobile')
            # 生成短信验证码
            sms_code = ''.join([str(random.choice([i for i in range(10)])) for _ in range(constants.SMS_CODE_LENGTH)])
            # 发送短信验证码
            # ccp = CCP()
            # # 注意: 测试的短信模板编号为1
            # result = None
            # for i in range(3):
            #     result = ccp.send_template_sms('{}'.format(mobile), ['{}'.format(sms_code), 5], "1")
            #     if result == 0:
            #         print('短信验证码发送成功!')
            #         break
            result = huyisms(smscode=sms_code, mobile=mobile)
            logger.info('{},发送验证码{}成功'.format(mobile, sms_code))
            # 保存验证码 redis
            # 创建发送验证码记录的key
            sms_flag_key = 'sms_flag_{}'.format(mobile)
            sms_text_key = 'sms_text_{}'.format(mobile)
            redis_conn = get_redis_connection(alias='verify_code', )
            # 让管道通知redis
            pl = redis_conn.pipeline()

            try:
                # 设置生存时间与value
                pl.setex(sms_flag_key, constants.SMS_CODE_INTERVAL, 1)
                pl.setex(sms_text_key, constants.SMS_CODE_EXPIRES*60, sms_code)
                # 让管道通知 redis 执行
                pl.execute()
                return json_response(errmsg='短信验证码发送成功')
            except Exception as e:
                logger.error('redis 执行异常{}'.format(e))
                return json_response(errorno=Code.UNKOWNERR, errmsg=error_map[Code.UNKOWNERR])

        else:
            # 将表单错误信息进行拼接
            err_msg_str = '/'.join([item[0] for item in form.errors.values()])

            return json_response(errorno=Code.PARAMERR, errmsg=err_msg_str)
Exemple #3
0
 def handle_no_permission(self):
     """
     覆盖父类方法,解决ajax返回json数据的问题
     :return:
     """
     if self.request.is_ajax():
         if self.request.user.is_authenticated:
             return json_response(errorno=Code.ROLEERR, errmsg='您没有权限!')
         else:
             return json_response(errorno=Code.SESSIONERR, errmsg=
             '您未登录,请登录!', data={'url': reverse(self.get_login_url())})
     else:
         return super().handle_no_permission()
Exemple #4
0
def get_logger(request, d_id):
    """
    快速查看 logs 接口
    :param request:
    :param d_id:
    :return:
    """
    if str(d_id) == datetime.datetime.today().strftime('%d'):
        logs = linecache.getlines('logs/logs.log')[-20:-1] or None
        linecache.clearcache()
        if logs:
            data = {'logs': logs}
            return json_response(data=data)
        else:
            return json_response(errorno=Code.NODATA, errmsg='出错了')
Exemple #5
0
    def get(self, request):
        # 获取数据
        try:
            tag_id = int(request.GET.get('tag_id', 0))
        except Exception as e:
            logger.error("标签错误:\n{}".format(e))
            tag_id = 0
        try:
            page = int(request.GET.get('page', 1))
        except Exception as e:
            logger.error("当前页数错误:\n{}".format(e))
            page = 1

        # 获取查询集
        news_queryset = News.objects.values(
            'id', 'title', 'digest', 'image_url',
            'update_time').annotate(tag_name=F('tag__name'),
                                    author=F('author__username'))
        # news_queryset = News.objects.select_related('tag', 'author'). \
        #     only('title', 'digest', 'image_url', 'update_time', 'tag__name', 'author__username')

        news = news_queryset.filter(
            is_delete=False,
            tag_id=tag_id) or news_queryset.filter(is_delete=False)
        # 分页
        paginator = Paginator(news, PER_PAGE_NEWS_COUNT)
        # 获取当前页数据
        news_info = paginator.get_page(page)
        # 返回数据
        data = {'total_pages': paginator.num_pages, 'news': list(news_info)}
        return json_response(data=data)
Exemple #6
0
    def post(self, request):
        try:
            file = request.FILES['upload']
            filename = get_filename(file.name)
            file_path = os.path.join(settings.MEDIA_ROOT, filename)
            with open(file_path, 'wb') as f:
                for chunk in file.chunks():
                    f.write(chunk)

            return json_response(data={
                'url': settings.MEDIA_URL + filename,
                'name': filename,
                'uploaded': '1'
            })
        except Exception as e:
            return json_response(data={'uploaded': '0'})
Exemple #7
0
    def get(self, request):
        # 访问redis,查看是否存在,存在返回皮卡丘
        ip = get_ip(request)
        redis_conn = get_redis_connection(alias='request_interval')
        if redis_conn.get('req_flag_{}'.format(ip)):
            return HttpResponse(MIGUAN, status=418)
        # 对请求进行鉴别
        req_filter = ReqFilter()
        if req_filter.combine_api_filter(request):
            return HttpResponse(BLOG_URL + PIKAQIU + MIGUAN, status=418)
        try:
            page = int(request.GET.get('page') or 1)
        except ValueError:
            return HttpResponse(PIKAQIU, status=418)
        # 获取查询集
        spider_data = SpiderData.objects.values(
            'false_data',
            'data_index',
            'image_url',
            'order',
        ).annotate(encrypt_data=F('spider__encrypt_data')).order_by('id')

        # 分页
        paginator = Paginator(spider_data, 5)
        # 当前页数据
        spider_info = paginator.get_page(page)

        # 送入redis
        req_flag_key = 'req_flag_{}'.format(ip)
        # 让管道通知redis
        pl = redis_conn.pipeline()

        try:
            # 设置生存时间与value
            pl.setex(req_flag_key, REQUEST_INTERVAL, 1)
            # 让管道通知 redis 执行
            pl.execute()
        except Exception as e:
            logger2.error('redis 执行异常{}'.format(e))
            return json_response(errno=Code.UNKOWNERR,
                                 errmsg=error_map[Code.UNKOWNERR])

        data = {
            'total_pages': paginator.num_pages,
            'spider': list(spider_info)
        }
        return json_response(data=data)
Exemple #8
0
    def post(self, request):
        email = request.POST.get('email')

        data = {
            'email': email,
            'count': User.objects.filter(email=email).count()
        }
        return json_response(data=data)
Exemple #9
0
 def post(self, request):
     form = NewsModelForm(request.POST)
     if form.is_valid():
         instance = form.save(commit=False)
         instance.author = request.user
         instance.save()
         return json_response(errmsg='添加新闻成功!')
     else:
         return render(request, 'admin/news/news_detail.html', context={'form': form})
Exemple #10
0
    def post(self, request):
        # 1.校验数据
        form = RegisterForm(request.POST, request=request)
        if form.is_valid():
            # 新建数据
            nickname = form.cleaned_data.get('nickname')
            password = form.cleaned_data.get('password')
            email = form.cleaned_data.get('email')
            # 新建用户
            User.objects.create_user(username=nickname, password=password, email=email)
            # 注册成功记录 IP name 邮箱
            # logger.info('{} {} {}'.format())
            return json_response(errmsg='注册成功')
        else:
            # 将表单错误信息进行拼接
            err_msg_str = '/'.join([item[0] for item in form.errors.values()])

            return json_response(errno=Code.PARAMERR, errmsg=err_msg_str)
Exemple #11
0
 def get(self, request, news_id):
     # 1. 拿到对应的新闻对象
     news = News.objects.filter(id=news_id).first()
     if news:
         # 2. 生成表单对象
         form = NewsModelForm(instance=news)
     else:
         return json_response(errorno=Code.NODATA, errmsg='没有此新闻!')
     # 3. 渲染并返回
     return render(request, 'admin/news/news_detail.html', context={'form': form})
Exemple #12
0
    def post(self, request):
        # 1.校验数据
        form = RegisterForm(request.POST, request=request)
        if form.is_valid():
            # 新建数据
            username = form.cleaned_data.get('username')
            password = form.cleaned_data.get('password')
            mobile = form.cleaned_data.get('mobile')
            # 新建用户
            user = User.objects.create_user(username=username,
                                            password=password,
                                            mobile=mobile)
            user.groups.add(5)
            return json_response(errmsg='注册成功')
        else:
            # 将表单错误信息进行拼接
            err_msg_str = '/'.join([item[0] for item in form.errors.values()])

            return json_response(errorno=Code.PARAMERR, errmsg=err_msg_str)
Exemple #13
0
 def put(self, request, user_id):
     user = User.objects.filter(id=user_id).first()
     put = QueryDict(request.body)
     if user:
         form = UserModelForm(put, instance=user)
     else:
         form = UserModelForm()
     if form.is_valid():
         form.save()
         return json_response()
     else:
         return render(request, 'admin/user/user_detail.html', context={'form': form})
Exemple #14
0
    def post(self, request):
        # 1. 获取post参数,创建一个模型表单对象
        self.form_class = self.get_form_class()
        form = self.form_class(request.POST)
        # 2.校验
        if form.is_valid():
            # 3. 返回校验结果
            self.save(form)
            return json_response(errmsg='添加数据成功!')
        else:
            context = self.get_context_data(form=form)

            return render(request, self.get_template_name(), context=context)
Exemple #15
0
    def post(self, request):
        form = MenuModelForm(request.POST)

        if form.is_valid():
            new_menu = form.save()
            content_type = ContentType.objects.filter(app_label='admin2', model='menu').first()
            permission = Permission.objects.create(name=new_menu.name, content_type=content_type,
                                                   codename=new_menu.codename)
            new_menu.permission = permission
            new_menu.save(update_fields=['permission'])
            return json_response(errmsg='菜单添加成功!')
        else:
            return render(request, 'admin/menu/add_menu.html', context={'form': form})
Exemple #16
0
def check_mobile_view(request, mobile):
    """
    查询手机号是否存在
    url:  /veri/mobile=(?P\<mobile>1[3456789]\d{9}/
    :param request:
    :param mobile:
    :return:
    """

    data = {
        'mobile': mobile,
        'count': User.objects.filter(mobile=mobile).count()
    }
    return json_response(data=data)
Exemple #17
0
def check_username_view(request, username):
    """
    查询用户名是否存在
    url: /user/check=(?P<username>\w{5,20})
    :param request:
    :param username:
    :return:
    """
    data = {
            "username": username,   # 查询用户名
            "count": User.objects.filter(username=username).count()     # 查询用户数量
        }

    return json_response(data=data)
Exemple #18
0
def check_nickname_view(request, nickname):
    """
    查询用户名是否存在
    url: /veri/check=(?P<nickname>.*?{5,20})
    :param request:
    :param nickname:
    :return:
    """
    data = {
        "nickname": nickname,  # 查询用户名
        "count": User.objects.filter(username=nickname).count()  # 查询用户数量
    }

    return json_response(data=data)
Exemple #19
0
    def put(self, request, **kwargs):
        # 1. 获取模型对象
        self.obj = self.get_obj(**kwargs)
        # 2. 获取参数,创建模型表单对象
        self.form_class = self.get_form_class()
        form = self.form_class(QueryDict(request.body), instance=self.obj)
        # 3. 校验
        if form.is_valid():
            self.save(form)
            return json_response(errmsg='修改数据成功!')
        else:
            # 4. 返回结果
            context = self.get_context_data(form=form)

            return render(request, self.get_template_name(), context=context)
Exemple #20
0
 def post(self, request):
     # 1.根据post的数据,创建模型表单对象
     form = GroupModeForm(request.POST)
     # 2.校验
     if form.is_valid():
         # 3.如果成功,保存,返回ok
         form.save()
         return json_response(errmsg='添加分组成功!')
     else:
         # 4.如果失败,返回渲染了错误信息的表单html
         menus = Menu.objects.only('name', 'permission_id').select_related('permission').filter(is_delete=False,
                                                                                                parent=None)
         return render(request, 'admin/group/group_detail.html', context={
             'form': form,
             'menus': menus
         })
Exemple #21
0
 def put(self, request, menu_id):
     menu = Menu.objects.filter(id=menu_id).first()
     put_data = QueryDict(request.body)
     form = MenuModelForm(put_data, instance=menu)
     if form.is_valid():
         obj = form.save()
         flag = False
         if 'name' in form.changed_data:
             obj.permission.name = obj.name
             flag = True
         if 'codename' in form.changed_data:
             obj.permission.codename = obj.name
             flag = True
         if flag:
             obj.permission.save()
         return json_response(errmsg='菜单修改成功!')
     else:
         return render(request, 'admin/menu/update_menu.html', context={'form': form})
Exemple #22
0
 def get(self, request, group_id):
     # 1. 拿到要修改的分组
     group = Group.objects.filter(id=group_id).first()
     # 1.1 判断是否存不存在
     if not group:
         return json_response(errorno=Code.NODATA, errmsg='没有此分组!')
     # 2.创建表单
     form = GroupModeForm(instance=group)
     # 3.拿到所有的可用一集菜单
     menus = Menu.objects.only('name', 'permission_id').select_related('permission').filter(is_delete=False,
                                                                                            parent=None)
     # 4.拿到当前组的可用权限
     permissions = group.permissions.only('id').all()
     # 3.返回渲染html
     return render(request, 'admin/group/group_detail.html', context={
         'form': form,
         'menus': menus,
         'permissions': permissions
     })
Exemple #23
0
    def post(self, request, news_id):
        # 是否登录
        if not request.user.is_authenticated:
            return json_response(errorno=Code.SESSIONERR,
                                 errmsg=error_map[Code.SESSIONERR])
        # 新闻是否存在
        if not News.objects.only('id').filter(is_delete=False,
                                              id=news_id).exists():
            return json_response(errorno=Code.PARAMERR, errmsg="新闻不存在!")

        # 判断内容
        json_data = request.body
        if not json_data:
            return json_response(errorno=Code.PARAMERR,
                                 errmsg=error_map[Code.PARAMERR])
        # 将json_data 转换成json
        json_data = json.loads(json_data.decode('utf8'))
        # 判断内容是否为空
        content = json_data.get('content')
        if not content:
            return json_response(errorno=Code.PARAMERR, errmsg='评论内容不能为空')

        # 判断父id是否正常
        parent_id = json_data.get('parent_id')
        try:
            if parent_id:
                parent_id = int(parent_id)
                if not Comments.objects.only('id'). \
                        filter(is_delete=False, id=parent_id, news_id=news_id).exists():
                    return json_response(errorno=Code.PARAMERR,
                                         errmsg=error_map[Code.PARAMERR])
        except Exception as e:
            logger.info("前端传过来的parent_id异常:\n{}".format(e))
            return json_response(errorno=Code.PARAMERR, errmsg="未知异常")

        # 保存到数据库
        new_comment = Comments()
        new_comment.content = content
        new_comment.news_id = news_id
        new_comment.author = request.user
        new_comment.parent_id = parent_id if parent_id else None
        new_comment.save()

        # 序列化一个评论数据
        return json_response(data=new_comment.to_dict_data())
Exemple #24
0
    def put(self, request, news_id):
        news = News.objects.filter(id=news_id).first()
        put = QueryDict(request.body)
        if news:
            form = NewsModelForm(put, instance=news)
        else:
            form = NewsModelForm()

        if form.is_valid():
            # 优化
            # form.save()
            if form.has_changed():
                instance = form.save(commit=False)
                instance.save(update_fields=form.changed_data)

            return json_response(errmsg='修改新闻成功!')
        else:

            return render(request, 'admin/news/news_detail.html', context={
                'form': form,
            })
Exemple #25
0
 def get(self, request):
     banners = Banner.objects.values('news_id')\
                   .annotate(news_title=F('news__title'), image_url=F('news__image_url'))\
                   .filter(is_delete=False)[:SHOW_BANNER_COUNT]
     data = {'banners': list(banners)}
     return json_response(data=data)