收藏列表
操作成功
{{ msg }}ID | 电影 | 用户 | 添加时间 | 操作事项 |
---|---|---|---|---|
{{ v.id }} | {{ v.movie.title }} | {{ v.user.name }} | {{ v.addtime }} | 删除 |
在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)
电影收藏列表前端页面继承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 %}
ID
电影
用户
添加时间
操作事项
{% for v in page_data.items %}
{{ v.id }}
{{ v.movie.title }}
{{ v.user.name }}
{{ v.addtime }}
删除
{% endfor %}
{% endblock %}
{% block js %}
$(document).ready(function () {
$("#g-7").addClass('active');
$("#g-7-1").addClass('active');
});
{% endblock %}
在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))
在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)
用户操作日志列表前端页面继承admin.html页面,还需要导入admin_page.html页面以实现分页效果
{% extends 'admin/admin.html' %}
{% import 'ui/admin_page.html' as pg %}
{% block content %}
微电影管理系统
操作日志列表
编号
管理员
操作时间
操作原因
操作IP
{% for v in page_data.items %}
{{ v.id }}
{{ v.admin.name }}
{{ v.addtime }}
{{ v.reason }}
{{ v.ip }}
{% endfor %}
{% endblock %}
{% block js %}
$(document).ready(function () {
$("#g-8").addClass('active');
$("#g-8-1").addClass('active');
});
{% endblock %}
在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)
管理员登录日志前端页面继承admin.html页面,还需要导入admin_page.html页面以实现分页效果
{% extends 'admin/admin.html' %}
{% import 'ui/admin_page.html' as pg %}
{% block content %}
微电影管理系统
管理员登录日志列表
编号
管理员
登录时间
登录IP
{% for i in page_data.items %}
{{ v.id }}
{{ v.admin.name }}
{{ v.addtime }}
{{ v.ip }}
{% endfor %}
{% endblock %}
{% block js %}
$(document).ready(function () {
$("#g-8").addClass('active');
$("#g-8-2").addClass('active');
});
{% endblock %}
在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)
会员登录日志前端页面继承admin.html页面,还需要导入admin_page.html页面以实现分页效果
{% extends 'admin/admin.html' %}
{% import 'ui/admin_page.html' as pg %}
{% block content %}
微电影管理系统
会员登录日志列表
编号
会员
登录时间
登录IP
{% for v in page_data.items %}
{{ v.id }}
{{ v.user.name }}
{{ v.addtime }}
{{ v.ip }}
{% endfor %}
{% endblock %}
{% block js %}
$(document).ready(function () {
$("#g-8").addClass('active');
$("#g-8-3").addClass('active');
});
{% endblock %}
在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",
}
)
在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)
权限列表前端页面继承admin.html页面,还需要导入admin_page.html页面以实现分页效果
{% extends 'admin/admin.html' %}
{% import "ui/admin_page.html" as pg %}
{% block content %}
微电影管理系统
{% endblock %}
{% block js %}
$(document).ready(function () {
$("#g-9").addClass('active');
$("#g-9-2").addClass('active');
});
{% endblock %}
在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)
添加权限前端页面继承admin.html页面
{% extends 'admin/admin.html' %}
{% block content %}
微电影管理系统
添加权限
{% endblock %}
{% block js %}
$(document).ready(function () {
$("#g-9").addClass('active');
$("#g-9-1").addClass('active');
});
{% endblock %}
在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)
编辑权限前端页面继承admin.html页面
{% extends 'admin/admin.html' %}
{% block content %}
微电影管理系统
添加权限
{% endblock %}
{% block js %}
$(document).ready(function () {
$("#g-9").addClass('active');
$("#g-9-1").addClass('active');
});
{% endblock %}
在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))