zoukankan      html  css  js  c++  java
  • 潭州课堂25班:Ph201805201 django 项目 第三十四课 后台文章标签更新功能 ,创建功能实现(课堂笔记)

    g更改标签:,前台要向后台传来 id, name,

    对标签进行校验:标签不能为空,标签是否已经存在,

     流程:

        def put(self, request, tag_id):
            '''
            更改标签
            :param request:
            :return:
            '''
            # 拿到前台传来的参数
            try:
                json_data = request.body
                if not json_data:
                    return to_json_data(errno=Code.PARAMERR, errmsg=error_map[Code.PARAMERR])
            except Exception as e:
                logging.info('错误信息:{}'.format(e)
                return to_json_data(errno=Code.UNKOWNERR, errmsg=error_map.[Code.UNKOWNERR])
            # 将json转化为dict
            dict_data = json.loads(json_data.decode('utf8'))
            tag_name = dict_data.get('name')
    
            tag = models.Tag.objects.only().filter(id=tag_id).first()
            if tag:
                                # 清洗去空格
                if tag_name and tag_name.strip():
                    # 如果新命名的 name 在标签中不存在
                    if not models.Tag.objects.only('name').filter(name=tag_name).exists():
                        # 把新的 name 给存入
                        tag.name = tag_name
                        tag.save(update_fields=['name'])                       # 优化措施
                        return to_json_data(errmsg='标签更改成功')
                    else: return to_json_data(errno=Code.PARAMERR,errmsg='该标签已经存在')
                else: return to_json_data(errno=Code.PARAMERR,errmsg='标签名不能为空')
            else: return to_json_data(errno=Code.PARAMERR,errmsg='您要更改的标签不存在')
    

      

    新增标签:

    前台向后台传参数: name: 判断是否存在,不存在才能创建 :

    url 请求:post

        def post(self, request):
            '''
            添加新标签
            :param request:
            :return:
            '''
            json_data = request.body
            if not json_data:
                return to_json_data(errno=Code.PARAMERR, errmsg=error_map[Code.PARAMERR])
            # 将 json 转化为 dict
            dict_data = json.loads(json_data.decode('utf8'))
            tag_name = dict_data.get('name')
             # 清洗去空格
            if tag_name and tag_name.strip():
                #  如果存在,取出来,如果不存在,创建一个
                # 返回是个元祖
                tag_up = models.Tag.objects.get_or_create(name=tag_name)
                #  tag_bole 第二个元素如果是 False,说明 name 存在,并取出
                # 如果是 True 创建
                #  tag_inst 查询集
                tag_inst, tag_bole = tag_up
    
                # 来着构造一个字典
                new_tag_dist = {
                    'id':tag_inst.id,
                    'name':tag_inst.name
                }
                return to_json_data(errmsg='标签创建成功', data=new_tag_dist) if tag_bole else 
                    to_json_data(errno=Code.DATAEXIST, errmsg='标签已存在')
    
            else:return to_json_data(errno=Code.PARAMERR, errmsg='标签名不能为空')
    

      

    给查询,创建 标签方法放在一个类里,删除,更改标签方法放到另一个类中,

     一个类里最好不要有两个 get 请求,get 和 put 请求不要在一个灰中,

    import json
    import logging
    from django.shortcuts import render
    from django.views import View
    from django.db.models import  Count      # django自带的计算
    
    from ..news import models                # 导入相关数据库
    from utils.json_fun import to_json_data
    from utils.res_code import Code,error_map
    
    logger = logging.getLogger('django')
    
    class  Index(View):
        '''
        创建 admin 主页视图
        '''
        def get(self, request):
            return render(request, 'admin/index/index.html')
    
    
    class  TagManager(View):
        '''
        创建标签管理视图
        /admin/tags/
        '''
        def get(self, request):
            #      查询新闻分类表 did,类名,及类下的新闻文章总数
            #      跟上条件:没有被逻辑删除的,排序:文章总数,修改时间,
            tags = models.Tag.objects.values('id', 'name').annotate(num_news=Count('news')).
                filter(is_delete=False).order_by('-num_news', '-update_time')
    
            return render(request, 'admin/news/tags_manage.html', locals())
    
        def post(self, request):
            '''
            添加新标签
            :param request:
            :return:
            '''
            json_data = request.body
            if not json_data:
                return to_json_data(errno=Code.PARAMERR, errmsg=error_map[Code.PARAMERR])
            # 将 json 转化为 dict
            dict_data = json.loads(json_data.decode('utf8'))
            tag_name = dict_data.get('name')
             # 清洗去空格
            if tag_name:
                tag_name = tag_name.strip()
                #  如果存在,取出来,如果不存在,创建一个
                # 返回是个元祖
                tag_up = models.Tag.objects.get_or_create(name=tag_name)
                #  tag_bole 第二个元素如果是 False,说明 name 存在,并取出
                # 如果是 True 创建
                #  tag_inst 查询集
                tag_inst, tag_bole = tag_up
    
                # 来着构造一个字典
                new_tag_dist = {
                    'id':tag_inst.id,
                    'name':tag_inst.name
                }
                return to_json_data(errmsg='标签创建成功', data=new_tag_dist) if tag_bole else 
                    to_json_data(errno=Code.DATAEXIST, errmsg='标签已存在')
    
            else:return to_json_data(errno=Code.PARAMERR, errmsg='标签名不能为空')
    
    
    
    class TagEdit(View):
        '''
        删除,更改,标签类
        /admin/tags
        '''
        def delete(self, request, tag_id):
            # 删除
            tag = models.Tag.objects.only('id').filter(is_delete=False, id=tag_id).first()
            if tag:
                tag.delete()   # 真的删除
                # 逻辑删除
                # tag.is_delete = True
                tag.save()
                # tag.save(update_fields=['is_delete'])           # 优化措施:只对指定字段保存
                return to_json_data(errmsg='标签删除成功')
            else:
                return to_json_data(errno=Code.PARAMERR,errmsg='您要删除的标签不存在')
    
    
        def put(self, request, tag_id):
            '''
            更改标签
            :param request:
            :return:
            '''
            # 拿到前台传来的参数
            json_data = request.body
            if not json_data:
                return to_json_data(errno=Code.PARAMERR, errmsg=error_map[Code.PARAMERR])
            # 将 json 转化为 dict
            dict_data = json.loads(json_data.decode('utf8'))
            tag_name = dict_data.get('name')
    
            tag = models.Tag.objects.only().filter(id=tag_id).first()
            if tag:
                                # 清洗去空格
                if tag_name :
                    tag_name = tag_name.strip()
                    # 如果新命名的 name 在标签中不存在
                    if not models.Tag.objects.only('name').filter(name=tag_name).exists():
                        # 把新的 name 给存入
                        tag.name = tag_name
                        tag.save(update_fields=['name'])                       # 优化措施
                        return to_json_data(errmsg='标签更改成功')
                    else: return to_json_data(errno=Code.PARAMERR,errmsg='该标签已经存在')
                else: return to_json_data(errno=Code.PARAMERR,errmsg='标签名不能为空')
            else: return to_json_data(errno=Code.PARAMERR,errmsg='您要更改的标签不存在')
    

      

  • 相关阅读:
    matlab图像处理-中值滤波原理
    typora修改主题和字体
    [NLP] TextCNN模型原理和实现
    [python] 基于词云的关键词提取:wordcloud的使用、源码分析、中文词云生成和代码重写
    基于sklearn和keras的数据切分与交叉验证
    基于TextRank提取关键词、关键短语、摘要
    [强化学习]Part1:强化学习初印象
    Linux多文件按行拼接整合命令paste
    文本匹配算法
    Python如何输出带颜色的文字
  • 原文地址:https://www.cnblogs.com/gdwz922/p/10236915.html
Copyright © 2011-2022 走看看