06-02 标签管理

标签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.data
        tag = 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)

消息闪现效果:

06-02 标签管理_第1张图片

 标签列表

知识点:

  • 分页
  • {% 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//", methods=['GET'])  # 标签列表,涉及查询和分页显示
@admin_login_req
def tag_list(page=None):
    if page is None:
        page = 1
    page_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

06-02 标签管理_第2张图片

06-02 标签管理_第3张图片

06-02 标签管理_第4张图片

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

06-02 标签管理_第5张图片

  • E:\study\mooc\MicroMovie200731\app\templates\page\admin_page.html
{% macro page(data, url) -%}
{% if data %}

{% endif %}
{%- endmacro %}

 

实际效果:

06-02 标签管理_第6张图片

  标签删除

知识点

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

06-02 标签管理_第7张图片

06-02 标签管理_第8张图片

 

 

涉及页面

  • E:\study\mooc\MicroMovie200731\app\admin\views.py
@admin.route("/tag/del//", 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

06-02 标签管理_第9张图片

标签修改

知识点

涉及页面

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

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

# 标签编辑
@admin.route("/tag/edit/", 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.data
        tag_count = Tag.query.filter_by(name=data["name"]).count()
        if tag.name != data["name"] and 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

06-02 标签管理_第10张图片

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

06-02 标签管理_第11张图片

你可能感兴趣的:(#,Flask,构建微电影视频网站)