Exemplo n.º 1
0
 def put(self, request, menu_id):
     menu = Menu.objects.filter(id=menu_id).first()
     if not menu:
         return json_response(errno=Code.NODATA, errmsg='菜单不存在')
     # 获取put请求的参数
     put_data = QueryDict(request.body)
     # 必须传递instance=menu,绑定表单
     form = MenuModelForm(put_data, instance=menu)
     if form.is_valid():
         # 这样写是拿到新的 menu 对象
         obj = form.save()
         # 检查修改了的字段是否和权限有关,如果有关就要修改权限
         flag = False
         # 通过 form.changed_data 拿到被修改的字段列表
         if 'name' in form.changed_data:
             obj.permission.name = obj.name
             flag = True
         if 'codename' in form.changed_data:
             obj.permission.codename = obj.codename
             flag = True
         if flag:
             obj.permission.save()
         return json_response(errmsg='菜单修改成功!')
     else:
         return render(request,
                       'myadmin/menu/update_menu.html',
                       context={'form': form})
Exemplo n.º 2
0
 def post(self,request):
     form=LoginForm(request.POST,request=request)
     if form.is_valid():
         data='恭喜登录成功!'
         return json_response(data=data)
     else:
         # 定义一个错误信息列表
         err_msg_list = []
         for item in form.errors.values():
             err_msg_list.append(item[0])
         err_msg_str = '/'.join(err_msg_list)
         return json_response(errno=Code.PARAMERR, errmsg=err_msg_str)
