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 项目 第三十四课 后台文章标签更新功能 ,创建功能实现(课堂笔记)的更多相关文章

  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. Linux文件系统及文件类型

    Linux文件系统: 根文件系统(rootfs) root filesystem LSB, FHS: (FileSystem... /etc,  /usr,  /var,  /root.... /bo ...

  2. unzip文件解压

    1.记录下,遇到.zip的安装包,指定解压到某个地方 格式:unzip      压缩包名.zip  -d   存放路径  

  3. jenkins卡在等待界面解决方法

    1.安装jenkins最新版的时候,发现一直卡在等待界面上 如图显示:   原因:jenkins里面文件指向国外的官网,因为防火墙的原因连不上 解决方法:将配置文件里面的url换成国内的即可  

  4. 繁简字转换(C#)

    1.首先引入: using Microsoft.VisualBasic; 2.转换方法: //繁体转简体 public static string Traditional2Simplified(str ...

  5. lvs-ldirectord

    Ldirectord;用来对后端服务器的检测状态后并进行操作  安装在director上 对后端的rs服务器的 健康检查包括几方面: 1通过ping 若可以ping到服务器表示主机活着 2 对端口的检 ...

  6. 解决 js setTimeout 传递带参数的函数无效果

    最近 js  用到 setTimeout 递归调用 刷新进度  setTimeout ("getProgress(name,type)", 3000) ; 发现getProgres ...

  7. windows安装Python虚拟环境

    1.pip install virtualenv 安装virtualenv镜像 3.virtualenv  scrapytest 新建virtualenv 4.cd到\scrapytest\Scrip ...

  8. JAVA中值类型和引用类型的不同(面试常考)

    转载:https://www.cnblogs.com/1ming/p/5227944.html 1. JAVA中值类型和引用类型的不同? [定义] 引用类型表示你操作的数据是同一个,也就是说当你传一个 ...

  9. day65 request对象,以及方法,response对象,render,redirect

    这里的都是我们会频繁使用到的,用得多了自然就会了,我们写项目都是少不了这些用法的,所以这就把老师的博客粘过来就好了, Request对象 官方文档 属性 所有的属性应该被认为是只读的,除非另有说明. ...

  10. js(javaScript)的各种事件触发,以常见为主eg:onclick

    js的各种事件触发,以常见为主eg:onclick1.onclick,点击后触发事件 (1)<h1 onclick="this.innerHTML='谢谢!'">请点击 ...