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

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

流程:

  1. def put(self, request, tag_id):
  2. '''
  3. 更改标签
  4. :param request:
  5. :return:
  6. '''
  7. # 拿到前台传来的参数
  8. try:
  9. json_data = request.body
  10. if not json_data:
  11. return to_json_data(errno=Code.PARAMERR, errmsg=error_map[Code.PARAMERR])
  12. except Exception as e:
  13. logging.info('错误信息:{}'.format(e)
  14. return to_json_data(errno=Code.UNKOWNERR, errmsg=error_map.[Code.UNKOWNERR])
  15. # 将json转化为dict
  16. dict_data = json.loads(json_data.decode('utf8'))
  17. tag_name = dict_data.get('name')
  18.  
  19. tag = models.Tag.objects.only().filter(id=tag_id).first()
  20. if tag:
  21. # 清洗去空格
  22. if tag_name and tag_name.strip():
  23. # 如果新命名的 name 在标签中不存在
  24. if not models.Tag.objects.only('name').filter(name=tag_name).exists():
  25. # 把新的 name 给存入
  26. tag.name = tag_name
  27. tag.save(update_fields=['name']) # 优化措施
  28. return to_json_data(errmsg='标签更改成功')
  29. else: return to_json_data(errno=Code.PARAMERR,errmsg='该标签已经存在')
  30. else: return to_json_data(errno=Code.PARAMERR,errmsg='标签名不能为空')
  31. else: return to_json_data(errno=Code.PARAMERR,errmsg='您要更改的标签不存在')

  

新增标签:

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

url 请求:post

  1. def post(self, request):
  2. '''
  3. 添加新标签
  4. :param request:
  5. :return:
  6. '''
  7. json_data = request.body
  8. if not json_data:
  9. return to_json_data(errno=Code.PARAMERR, errmsg=error_map[Code.PARAMERR])
  10. # 将 json 转化为 dict
  11. dict_data = json.loads(json_data.decode('utf8'))
  12. tag_name = dict_data.get('name')
  13. # 清洗去空格
  14. if tag_name and tag_name.strip():
  15. # 如果存在,取出来,如果不存在,创建一个
  16. # 返回是个元祖
  17. tag_up = models.Tag.objects.get_or_create(name=tag_name)
  18. # tag_bole 第二个元素如果是 False,说明 name 存在,并取出
  19. # 如果是 True 创建
  20. # tag_inst 查询集
  21. tag_inst, tag_bole = tag_up
  22.  
  23. # 来着构造一个字典
  24. new_tag_dist = {
  25. 'id':tag_inst.id,
  26. 'name':tag_inst.name
  27. }
  28. return to_json_data(errmsg='标签创建成功', data=new_tag_dist) if tag_bole else \
  29. to_json_data(errno=Code.DATAEXIST, errmsg='标签已存在')
  30.  
  31. else:return to_json_data(errno=Code.PARAMERR, errmsg='标签名不能为空')

  

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

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

  1. import json
  2. import logging
  3. from django.shortcuts import render
  4. from django.views import View
  5. from django.db.models import Count # django自带的计算
  6.  
  7. from ..news import models # 导入相关数据库
  8. from utils.json_fun import to_json_data
  9. from utils.res_code import Code,error_map
  10.  
  11. logger = logging.getLogger('django')
  12.  
  13. class Index(View):
  14. '''
  15. 创建 admin 主页视图
  16. '''
  17. def get(self, request):
  18. return render(request, 'admin/index/index.html')
  19.  
  20. class TagManager(View):
  21. '''
  22. 创建标签管理视图
  23. /admin/tags/
  24. '''
  25. def get(self, request):
  26. # 查询新闻分类表 did,类名,及类下的新闻文章总数
  27. # 跟上条件:没有被逻辑删除的,排序:文章总数,修改时间,
  28. tags = models.Tag.objects.values('id', 'name').annotate(num_news=Count('news')).\
  29. filter(is_delete=False).order_by('-num_news', '-update_time')
  30.  
  31. return render(request, 'admin/news/tags_manage.html', locals())
  32.  
  33. def post(self, request):
  34. '''
  35. 添加新标签
  36. :param request:
  37. :return:
  38. '''
  39. json_data = request.body
  40. if not json_data:
  41. return to_json_data(errno=Code.PARAMERR, errmsg=error_map[Code.PARAMERR])
  42. # 将 json 转化为 dict
  43. dict_data = json.loads(json_data.decode('utf8'))
  44. tag_name = dict_data.get('name')
  45. # 清洗去空格
  46. if tag_name:
  47. tag_name = tag_name.strip()
  48. # 如果存在,取出来,如果不存在,创建一个
  49. # 返回是个元祖
  50. tag_up = models.Tag.objects.get_or_create(name=tag_name)
  51. # tag_bole 第二个元素如果是 False,说明 name 存在,并取出
  52. # 如果是 True 创建
  53. # tag_inst 查询集
  54. tag_inst, tag_bole = tag_up
  55.  
  56. # 来着构造一个字典
  57. new_tag_dist = {
  58. 'id':tag_inst.id,
  59. 'name':tag_inst.name
  60. }
  61. return to_json_data(errmsg='标签创建成功', data=new_tag_dist) if tag_bole else \
  62. to_json_data(errno=Code.DATAEXIST, errmsg='标签已存在')
  63.  
  64. else:return to_json_data(errno=Code.PARAMERR, errmsg='标签名不能为空')
  65.  
  66. class TagEdit(View):
  67. '''
  68. 删除,更改,标签类
  69. /admin/tags
  70. '''
  71. def delete(self, request, tag_id):
  72. # 删除
  73. tag = models.Tag.objects.only('id').filter(is_delete=False, id=tag_id).first()
  74. if tag:
  75. tag.delete() # 真的删除
  76. # 逻辑删除
  77. # tag.is_delete = True
  78. tag.save()
  79. # tag.save(update_fields=['is_delete']) # 优化措施:只对指定字段保存
  80. return to_json_data(errmsg='标签删除成功')
  81. else:
  82. return to_json_data(errno=Code.PARAMERR,errmsg='您要删除的标签不存在')
  83.  
  84. def put(self, request, tag_id):
  85. '''
  86. 更改标签
  87. :param request:
  88. :return:
  89. '''
  90. # 拿到前台传来的参数
  91. json_data = request.body
  92. if not json_data:
  93. return to_json_data(errno=Code.PARAMERR, errmsg=error_map[Code.PARAMERR])
  94. # 将 json 转化为 dict
  95. dict_data = json.loads(json_data.decode('utf8'))
  96. tag_name = dict_data.get('name')
  97.  
  98. tag = models.Tag.objects.only().filter(id=tag_id).first()
  99. if tag:
  100. # 清洗去空格
  101. if tag_name :
  102. tag_name = tag_name.strip()
  103. # 如果新命名的 name 在标签中不存在
  104. if not models.Tag.objects.only('name').filter(name=tag_name).exists():
  105. # 把新的 name 给存入
  106. tag.name = tag_name
  107. tag.save(update_fields=['name']) # 优化措施
  108. return to_json_data(errmsg='标签更改成功')
  109. else: return to_json_data(errno=Code.PARAMERR,errmsg='该标签已经存在')
  110. else: return to_json_data(errno=Code.PARAMERR,errmsg='标签名不能为空')
  111. else: return to_json_data(errno=Code.PARAMERR,errmsg='您要更改的标签不存在')

  

潭州课堂25班:Ph201805201 django 项目 第三十四课 后台文章标签更新功能 ,创建功能实现(课堂笔记)的更多相关文章

  1. 潭州课堂25班:Ph201805201 django 项目 第三十八课 后台 文章发布,FastDFS安装 配置(课堂笔记)

    , .安装FastDFS # 从docker hub中拉取fastdfs镜像docker pull youkou1/fastdfs # 查看镜像是否拉取成功docker images # 安装trac ...

  2. 潭州课堂25班:Ph201805201 django 项目 第三十九课 后台 文章发布,图片上传到 FastDFS后端实现 七牛云讲解(课堂笔记)

    文章发布: # 1,从前台获取参数# 2,校验参数# 3,把数据保存到数据库# 4,返回执行结果到前台,(创建成功或失败) 自定义 froms.py 校验参数 上传图片到七牛云 注册 https:// ...

  3. 潭州课堂25班:Ph201805201 django 项目 第三十六课 后台文章管理(课堂笔记)

    get 请求, 1,获取文章标签 , 2,拿到前台传来的值, 3,根据前台传来的值在数据库中查询 4.,返回数据到前台,渲染, 分页算法 : 在 utils 下创建  paginator_script ...

  4. 潭州课堂25班:Ph201805201 django 项目 第三十二课 后台站点管理(课堂笔记)

    一.后台站点模版抽取 1.获取静态站点模版 可以使用git clone到本地 git clone https://github.com/almasaeed2010/AdminLTE.git 也可以在g ...

  5. 潭州课堂25班:Ph201805201 django 项目 第三十五课 后台用户权限的添加 mixins 课堂笔记)

    验证用户登录: 对一个视图函数进行登录权限验证,(登录后才可以访问,否则重定向到登录页面) #from django.contrib.auth.decorators import login_requ ...

  6. 潭州课堂25班:Ph201805201 django 项目 第三十课 linux 系统迁移 (课堂笔记)

    进入虚拟环境, 冷冻 把安装环境放到这个文档中 pip freeze >> requirements.txt 在另一台机器中 pip install -r requirements.txt ...

  7. 潭州课堂25班:Ph201805201 django 项目 第三十一课 在线课堂视频点播的实现(课堂笔记)

    在线课堂 一.数据库模型设计 # 在apps/course/models.py中定义如下模型: from django.db import models from utils.models impor ...

  8. 潭州课堂25班:Ph201805201 django 项目 第三课 码云注册,django项目 (课堂笔记)

    d码云注册,登录, 创建项目: 生成秘钥 想看秘钥: 添加公钥 复制 ssh 连接 通过  git clone <ssh> 连接 在服务器上创建 python3 虚拟环境, 创建项目  p ...

  9. 潭州课堂25班:Ph201805201 django 项目 第三十三课 后台文章标签查询提交到前台,删除功能实现(课堂笔记)

    在视图中创建个类,要实现此功能,并把结果返回前台 , from django.shortcuts import render from django.views import View from dj ...

