潭州课堂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='您要更改的标签不存在')
潭州课堂25班:Ph201805201 django 项目 第三十四课 后台文章标签更新功能 ,创建功能实现(课堂笔记)的更多相关文章
- 潭州课堂25班:Ph201805201 django 项目 第三十八课 后台 文章发布,FastDFS安装 配置(课堂笔记)
, .安装FastDFS # 从docker hub中拉取fastdfs镜像docker pull youkou1/fastdfs # 查看镜像是否拉取成功docker images # 安装trac ...
- 潭州课堂25班:Ph201805201 django 项目 第三十九课 后台 文章发布,图片上传到 FastDFS后端实现 七牛云讲解(课堂笔记)
文章发布: # 1,从前台获取参数# 2,校验参数# 3,把数据保存到数据库# 4,返回执行结果到前台,(创建成功或失败) 自定义 froms.py 校验参数 上传图片到七牛云 注册 https:// ...
- 潭州课堂25班:Ph201805201 django 项目 第三十六课 后台文章管理(课堂笔记)
get 请求, 1,获取文章标签 , 2,拿到前台传来的值, 3,根据前台传来的值在数据库中查询 4.,返回数据到前台,渲染, 分页算法 : 在 utils 下创建 paginator_script ...
- 潭州课堂25班:Ph201805201 django 项目 第三十二课 后台站点管理(课堂笔记)
一.后台站点模版抽取 1.获取静态站点模版 可以使用git clone到本地 git clone https://github.com/almasaeed2010/AdminLTE.git 也可以在g ...
- 潭州课堂25班:Ph201805201 django 项目 第三十五课 后台用户权限的添加 mixins 课堂笔记)
验证用户登录: 对一个视图函数进行登录权限验证,(登录后才可以访问,否则重定向到登录页面) #from django.contrib.auth.decorators import login_requ ...
- 潭州课堂25班:Ph201805201 django 项目 第三十课 linux 系统迁移 (课堂笔记)
进入虚拟环境, 冷冻 把安装环境放到这个文档中 pip freeze >> requirements.txt 在另一台机器中 pip install -r requirements.txt ...
- 潭州课堂25班:Ph201805201 django 项目 第三十一课 在线课堂视频点播的实现(课堂笔记)
在线课堂 一.数据库模型设计 # 在apps/course/models.py中定义如下模型: from django.db import models from utils.models impor ...
- 潭州课堂25班:Ph201805201 django 项目 第三课 码云注册,django项目 (课堂笔记)
d码云注册,登录, 创建项目: 生成秘钥 想看秘钥: 添加公钥 复制 ssh 连接 通过 git clone <ssh> 连接 在服务器上创建 python3 虚拟环境, 创建项目 p ...
- 潭州课堂25班:Ph201805201 django 项目 第三十三课 后台文章标签查询提交到前台,删除功能实现(课堂笔记)
在视图中创建个类,要实现此功能,并把结果返回前台 , from django.shortcuts import render from django.views import View from dj ...
随机推荐
- bat 获取拖放文件路径或名称
获取路径: @echo offset path=%~dp1echo %path%pause 获取路径及名称: @echo offset path=%~dp1%~nx1echo %path%pause
- linux上安装redis并使用
1.下载:curl -O http://download.redis.io/releases/redis-4.0.6.tar.gz 2.在/usr/local/redis上解压:tar -zxvf r ...
- java基础应用循环的应用
1.1 [经典面试题]: &&(短路与)与&(非短路与)的区别: 表达式1 && 表达式2 表达式1如果为false,表达式2不执行,整个表达式结果为false ...
- 磁盘修改AF
请严格按照如下流程: 1 以管理员打开 硬盘安装助手 2 选择苹果Mac系统镜像 (cdr格式的) 3 直接选择要写入的盘,不要点击右边的方框中的勾选 (此时就可以写入了,虽然最后还是显示 Chang ...
- jQuery字体缩放缩放插件zoomFontSize.js
插件描述:jQuery字体缩放缩放插件zoomFontSize.js根据父类进行百分比缩放,兼容性如下: 使用方法 body 的class属性 添加 changbody_fontSize 而且整个页面 ...
- 关于64位 MS SQL 导入导出 Oracle 引发 ORA-06413 的解决方法
如果在X64系统下我们想利用 MS SQL 的DTS导入导出 Oracle 数据,由 oracle 不支持路径中包含")",会引发 ORA-06413:连接未打开错误 解决的办法很 ...
- [转] React Hot Loader 3 beta 升级指南
前言 在用 react-hot-loader v1.3 的时候有些深层组件不会很完美的热更新(可能是我使用有问题).然后在 react-hot-loader 首页中看到 React Hot Loade ...
- canvas给图片加水印
<!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF-8&quo ...
- Comparison of several types of convergence
In functional analysis, several types of convergence are defined, namely, strong convergence for ele ...
- [转]fiddler 抓包 HTTPS 请求
教程开始 安装 fiddler 首先准备一台可以上网的 windos 电脑,准备一部智能手机. fiddler 抓包工具:下载地址( 自行百度一搜一大片).安装,打开如果遇到. net framewo ...