潭州课堂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='您要更改的标签不存在')

  

原文地址:https://www.cnblogs.com/gdwz922/p/10236915.html