Exemplo n.º 3
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(errno=Code.DATAERR, errmsg='父菜单不能被删除')
         menu.permission.delete()
         menu.delete()
         return json_response(errmsg='删除菜单:%s成功' % menu.name)
     else:
         return json_response(errno=Code.NODATA, errmsg='菜单不存在!')
     """
Exemplo n.º 4
0
 def get(self, request):
     banners = Banner.objects.values(
         'image_url',
         'news_id').annotate(news_title=F('news__title')).filter(
             is_delete=False)[:constants.SHOW_BANNER_COUNT]
     data = {'banners': list(banners)}
     return json_response(data=data)
Exemplo n.º 5
0
 def post(self,request):
     '''
     1、先校验
     2、再登陆
     :param request:
     :return:
     '''
     form = LoginForm(request.POST,request=request)
     if form.is_valid():
         return json_response(errmsg='恭喜登陆成功')
     else:
         # 定义一个错误信息列表
         err_msg_list = []
         for item in form.errors.values():
             err_msg_list.append(item[0])
         err_msg_str = '/'.join(err_msg_list)
         return json_response(errno=Code.PARAMERR, errmsg=err_msg_str)
Exemplo n.º 6
0
    def put(self, request, user_id):
        # 1.拿到要修改的用户对象
        # 2拿到前端传递的数据
        # 4.如果成功保存数据
        # 5.不存在,返回错误
        user = User.objects.filter(id=user_id).first()
        if not user:
            return json_response(errno=Code.NODATA, errmsg='此用户不存在')

        put_data = QueryDict(request.body)
        # 创建表单对象、
        form = UserModelForm(put_data, instance=user)
        if form.is_valid():
            form.save()
            return json_response(errmsg='用户修改成功')
        else:
            return render(request, 'myadmin/user/user_detail.html', context={'form': form})
Exemplo n.º 7
0
def check_mobile_views(requst, mobile):
    """检查用户名
    url:username/(?P<moblie>^(?:+?86)?1(?:3d{3}|5[^4D]d{2}|8d{3}|7(?:[01356789]d{2}|4(?:0d|1[0-2]|9d))|9[189]d{2}|6[567]d{2}|4[579]d{2})d{6}$)/"""
    # 去数据库校验数据
    data = {'mobile': mobile,  # 查用户名
         'count': User.objects.filter(mobile=mobile).count()  # 用户查询的数量
         }
    return json_response(data=data)
Exemplo n.º 8
0
 def delete(self, request, menu_id):
     '''
     只有写delete方法,delete请求才会过来
     注意:这里是真删除!会删除数据库数据,软删除放到修改里面,因为菜单的数据并不是很重要,这是整个菜单管理里面唯一一个真删除
     :param request:
     :param menu_id:
     :return:
     '''
     menu = Menu.objects.filter(id=menu_id).only('name')
     if menu:
         menu = menu[0]  # 相当于 menu.first()
         # 看看是否是父菜单
         if menu.children.filter(is_delete=False).exists():
             return json_response(errno=Code.DATAERR, errmsg='父菜单不能删除!')
         menu.permission.delete()
         # 不需要 menu.delete() 这一步是因为permission改为了级联删除,删除了permission, menu也会被删掉
         # menu.delete()
         return json_response(errmsg='删除菜单:%s成功' % menu.name)
     else:
         return json_response(errno=Code.NODATA, errmsg='菜单不存在!')
Exemplo n.º 9
0
    def post(self,request):
        # 1数据校验
        form=RegisterForm(request.POST)
        if form.is_valid():
            # 2创建数据
            print(form.is_valid())
            username=form.cleaned_data.get('username')
            password=form.cleaned_data.get('password')
            mobile=form.cleaned_data.get('mobile')
            #create_user密码自动加密,Django实现

            User.objects.create_user(username=username,mobile=mobile,password=password)
            return json_response(errmsg='恭喜你注册成功')

        else:
            # 定义一个错误信息列表
            err_msg_list = []
            for item in form.errors.values():
                err_msg_list.append(item[0])
            err_msg_str = '/'.join(err_msg_list)
            return json_response(errno=Code.PARAMER, errmsg=err_msg_str)
Exemplo n.º 10
0
    def post(self, request):
        '''
        form
        :param request:
        :return:
        '''
        form = RegisterForm(request.POST)
        if form.is_valid():
            # 2.创建数据
            username = request.POST.get('username')
            password = request.POST.get('password')
            mobile = form.cleaned_data.get('mobile')
            Users.objects.create_user(username=username, password=password, mobile=mobile)
            return json_response(errmsg='恭喜你,注册成功!')
        else:
            # 定义一个错误信息列表
            err_msg_list = []
            for item in form.errors.values():
                err_msg_list.append(item[0])
            err_msg_str = '/'.join(err_msg_list)

            return json_response(errno=Code.PARAMERR, errmsg=err_msg_str)
Exemplo n.º 11
0
def check_username_views(requst, username):
    """检查用户名
    url:username/(?P<username>\w{5,10})/"""
    # 去数据库校验数据
    # data = {'errno': '0', 'errmsg': 'ok', 'data':
    #     {'username': username,  # 查用户名
    #      'count': User.objects.filter(username=username).count()#用户查询的数量
    #      }}
    # return JsonResponse(data=data)

    data = {'username': username,  # 查用户名

            'count': User.objects.filter(username=username).count()  # 用户查询的数量
            }
    return json_response(data=data)
Exemplo n.º 12
0
    def get(selfr, request):
        # 1.拿到所有文档
        # 2.分页
        # 1.拿到所有文档
        docs = Doc.objects.values('file_url', 'file_name', 'title', 'desc',
                                  'image_url').filter(is_delete=False)
        # 2.分页
        paginator = Paginator(docs, PER_PAGE_DOC_COUNT)
        try:
            page = paginator.get_page(int(request.GET.get('page')))
        except Exception as e:
            page = paginator.get_page(1)

        data = {'total_page': paginator.num_pages, 'docs': list(page)}
        return json_response(data=data)
Exemplo n.º 13
0
    def post(self, request):
        form = MenuModelForm(request.POST)

        if form.is_valid():
            # 创建菜单
            new_menu = form.save()
            # 内容对象

            content_type = ContentType.objects.filter(app_label='myadmin', 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, 'myadmin/menu/add_menu.html', context={'form': form})
Exemplo n.º 14
0
    def get(self, request):
        # 1、获取参数
        try:
            tag_id = int(request.GET.get('tag', 0))
        except Exception as e:
            logger.error('标签错误:\n{}'.format(e))
            tag_id = 0

        try:
            page = int(request.GET.get('page', 0))
        except Exception as e:
            logger.error('页码错误:\n{}'.format(e))
            page = 1
        # 使用only返回的是对象,所以传递到前端时需要迭代处理
        # news_queryset = News.objects.select_related('tag', 'author').only(
        #     'title', 'digest', 'image_url', 'update_time', 'tag__name', 'author__username')
        # values 返回字典
        # 2、获取查询集,不会去数据库查询数据, 这是一个惰性操作,你不去获取它的值,它不会去操作数据库,filter也不会
        # values返回的是字典,only返回的是对象;F方法的效果类似于as的效果select name as tag_name from tb_tag;
        news_queryset = News.objects.values(
            'id', 'title', 'digest', 'image_url',
            'update_time').annotate(tag_name=F('tag__name'),
                                    author=F('author__username'))
        # 3、过滤
        # if tag_id:
        #     news = news_queryset.filter(is_delete=False, tag_id=tag_id)
        # else:
        #     news = news_queryset.filter(is_delete=False)
        news = news_queryset.filter(
            is_delete=False,
            tag_id=tag_id) or news_queryset.filter(is_delete=False)
        # 4、分页
        paginator = Paginator(news, constants.PER_PAGE_NEWS_COUNT)

        # 获取页面数据
        # 方式一:news_info = paginator.page(page) 但是会报错,get_page可以容错
        news_info = paginator.get_page(page)
        # 5、返回数据
        data = {
            'total_pages': paginator.num_pages,
            'news': list(news_info)  # news_info不是列表,但它可迭代
        }
        return json_response(data=data)
Exemplo n.º 15
0
def check_username_view(request, username):
    '''
    校验用户名
    :param request:
    :param username:
    :return:
    '''
    # data = {
    #     "errno": "0",
    #     "errmsg": "OK",
    #     "data": {
    #         "username": username,  # 查询的用户名
    #         "count": Users.objects.filter(username=username).count()  # 用户名查询的数量
    #     }
    # }
    data = {
        "username": username,  # 查询的用户名
        "count": Users.objects.filter(username=username).count()  # 用户名查询的数量
    }
    return json_response(data=data)
Exemplo n.º 16
0
    def put(self, request, menu_id):
        menu = Menu.objects.filter(id=menu_id).first()
        # 获取put参数
        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})
Exemplo n.º 17
0
def check_mobile_view(request, mobile):
    '''
    校验手机号是否存在
    url:/moblie/(?P<moblie>1[3-9]\d{9})/
    :param request:
    :param mobile:
    :return:
    '''
    # data = {
    #     "errno": "0",
    #     "errmsg": "OK",
    #     "data": {
    #         "mobile": mobile,  # 查询的手机号
    #         "count": Users.objects.filter(mobile=mobile).count()  # 手机号查询的数量
    #     }
    # }

    data = {
        "mobile": mobile,  # 查询的手机号
        "count": Users.objects.filter(mobile=mobile).count()  # 手机号查询的数量
    }
    return json_response(data=data)
Exemplo n.º 18
0
    def get(self, request):
        try:
            tag_id = int(request.GET.get('tag', 0))
        except Exception as e:
            logger.error('标签错误:\n{}'.format(e))
            tag_id = 0
        #page的获取

        try:
            page = int(request.GET.get('page', 0))
        except Exception as e:
            logger.error('页码错误:\n{}'.format(e))
            page = 1

        #3.获取查询集
        # 使用only返回的是对象,所以传递到前端时需要迭代处理
        # news_queryset = News.objects.select_related('tag', 'author').only(
        #     'title', 'digest', 'image_url', 'update_time', 'tag__name', 'author__username')
        # values 返回字典
        news_queryset = News.objects.values(
            'id', 'title', 'digest', 'image_url',
            'update_time').annotate(tag_name=F('tag__name'),
                                    author=F('author__username'))
        #4过滤
        # if tag_id:
        #     news=news_queryset.filter(is_delete=False,tag_id=tag_id)
        # else:
        #     news=news_queryset.filter(is_delete=False)
        news = news_queryset.filter(
            is_delete=False,
            tag_id=tag_id) or news_queryset.filter(is_delete=False)
        #3分页
        pageinator = Paginator(news, constants.PER_PAGE_NEWS_COUNT)

        # 获取页面数据 get_page可以容错
        news_info = pageinator.get_page(page)
        #4返回数据
        data = {'total_page': pageinator.num_pages, 'news': list(news_info)}
        return res_code.json_response(data=data)
Exemplo n.º 19
0
    def post(self, request, news_id):
        # 是否登录
        if not request.user.is_authenticated:
            return json_response(errno=Code.SESSIONERR,
                                 errmsg=error_map[Code.SESSIONERR])
        # 新闻是否存在
        if not News.objects.only('id').filter(is_delete=False,
                                              id=news_id).exists():
            return json_response(errno=Code.PARAMERR, errmsg='新闻不存在!')

        content = request.POST.get('content')
        # 内容是否为空
        if not content:
            return json_response(errno=Code.PARAMERR, errmsg='评论内容不能为空!')

        # 父id是否正常
        parent_id = request.POST.get('parent_id')
        if parent_id:
            try:
                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(errno=Code.PARAMERR,
                                         errmsg=error_map[Code.PARAMERR])
            except Exception as e:
                logger.info('前端传递过来的parent_id异常\n{}'.format(e))
                return json_response(errno=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())
Exemplo n.º 20
0
    def post(self, request):
        '''

        - 发送短信
        - 保存这个短信验证码(保存在哪里?)
        - 保存发送记录
        :param request:
        :return:
        '''
        form = CheckImageForm(request.POST, request=request)
        if form.is_valid():
            # success
            # 获取手机号码
            mobile = form.cleaned_data.get('mobile')
            # 生成短信验证码
            sms_code = ''.join([
                random.choice('0123456789')
                for _ in range(constants.SMS_CODE_LENGTH)
            ])
            # 发送短信验证码,调用接口
            # ..........
            # 保存发送记录
            # logger.info('发送短信验证码[正常][mobile: %s sms_code: %s]' % (mobile,sms_code))
            ccp = CCP()
            try:
                res = ccp.send_template_sms(
                    mobile, [sms_code, constants.SMS_CODE_EXPIRES], "1")
                if res == 0:
                    logger.info('发送短信验证码[正常][mobile: %s sms_code: %s]' %
                                (mobile, sms_code))
                else:
                    logger.error('发送短信验证码[失败][moblie: %s sms_code: %s]' %
                                 (mobile, sms_code))
                    return json_response(errno=Code.SMSFAIL,
                                         errmsg=error_map[Code.SMSFAIL])
            except Exception as e:
                logger.error('发送短信验证码[异常][mobile: %s message: %s]' %
                             (mobile, e))
                return json_response(errno=Code.SMSERROR,
                                     errmsg=error_map[Code.SMSERROR])
            # 保存这个验证码 这里有个时限的问题
            # 两种方案:1、session  2、redis (不保存在MySQL是因为MySQL效率太低)
            # 但session的时限是统一设置的,这里如果重新设置时限,会把前面的session覆盖,因此排除session方案,用redis保存验证码
            # request.session['sms_code'] = sms_code
            # request.session.set_expiry
            # 60秒记录
            # 5分钟有效
            # 创建短信验证码发送记录的key
            sms_flag_key = 'sms_flag_{}'.format(mobile)
            # 创建短信验证码内容的key
            sms_text_key = 'sms_text_{}'.format(mobile)
            redis_coon = get_redis_connection(alias='verify_codes')
            # 创建一个管道
            pl = redis_coon.pipeline()
            try:
                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(errno=Code.UNKOWNERR,
                                     errmsg=error_map[Code.UNKOWNERR])
        else:
            # fail
            # 将表单的报错信息进行拼接
            err_msg_list = []
            for item in form.errors.values():
                # item是一个列表,
                err_msg_list.append(item[0])
            err_msg_str = '/'.join(err_msg_list)
            return json_response(errno=Code.PARAMERR, errmsg=err_msg_str)
Exemplo n.º 21
0
    def post(self, request):
        # 1.校验参数

        form = CheckImagForm(request.POST, request=request)
        if form.is_valid():
            pass

            # 2.获取手机
            mobile = form.cleaned_data.get('mobile')
            # 3.生成手机验证码
            sms_code = ''.join([random.choice('0123456789') for _ in range(constants.SMS_CODE_LENGTH)])
            print('sms_code%s'%sms_code)
            logger.info('发送短信验证码[正常][mobile: %s sms_code: %s]' % (mobile, sms_code))
            # 4.发送手机验证码
            # ccp = CCP()
            # try:
            #     res = ccp.send_template_sms(mobile, [sms_code, constants.SMS_CODE_EXPIRES], "1")
            #     if res == 0:
            #         logger.info('发送短信验证码[正常][mobile: %s sms_code: %s]' % (mobile, sms_code))
            #     else:
            #         logger.error('发送短信验证码[失败][moblie: %s sms_code: %s]' % (mobile, sms_code))
            #         return json_response(errno=Code.SMSFAIL, errmsg=error_map[Code.SMSFAIL])
            # except Exception as e:
            #     logger.error('发送短信验证码[异常][mobile: %s message: %s]' % (mobile, e))
            #     return json_response(errno=Code.SMSERROR, errmsg=error_map[Code.SMSERROR])

            # 5.保存到redis数据库
            # 创建短信验证码发送记录
            redis_coon=get_redis_connection(alias='verify_code')
            sms_flag_key = 'sms_flag_{}'.format(mobile)
            # 创建短信验证码内容记录
            sms_text_key = 'sms_text_{}'.format(mobile)
            pl=redis_coon.pipeline()
            try:
                pl.setex(sms_flag_key,constants.SMS_CODE_INTERVAL,1)
                pl.setex(sms_text_key,constants.SMS_CODE_EXPIRES*60,sms_code)
                pl.execute()
                return json_response(errmsg="短信验证码发送成功!")
            except Exception as e:
                logger.error('redis 执行异常:{}'.format(e))

                return json_response(errno=Code.UNKOWNERR, errmsg=error_map[Code.UNKOWNERR])


            # 4.发送手机验证码
            # ccp = CCP()
            # try:
            #     res = ccp.send_template_sms(mobile, [sms_code, constants.SMS_CODE_EXPIRES], "1")
            #     if res == 0:
            #         logger.info('发送短信验证码[正常][mobile: %s sms_code: %s]' % (mobile, sms_code))
            #     else:
            #         logger.error('发送短信验证码[失败][moblie: %s sms_code: %s]' % (mobile, sms_code))
            #         return json_response(errno=Code.SMSFAIL, errmsg=error_map[Code.SMSFAIL])
            # except Exception as e:
            #     logger.error('发送短信验证码[异常][mobile: %s message: %s]' % (mobile, e))
            #     return json_response(errno=Code.SMSERROR, errmsg=error_map[Code.SMSERROR])

            # 5.保存到redis数据库
            # 创建短信验证码发送记录
            # sms_flag_key = 'sms_flag_{}'.format(mobile)
            # # 创建短信验证码内容记录
            # sms_text_key = 'sms_text_{}'.format(mobile)
            # return json_response(errmsg="短信验证码发送成功!")

            # redis_conn = get_redis_connection(alias='verify_code')
            # # try:
            # pl = redis_conn.pipeline()
            # pl.setex('sms_%s' % mobile, constants.SMS_CODE_REDIS_EXPIRES, sms_code)
            # pl.setex('send_flag_%s' % mobile, constants.SEND_SMS_CODE_INTERVAL, 1)
            # pl.execute()
            # return json_response(errmsg="短信验证码发送成功!")


            # redis_conn.set(sms_flag_key, constants.SMS_CODE_INTERVAL, 1)
            # redis_conn.set(sms_text_key, constants.SMS_CODE_EXPIRES * 60, sms_code)

            # except Exception as e:
            #     logger.error('redis 执行异常:{}'.format(e))
            #
            #     return json_response(errno=Code.UNKOWNERR, errmsg=error_map[Code.UNKOWNERR])
            # pl = redis_conn.pipeline()
            #
            # # try:
            # 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()

            # except Exception as e:
            #     logger.error('redis 执行异常:{}'.format(e))
            #
            #     return json_response(errno=Code.UNKOWNERR, errmsg=error_map[Code.UNKOWNERR])

        else:
            # 将表单的报错信息进行拼接
            err_msg_list = []
            for item in form.errors.get_json_data().values():
                err_msg_list.append(item[0].get('message'))
                # print(item[0].get('message'))   # for test
            err_msg_str = '/'.join(err_msg_list)  # 拼接错误信息为一个字符串

            return json_response(errno=Code.PARAMERR, errmsg=err_msg_str)