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