Flask开发微电影网站(九)


1.后台管理之电影管理

1.1 电影管理之所有电影收藏列表

1.1.1 电影管理之电影收藏列表视图函数

在admin目录下的views.py文件中定义电影收藏列表视图函数

电影收藏列表视图函数需要被登录控制装饰器权限控制装饰器同时装饰

@admin.route('/moviecol/list//', methods=["GET"])
@admin_login_req
@admin_auth
def moviecol_list(page=None):
    if page is None:
        page = 1
    page_data = Moviecol.query.join(Movie).join(User).filter(
        Movie.id == Moviecol.movie_id,
        User.id == Moviecol.user_id
    ).order_by(Moviecol.addtime).paginate(page=page, per_page=10)
    return render_template("admin/moviecol_list.html", page_data=page_data)

1.1.2 电影管理之电影收藏列表前端页面

电影收藏列表前端页面继承admin.html页面,还需要导入admin_page.html页面以实现分页效果

{% extends 'admin/admin.html' %}
{% import "ui/admin_page.html" as pg %}

{% block content %}
    

微电影管理系统

收藏列表

{% for msg in get_flashed_messages(category_filter=["ok"]) %}

操作成功

{{ msg }}
{% endfor %} {% for v in page_data.items %} {% endfor %}
ID 电影 用户 添加时间 操作事项
{{ v.id }} {{ v.movie.title }} {{ v.user.name }} {{ v.addtime }} 删除
{% endblock %} {% block js %} $(document).ready(function () { $("#g-7").addClass('active'); $("#g-7-1").addClass('active'); }); {% endblock %}

1.2 电影管理之删除电影收藏

1.2.1 电影管理之删除电影收藏视图函数

在admin目录下的views.py文件中定义删除电影视图函数

删除电影视图函数需要被登录控制装饰器权限控制装饰器同时装饰

@admin.route("/moviecol/del//", methods=['GET'])
@admin_login_req
@admin_auth
def moviecol_del(id=None):
    moviecol = Moviecol.query.get_or_404(int(id))
    db.session.delete(moviecol)
    db.session.commit()
    flash("删除收藏成功", "ok")
    return redirect(url_for("admin.moviecol_list", page=1))

2.后台管理之日志管理

2.1 日志管理之用户操作列表

2.1.1 日志管理之用户操作日志列表视图函数

在admin目录下的views.py文件中定义用户操作日志列表视图函数

用户操作日志列表视图函数需要被登录控制装饰器权限控制装饰器同时装饰

# 用户操作日志
@admin.route('/oplog/list//', methods=['GET'])
@admin_login_req
@admin_auth
def oplog_list(page=None):
    if page is None:
        page = 1
    page_data = Oplog.query.join(Admin).filter(Admin.id == Oplog.admin_id).order_by(
        Oplog.addtime
    ).paginate(page=page, per_page=5)

    return render_template("admin/oplog_list.html", page_data=page_data)

2.1.2 日志管理之用户操作日志列表前端页面

用户操作日志列表前端页面继承admin.html页面,还需要导入admin_page.html页面以实现分页效果

{% extends 'admin/admin.html' %}
{% import 'ui/admin_page.html' as pg %}

{% block content %}
    
    

微电影管理系统

操作日志列表

{% for v in page_data.items %} {% endfor %}
编号 管理员 操作时间 操作原因 操作IP
{{ v.id }} {{ v.admin.name }} {{ v.addtime }} {{ v.reason }} {{ v.ip }}
{% endblock %} {% block js %} $(document).ready(function () { $("#g-8").addClass('active'); $("#g-8-1").addClass('active'); }); {% endblock %}

2.2 日志管理之管理员登录日志

2.2.1 日志管理之管理员登录日志视图函数

在admin目录下的views.py文件中定义管理员登录日志视图函数

管理员登录日志视图函数需要被登录控制装饰器权限控制装饰器同时装饰