随机推荐

  1. bat 获取拖放文件路径或名称

    获取路径: @echo offset path=%~dp1echo %path%pause 获取路径及名称: @echo offset path=%~dp1%~nx1echo %path%pause

  2. linux上安装redis并使用

    1.下载:curl -O http://download.redis.io/releases/redis-4.0.6.tar.gz 2.在/usr/local/redis上解压:tar -zxvf r ...

  3. java基础应用循环的应用

    1.1 [经典面试题]: &&(短路与)与&(非短路与)的区别: 表达式1 && 表达式2 表达式1如果为false,表达式2不执行,整个表达式结果为false ...

  4. 磁盘修改AF

    请严格按照如下流程: 1 以管理员打开 硬盘安装助手 2 选择苹果Mac系统镜像 (cdr格式的) 3 直接选择要写入的盘,不要点击右边的方框中的勾选 (此时就可以写入了,虽然最后还是显示 Chang ...

  5. jQuery字体缩放缩放插件zoomFontSize.js

    插件描述:jQuery字体缩放缩放插件zoomFontSize.js根据父类进行百分比缩放,兼容性如下: 使用方法 body 的class属性 添加 changbody_fontSize 而且整个页面 ...

  6. 关于64位 MS SQL 导入导出 Oracle 引发 ORA-06413 的解决方法

    如果在X64系统下我们想利用 MS SQL 的DTS导入导出 Oracle 数据,由 oracle 不支持路径中包含")",会引发 ORA-06413:连接未打开错误 解决的办法很 ...

  7. [转] React Hot Loader 3 beta 升级指南

    前言 在用 react-hot-loader v1.3 的时候有些深层组件不会很完美的热更新(可能是我使用有问题).然后在 react-hot-loader 首页中看到 React Hot Loade ...

  8. canvas给图片加水印

    <!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF-8&quo ...

  9. Comparison of several types of convergence

    In functional analysis, several types of convergence are defined, namely, strong convergence for ele ...

  10. [转]fiddler 抓包 HTTPS 请求

    教程开始 安装 fiddler 首先准备一台可以上网的 windos 电脑,准备一部智能手机. fiddler 抓包工具:下载地址( 自行百度一搜一大片).安装,打开如果遇到. net framewo ...