标签Form模型准备

开发标签管理的相关视图函数和html文件之前,我们需要提前创建标签表单模型.

文件: E:\study\mooc\MicroMovie200731\app\admin\forms.py

class TagForm(FlaskForm):name = StringField(label="标签名称",validators=[DataRequired(message="请输入标签~~~!")],description="标签",render_kw={"class": "form-control","id": "input_name","placeholder": "请输入标签名称!",})submit = SubmitField(label="编辑/添加",render_kw={  # 设置生成前端"账号标签"对应的html属性"class": "btn btn-primary",})

标签添加

知识点:

  • 存库操作
  • 过滤失败/成功的消息闪现
# 标签管理
@admin.route("/tag/add/", methods=['GET', 'POST'])  # 添加标签
@admin_login_req
def tag_add():form = TagForm()if form.validate_on_submit():data = form.datatag = Tag.query.filter_by(name=data["name"]).count()if tag == 1:flash("标签已经存在,请重新输入!", "err")  # 失败消息闪现return redirect(url_for("admin.tag_add"))tag = Tag(name=data["name"])    # 存库操作db.session.add(tag)db.session.commit()flash("添加成功!", "ok")    # 成功消息闪现return redirect(url_for("admin.tag_add"))return render_template("admin/tag_add.html", form=form)

消息闪现效果:

标签列表

知识点:

  • 分页
  • {% macro page(data, url) -%}
# E:\study\mooc\MicroMovie200731\app\templates\page\admin_page.html{% macro page(data, url) -%}{%- endmacro %}# E:\study\mooc\MicroMovie200731\app\templates\admin\tag_list.html{% import "page/admin_page.html" as pg %}{{ pg.page(page_data, "admin.tag_list") }}

涉及页面

  • E:\study\mooc\MicroMovie200731\app\admin\views.py
@admin.route("/tag/list/<int:page>/", methods=['GET'])  # 标签列表,涉及查询和分页显示
@admin_login_req
def tag_list(page=None):if page is None:page = 1page_data = Tag.query.order_by(    # 获取分页信息Tag.addtime.desc()          # 以添加的时间排序).paginate(page=page, per_page=10)return render_template("admin/tag_list.html", page_data=page_data)
  • E:\study\mooc\MicroMovie200731\app\templates\admin\tag_list.html

  • E:\study\mooc\MicroMovie200731\app\templates\admin\menu.html

  • E:\study\mooc\MicroMovie200731\app\templates\page\admin_page.html
{% macro page(data, url) -%}
{% if data %}
<ul class="pagination pagination-sm no-margin pull-right"><li><a href="{{ url_for(url, page=1) }}">首页</a></li>{% if data.has_prev %}<li><a href="{{ url_for(url, page=data.prev_num) }}">上一页</a></li>{% else %}<li class="disabled"><a href="#">上一页</a></li>{% endif %}{% for v in data.iter_pages() %}{% if v == data.page %}<li class="active"><a href="#">{{ v }}</a></li>{% else %}<li><a href="{{ url_for(url, page=v) }}">{{ v }}</a></li>{% endif %}{% endfor %}{% if data.has_next %}<li><a href="{{ url_for(url, page=data.next_num) }}">下一页</a></li>{% else %}<li class="disabled"><a href="#">下一页</a></li>{% endif %}<li><a href="{{ url_for(url, page=data.pages) }}">尾页</a></li>
</ul>
{% endif %}
{%- endmacro %}

实际效果:

标签删除

知识点

  • 如果视图函数路由中有配置参数,则使用redirect或者url_for调用视图函数时需要传入相应配置参数

涉及页面

  • E:\study\mooc\MicroMovie200731\app\admin\views.py
@admin.route("/tag/del/<int:id>/", methods=['GET'])  # 删除标签
@admin_login_req
def tag_del(id=None):tag = Tag.query.filter_by(id=id).first_or_404()db.session.delete(tag)db.session.commit()flash("删除成功!", "ok")return redirect(url_for("admin.tag_list", page=1)) # 如果视图函数路由中有配置参数,则使用redirect调用视图函数时需要传入相应配置参数
  • E:\study\mooc\MicroMovie200731\app\templates\admin\tag_list.html

标签修改

知识点

涉及页面

  • E:\study\mooc\MicroMovie200731\app\admin\views.py

tag_edit视图函数和tag_add视图函数很相似,响应html页面也有很相似

# 标签编辑
@admin.route("/tag/edit/<int:id>", methods=['GET', 'POST'])  # 编辑标签
@admin_login_req
def tag_edit(id=None):form = TagForm()tag = Tag.query.get_or_404(id)if form.validate_on_submit():data = form.datatag_count = Tag.query.filter_by(name=data["name"]).count()# if tag.name != data["name"] and tag_count == 1:       #  if tag.name != data["name"]在不修改提交时会报错if tag_count == 1:flash("标签已经存在,请重新输入!", "err")  # 失败消息闪现return redirect(url_for("admin.tag_edit", id=id)) #如果视图函数路由中有配置参数,则使用redirect调用视图函数时需要传入相应配置参数tag.name = data["name"]    # 存库操作db.session.add(tag)db.session.commit()flash("修改成功!", "ok")    # 成功消息闪现return redirect(url_for("admin.tag_edit", id=id))  # 如果视图函数路由中有配置参数,则使用redirect调用视图函数时需要传入相应配置参数return render_template("admin/tag_edit.html", form=form, tag=tag)
  • E:\study\mooc\MicroMovie200731\app\templates\admin\tag_list.html

  • E:\study\mooc\MicroMovie200731\app\templates\admin\tag_edit.html

06-02 标签管理相关推荐

  1. 标签管理体系之业务应用

    一.评估标签质量 1.业务背景 基于标签对业务进行精准分析,从而影响运营思路和产品迭代的节奏,进而带来非常高的商业价值,但是这里需要对标签的质量进行评估,假设标签的覆盖场景非常低,而且准确度低,同样也 ...

  2. 前端面试每日3+1(周汇总2019.06.02)

    周汇总 2019.06.02 <论语>,曾子曰:"吾日三省吾身"(我每天多次反省自己). 前端面试每日3+1题,以面试题来驱动学习,每天进步一点! 让努力成为一种习惯, ...

  3. Git复习(六)之标签管理

    标签管理 发布一个版本时,我们通常先在版本库中打一个标签(tag),这样,就唯一确定了打标签时刻的版本.将来无论什么时候,取某个标签的版本,就是把那个打标签的时刻的历史版本取出来.所以,标签也是版本库 ...

  4. Chrome现在也能编辑pdf文件了!64位安卓版上线,网页加载快10%,还有良心标签管理功能...

    贾浩楠 发自 凹非寺 量子位 报道 | 公众号 QbitAI 全世界最多人在用的Chrome浏览器,今天更新了. 版本号:Chrome 85. 增加一系列标签管理功能,还自带PDF编辑器,并且提升10 ...

  5. Git学习笔记:标签管理以及GItHub

    前言 在补习python的时候主要参考的是廖雪峰的教程Python教程,在学习完后准备完成期末作业时,遇到了一个技术难题,需要初步掌握git,因此开始了git的学习. 本教程参考廖雪峰的Git教程 G ...

  6. 实战react技术栈+express前后端博客项目(8)-- 前端管理界面标签管理+后端对应接口开发...

    项目地址:https://github.com/Nealyang/R... 本想等项目做完再连载一波系列博客,随着开发的进行,也是的确遇到了不少坑,请教了不少人.遂想,何不一边记录踩坑,一边分享收获呢 ...

  7. Laravel大型项目系列教程(五)之文章和标签管理

    Laravel大型项目系列教程(五)之文章和标签管理 本节教程将大概完成文章和标签管理. 1.文章管理 首先创建管理后台文章列表视图: $ php artisan generate:view admi ...

  8. 【华为云技术分享】云图说丨初识标签管理服务:给你的云资源贴个条

    当组织中的多个部门有不同的工作流程和存储需求时,多云部署成为企业业务上云的首选.但面对相同类型的云资源如何进行分类,也成为了企业需要考虑的问题.那么,云产品在应用过程中是否有一个通过使用标签的形式,按 ...

  9. scrm电商后台管理、公司管理、店铺管理、特卖活动、营销活动、订单管理、优惠券管理、商品管理、会员管理、标签管理、会员卡、签到配置、积分、拼团、砍价、快递配置、短信配置、充值、运营活动

    scrm电商后台管理.公司管理.店铺管理.特卖活动.营销活动.订单管理.优惠券管理.商品管理.会员管理.标签管理.会员卡.签到配置.积分.拼团.砍价.快递配置.短信配置.充值.运营活动 Axure原型 ...

  10. Git学习(四)标签管理

    标签管理 git学习参考 廖雪峰官方网站 git基本操作,一篇文章就够了! 一.标签管理 发布一个版本时,我们通常先在版本库中打一个标签(tag),这样,就唯一确定了打标签时刻的版本.将来无论什么时候 ...

最新文章

  1. 论如何骗过计算机视觉AI网络,UCLA专家为你支几招
  2. 分享mac磁盘清理的方法
  3. 网鼎杯SQLI+反序列化读取文件题解
  4. native react 集成微信登录_react native 接入微信登陆(Android)
  5. 【分布计算环境学习笔记】9 Web Service
  6. php_os用法,PHP教程:PHPUnit学习笔记(二)PHPUnit基本用法
  7. 360前端负责人月影:赛跑项目和跳水项目的金牌含量其实一样
  8. git 撤销挂起的更改_小姐姐带你用Git
  9. jq之slidedown()
  10. zabbix 的安装
  11. 6.1 统计学基本原理
  12. 正确的配置Android开发环境-让你的C盘不在爆红
  13. 自动化测试qq空间登录
  14. 70 个数据分析常用网址!
  15. SLAM基础——李群李代数
  16. 完全数是由古人创造的一种整数,其因数的和(不包含本身)加起来就是数字本身。例如 6= 1+2+3 28=1+2+4+7+14 因数的和比数字本身大的数称为充沛数,因数和比数字本身大的数称为充沛数,因数
  17. “内存不能为read/written”是什么原理?
  18. kali-linux-2018.2-i386.iso
  19. C++基础---面向对象建模方法
  20. 2019CAD设置经典模式模板详细步骤

热门文章

  1. css动画其他div,删除另一个div时的CSS3 Transition动画
  2. java8和java9的对比
  3. H3C服务器修改启动项,H3C服务器 iFIST快速安装指南-6W102
  4. 计算机硬盘大小及区分数怎么看,一分钟解读:教你如何看SSD测试成绩
  5. 长方形图片html圆形,css实现圆角矩形、半圆、圆形效果—border-radius使用详解
  6. FileNotFoundException open failed: XXXXXXX EPERM (Operation not permitted)的坑
  7. FL studio20.8最新中文版本安装下载图文教程
  8. Could not find multidex.jar (com.android.support:multidex:1.0.2).
  9. 蓝桥杯试题 基础练习 数列特征python
  10. 忘了Linux服务器密码怎么办