# 管理员登录日志
@admin.route('/adminloginlog/list//', methods=['GET'])
@admin_login_req
@admin_auth
def adminloginlog_list(page=None):
    if page is None:
        page = 1
    page_data = Adminlog.query.join(Admin).filter(Admin.id == Adminlog.admin_id).order_by(
        Adminlog.addtime
    ).paginate(page=page, per_page=5)
    print(page_data.__dict__)
    return render_template("admin/adminloginlog_list.html", page_data=page_data)

2.2.2 日志管理之管理员登录日志前端页面

管理员登录日志前端页面继承admin.html页面,还需要导入admin_page.html页面以实现分页效果

{% extends 'admin/admin.html' %}
{% import 'ui/admin_page.html' as pg %}

{% block content %}
    
    

微电影管理系统

管理员登录日志列表

{% for i in page_data.items %} {% endfor %}
编号 管理员 登录时间 登录IP
{{ v.id }} {{ v.admin.name }} {{ v.addtime }} {{ v.ip }}
{% endblock %} {% block js %} $(document).ready(function () { $("#g-8").addClass('active'); $("#g-8-2").addClass('active'); }); {% endblock %}

2.3 日志管理之会员登录日志

2.3.1 日志管理之会员登录日志列表视图函数

在admin目录下的views.py文件中定义会员登录日志列表视图函数

会员登录日志列表视图函数需要被登录控制装饰器权限控制装饰器同时装饰

# 会员登录日志
@admin.route('/userloginlog/list//', methods=['GET'])
@admin_login_req
@admin_auth
def userloginlog_list(page=None):
    if page is None:
        page = 1
    page_data = Userlog.query.join(User).filter(User.id == Userlog.user_id).order_by(
        Userlog.id
    ).paginate(page=page, per_page=10)
    print(page_data)
    return render_template("admin/userloginlog_list.html", page_data=page_data)

2.3.2 日志管理之会员登录日志前端页面

会员登录日志前端页面继承admin.html页面,还需要导入admin_page.html页面以实现分页效果

{% extends 'admin/admin.html' %}
{% import 'ui/admin_page.html' as pg %}

{% block content %}
    
    

微电影管理系统

会员登录日志列表

{% for v in page_data.items %} {% endfor %}
编号 会员 登录时间 登录IP
{{ v.id }} {{ v.user.name }} {{ v.addtime }} {{ v.ip }}
{% endblock %} {% block js %} $(document).ready(function () { $("#g-8").addClass('active'); $("#g-8-3").addClass('active'); }); {% endblock %}

3.后台管理之权限管理

3.1 定义权限表单

在app的admin目录的forms.py文件中,定义权限表单

# 权限表单
class AuthForm(FlaskForm):
    name = StringField(
        label="权限名称",
        validators=[
            DataRequired("请输入权限名称!")
        ],
        description="权限名称",
        render_kw={
            "class": "form-control",
            "placeholder": "请输入权限名称!",
        }
    )
    url = StringField(
        label="权限",
        validators=[
            DataRequired("请输入权限地址!")
        ],
        description="权限地址",
        render_kw={
            "class": "form-control",
            "placeholder": "请输入权限地址!"
        }
    )
    submit = SubmitField(
        "添加",
        render_kw={
            "class": "btn btn-primary",
        }
    )

3.2 权限管理之所有权限列表

3.2.1 权限管理之权限列表视图函数

在admin目录下的views.py文件中定义权限列表视图函数

权限列表视图函数需要被登录控制装饰器权限控制装饰器同时装饰

@admin.route('/auth/list//', methods=['GET'])
@admin_login_req
@admin_auth
def auth_list(page=None):
    if page is None:
        page = 1
    page_data = Auth.query.order_by(Auth.id).paginate(page=page, per_page=10)
    return render_template("admin/auth_list.html", page_data=page_data)

3.2.2 权限管理之权限列表前端页面

权限列表前端页面继承admin.html页面,还需要导入admin_page.html页面以实现分页效果

{% extends 'admin/admin.html' %}
{% import "ui/admin_page.html" as pg %}

{% block content %}
    
    

微电影管理系统

{% for msg in get_flashed_messages(category_filter=["ok"]) %}

操作成功

{{ msg }}
{% endfor %}

权限列表

{% for v in page_data.items %} {% endfor %}
编号 名称 地址 添加时间 操作事项
{{ v.id }} {{ v.name }} {{ v.url }} {{ v.addtime }} 编辑   删除
{% endblock %} {% block js %} $(document).ready(function () { $("#g-9").addClass('active'); $("#g-9-2").addClass('active'); }); {% endblock %}

3.3 权限管理之添加权限

3.3.1 权限管理之添加权限视图函数

在admin目录下的views.py文件中定义添加权限视图函数

添加权限视图函数需要被登录控制装饰器权限控制装饰器同时装饰

@admin.route('/auth/add/', methods=["GET", "POST"])
@admin_login_req
@admin_auth
def auth_add():
    form = AuthForm()
    if form.validate_on_submit():
        data = form.data
        auth = Auth(
            name=data.get('name'),
            url=data.get('url'),
        )
        db.session.add(auth)
        db.session.commit()
        flash("添加权限成功!", "ok")
        return redirect(url_for("admin.auth_list", page=1))
    return render_template("admin/auth_add.html", form=form)

3.3.2 权限管理之添加权限前端页面

添加权限前端页面继承admin.html页面

{% extends 'admin/admin.html' %}

{% block content %}
    
    

微电影管理系统

添加权限

{% for msg in get_flashed_messages(category_filter=["ok"]) %}

操作成功

{{ msg }}
{% endfor %}
{{ form.name }} {% for err in form.name.errors %}
{{ err }}
{% endfor %}
{{ form.url }} {% for err in form.url.errors %}
{{ err }}
{% endfor %}
{% endblock %} {% block js %} $(document).ready(function () { $("#g-9").addClass('active'); $("#g-9-1").addClass('active'); }); {% endblock %}

3.4 权限管理之编辑权限

3.4.1 权限管理之编辑权限视图函数

在admin目录下的views.py文件中定义编辑权限视图函数

编辑权限视图函数需要被登录控制装饰器权限控制装饰器同时装饰

@admin.route("/auth/edit//", methods=['GET', 'POST'])
@admin_login_req
@admin_auth
def auth_edit(id=None):
    form = AuthForm()
    auth = Auth.query.get_or_404(id)
    if form.validate_on_submit():
        data = form.data
        auth.name = data.get("name")
        auth.url = data.get('url')
        db.session.add(auth)
        db.session.commit()
        flash("修改权限成功!", "ok")
        return redirect(url_for("admin.auth_list", page=1))
    return render_template("admin/auth_edit.html", form=form, auth=auth)

3.4.2 权限管理之编辑权限前端页面

编辑权限前端页面继承admin.html页面

{% extends 'admin/admin.html' %}

{% block content %}
    
    

微电影管理系统

添加权限

{% for msg in get_flashed_messages(category_filter=["ok"]) %}

操作成功

{{ msg }}
{% endfor %}
{{ form.name(value=auth.name) }} {% for err in form.name.errors %}
{{ err }}
{% endfor %}
{{ form.url(value=auth.url) }} {% for err in form.url.errors %}
{{ err }}
{% endfor %}
{% endblock %} {% block js %} $(document).ready(function () { $("#g-9").addClass('active'); $("#g-9-1").addClass('active'); }); {% endblock %}

3.5 权限管理之删除权限

3.5 权限管理之删除权限视图函数

在admin目录下的views.py文件中定义删除权限视图函数

删除权限视图函数需要被登录控制装饰器和权限控制装饰器同时装饰

@admin.route("/auth/del//", methods=["GET"])
@admin_login_req
@admin_auth
def auth_del(id=None):
    auth = Auth.query.filter_by(id=id).first_or_404()
    db.session.delete(auth)
    db.session.commit()
    flash("删除权限成功!", "ok")
    return redirect(url_for("admin.auth_list", page=1))