1.后台管理之角色管理

1.1 角色管理之定义角色表单

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

# 角色表单
class RoleForm(FlaskForm):
name = StringField(
label="角色名称",
validators=[
DataRequired("请输入角色名称!")
],
description="角色名称",
render_kw={
"class": "form-control",
"placeholder": "请输入角色名称!"
}
)
auths = SelectField(
label="权限列表",
validators=[
DataRequired("请选择权限列表!")
],
coerce=int,
choices=[(v.id, v.name) for v in auth_list],
description="权限列表",
render_kw={
"class": "form-control"
}
) submit = SubmitField(
"编辑",
render_kw={
"class": "btn btn-primary",
}
)

1.2 角色管理之所有角色列表

1.2.1 角色管理之所有角色列表视图函数

在admin目录下的views.py文件中定义所有角色列表视图函数

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

@admin.route('/role/list/<int:page>/', methods=["GET", "POST"])
@admin_login_req
@admin_auth
def role_list(page=None):
if page is None:
page = 1
page_data = Role.query.order_by(Role.id).paginate(page=page, per_page=10)
return render_template("admin/role_list.html", page_data=page_data)

1.2.2 角色管理之所有角色列表前端页面

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

{% extends 'admin/admin.html' %}
{% import "ui/admin_page.html" as pg %} {% block content %}
<!--内容-->
<section class="content-header">
<h1>微管理员管理系统</h1>
<ol class="breadcrumb">
<li><a href="#"><i class="fa fa-dashboard"></i> 角色管理</a></li>
<li class="active">角色列表</li>
</ol>
</section>
<section class="content" id="showcontent">
<div class="row">
<div class="col-md-12">
<div class="box box-primary">
<div class="box-header">
<h3 class="box-title">角色列表</h3>
<div class="box-tools">
<div class="input-group input-group-sm" style="width: 150px;">
<input type="text" name="table_search" class="form-control pull-right"
placeholder="请输入关键字..."> <div class="input-group-btn">
<button type="submit" class="btn btn-default"><i class="fa fa-search"></i>
</button>
</div>
</div>
</div>
</div>
<div class="box-body table-responsive no-padding">
<!--消息提示-->
{% for msg in get_flashed_messages(category_filter=["ok"]) %}
<div class="alert alert-success alert-dismissible">
<button type="button" class="close" data-dismiss="alert" aria-hidden="true">×</button>
<h4><i class="icon fa fa-check"></i> 操作成功</h4>
{{ msg }}
</div>
{% endfor %}
<table class="table table-hover">
<tbody>
<tr>
<th>编号</th>
<th>角色名称</th>
<th>添加时间</th>
<th>操作事项</th>
</tr>
{% for v in page_data.items %}
<tr>
<td>{{ v.id }}</td>
<td>{{ v.name }}</td>
<td>{{ v.addtime }}</td>
<td>
<a href="{{ url_for("admin.role.edit",id=v.id) }}" class="label label-success">编辑</a>
&nbsp;
<a href="{{ url_for("admin.role.del",id=v.id) }}" class="label label-danger">删除</a>
</td>
</tr>
{% endfor %}
</tbody>
</table>
</div>
<div class="box-footer clearfix">
{{ pg.page(page_data,"admin.role_list") }}
</div>
</div>
</div>
</div>
</section>
<!--内容-->
{% endblock %} {% block js %}
$(document).ready(function () {
$("#g-10").addClass('active');
$("#g-10-2").addClass('active');
});
{% endblock %}

1.3 角色管理之添加角色

1.3.1 角色管理之添加角色视图函数

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

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

@admin.route('/role/add/', methods=["GET", "POST"])
@admin_login_req
@admin_auth
def role_add():
form = RoleForm()
if form.validate_on_submit():
data = form.data
role = Role(
name=data.get("name"),
auths=",".join(map(lambda v: str(v), data.get("auths")))
)
db.session.add(role)
db.session.commit()
flash("添加角色成功!", "ok")
return redirect(url_for("admin.role_list", page=1))
return render_template("admin/role_add.html", form=form)

1.3.2 角色管理之添加角色前端页面

添加角色前端页面继承admin.html页面

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

{% block css %}
<style>
#auth_list .col-md-12, #auth_list .col-md-2 {
padding: 0px;
}
</style>
{% endblock %} {% block content %}
<section class="content-header">
<h1>微管理员管理系统</h1>
<ol class="breadcrumb">
<li><a href="#"><i class="fa fa-dashboard"></i> 角色管理</a></li>
<li class="active">添加角色</li>
</ol>
</section>
<section class="content" id="showcontent">
<div class="row">
<div class="col-md-12">
<div class="box box-primary">
<div class="box-header with-border">
<h3 class="box-title">添加角色</h3>
</div>
<form role="form" method="post">
<div class="box-body"> <!--提示框消息闪现-->
{% for msg in get_flashed_messages(category_filter=["ok"]) %}
<div class="alert alert-success alert-dismissible">
<button type="button" class="close" data-dismiss="alert" aria-hidden="true">×
</button>
<h4><i class="icon fa fa-check"></i> 操作成功</h4>
{{ msg }}
</div>
{% endfor %} <div class="form-group">
<label for="input_name">{{ form.name.label }}</label>
{{ form.name }}
<!--报错信息-->
{% for err in form.name.errors %}
<div class="col-md-12">
<font style="color:red">{{ err }}</font>
</div>
{% endfor %}
</div>
<div class="form-group" id="auth_list">
<div class="col-md-12">
<label>{{ form.auths.label }}</label>
</div>
{{ form.auths }}
<!--报错信息-->
{% for err in form.auths.errors %}
<div class="col-md-12">
<font style="color:red">{{ err }}</font>
</div>
{% endfor %}
</div>
</div>
<div class="box-footer">
{{ form.csrf_token }}
{{ form.submit }}
</div>
</form>
</div>
</div>
</div>
</section>
{% endblock %} {% block js %}
$(document).ready(function () {
$("#g-10").addClass('active');
$("#g-10-1").addClass('active');
});
{% endblock %}

1.4 角色管理之编辑角色

1.4.1 角色管理之编辑角色视图函数

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

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

@admin.route("/role/edit/<int:id>/", methods=['GET', 'POST'])
@admin_login_req
@admin_auth
def role_edit(id=None):
form = RoleForm()
role = Role.query.get_or_404(id)
if request.method == 'GET':
auths = role.auths
form.auths.data = list(map(lambda v: int(v), auths.split(",")))
if form.validate_on_submit():
data = form.data
role.name = data.get("name")
role.auths = ",".join(map(lambda v: str(v), data.get('auths')))
db.session.add(role)
db.session.commit()
flash("修改角色成功!", "ok")
return render_template("admin/role_edit.html", form=form, role=role)

1.4.2 角色管理之编辑角色前端页面

编辑角色前端页面继承admin.html页面

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

{% block css %}
<style>
#auth_list .col-md-12, #auth_list .col-md-2 {
padding: 0px;
}
</style>
{% endblock %} {% block content %}
<section class="content-header">
<h1>微管理员管理系统</h1>
<ol class="breadcrumb">
<li><a href="#"><i class="fa fa-dashboard"></i> 角色管理</a></li>
<li class="active">添加角色</li>
</ol>
</section>
<section class="content" id="showcontent">
<div class="row">
<div class="col-md-12">
<div class="box box-primary">
<div class="box-header with-border">
<h3 class="box-title">添加角色</h3>
</div>
<form role="form" method="post">
<div class="box-body"> <!--提示框消息闪现-->
{% for msg in get_flashed_messages(category_filter=["ok"]) %}
<div class="alert alert-success alert-dismissible">
<button type="button" class="close" data-dismiss="alert" aria-hidden="true">×
</button>
<h4><i class="icon fa fa-check"></i> 操作成功</h4>
{{ msg }}
</div>
{% endfor %} <div class="form-group">
<label for="input_name">{{ form.name.label }}</label>
{{ form.name(value=role.name) }}
<!--报错信息-->
{% for err in form.name.errors %}
<div class="col-md-12">
<font style="color:red">{{ err }}</font>
</div>
{% endfor %}
</div>
<div class="form-group" id="auth_list">
<div class="col-md-12">
<label>{{ form.auths.label }}</label>
</div>
{{ form.auths }}
<!--报错信息-->
{% for err in form.auths.errors %}
<div class="col-md-12">
<font style="color:red">{{ err }}</font>
</div>
{% endfor %}
</div>
</div>
<div class="box-footer">
{{ form.csrf_token }}
{{ form.submit }}
</div>
</form>
</div>
</div>
</div>
</section>
{% endblock %} {% block js %}
$(document).ready(function () {
$("#g-10").addClass('active');
$("#g-10-1").addClass('active');
});
{% endblock %}

1.5 角色管理之删除角色

1.5 角色管理之删除角色视图函数

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

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

@admin.route("/role/del/<int:id>/", methods=['GET'])
@admin_login_req
@admin_auth
def role_del(id=None):
role = Role.query.filter_by(id=id).first_or_404()
db.session.delete(role)
db.session.commit()
flash("角色删除成功!", "ok")
return redirect(url_for("admin.role_list", page=1))

2.后台管理之管理员管理

2.1 定义管理员表单

在app的admin目录的forms.py文件中,定义管理员表单

# 管理员列表
class AdminForm(FlaskForm):
name = StringField(
label="用户名",
validators=[
DataRequired("请输入管理员用户名!")
],
description="用户名",
render_kw={
"class": "form-control",
"placeholder": "请输入管理员用户名!"
},
) pwd = PasswordField(
label="管理员密码",
validators=[
DataRequired("请输入管理员密码!")
],
description="管理员密码",
render_kw={
"class": "form-control",
"placeholder": "请输入管理员密码!"
},
)
repwd = PasswordField(
label="管理员重复输入密码",
validators=[
DataRequired("请管理员重复输入密码!"),
EqualTo("pwd", message="两次输入密码不一致!")
],
description="管理员重复输入密码",
render_kw={
"class": "form-control",
"placeholder": "请管理员重复输入密码!"
},
)
role_id = SelectField(
label="所属角色",
validators=[
DataRequired("请选择所属角色!")
],
coerce=int,
choices=[(v.id, v.name) for v in role_list],
render_kw={
"class": "form-control"
}
) submit = SubmitField(
"编辑",
render_kw={
"class": "btn btn-primary",
}
)

2.2 管理员管理之所有管理员列表

2.2.1 管理员管理之管理员列表视图函数

在admin目录下的views.py文件中定义所有管理员列表视图函数

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

@admin.route('/admin/list/<int:page>/', methods=['GET'])
@admin_login_req
@admin_auth
def admin_list(page=None):
if page is None:
page = 1
page_data = Admin.query.join(Role).filter(Role.id == Admin.role_id).order_by(
Admin.id
).paginate(page=page, per_page=10) print("page_data:", page_data)
return render_template("admin/admin_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 %}
<!--内容-->
<section class="content-header">
<h1>微电影管理系统</h1>
<ol class="breadcrumb">
<li><a href="#"><i class="fa fa-dashboard"></i> 管理员管理</a></li>
<li class="active">管理员列表</li>
</ol>
</section>
<section class="content" id="showcontent">
<div class="row">
<div class="col-md-12">
<div class="box box-primary">
<div class="box-header">
<h3 class="box-title">管理员列表</h3>
<div class="box-tools">
<div class="input-group input-group-sm" style="width: 150px;">
<input type="text" name="table_search" class="form-control pull-right"
placeholder="请输入关键字..."> <div class="input-group-btn">
<button type="submit" class="btn btn-default"><i class="fa fa-search"></i>
</button>
</div>
</div>
</div>
</div>
<div class="box-body table-responsive no-padding">
<!--消息提示-->
{% for msg in get_flashed_messages(category_filter=["ok"]) %}
<div class="alert alert-success alert-dismissible">
<button type="button" class="close" data-dismiss="alert" aria-hidden="true">×</button>
<h4><i class="icon fa fa-check"></i> 操作成功</h4>
{{ msg }}
</div>
{% endfor %}
<table class="table table-hover">
<tbody>
<tr>
<th>编号</th>
<th>管理员名称</th>
<th>管理员类型</th>
<th>管理员角色</th>
<th>添加时间</th>
</tr>
{% for v in page_data.items %}
<tr>
<td>{{ v.id }}</td>
<td>{{ v.name }}</td>
{% if v.is_super ==0 %}
<td>超级管理员</td>
{% else %}
<td>普通管理员</td>
{% endif %}
<td>{{ v.role.name }}</td>
<td>{{ v.addtime }}</td>
</tr>
{% endfor %}
</tbody>
</table>
</div>
<div class="box-footer clearfix">
{{ pg.page(page_data,"admin.admin_list") }}
</div>
</div>
</div>
</div>
</section>
<!--内容-->
{% endblock %} {% block js %}
$(document).ready(function () {
$("#g-11").addClass('active');
$("#g-11-2").addClass('active');
});
{% endblock %}

2.3 管理员管理之添加管理员

2.3.1 管理员管理之添加管理员视图函数

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

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

@admin.route('/admin/add/', methods=['GET', 'POST'])
@admin_login_req
@admin_auth
def admin_add():
form = AdminForm()
from werkzeug.security import generate_password_hash
if form.validate_on_submit():
data = form.data
admin = Admin(
name=data.get("name"),
pwd=generate_password_hash(data.get('pwd')),
role_id=data.get("role_id"),
is_super=1,
)
db.session.add(admin)
db.session.commit()
flash("添加管理员成功!", "ok")
return redirect(url_for('admin.admin_list', page=1))
return render_template("admin/admin_add.html", form=form)

2.3.2 管理员管理之添加管理员前端页面

添加管理员前端页面继承admin.html页面

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

{% block content %}
<!--内容-->
<section class="content-header">
<h1>微电影管理系统</h1>
<ol class="breadcrumb">
<li><a href="#"><i class="fa fa-dashboard"></i> 管理员管理</a></li>
<li class="active">添加管理员</li>
</ol>
</section>
<section class="content" id="showcontent">
<div class="row">
<div class="col-md-12">
<div class="box box-primary">
<div class="box-header with-border">
<h3 class="box-title">添加管理员</h3>
</div>
<form role="form">
<div class="box-body">
<!--提示框消息闪现-->
{% for msg in get_flashed_messages(category_filter=["ok"]) %}
<div class="alert alert-success alert-dismissible">
<button type="button" class="close" data-dismiss="alert" aria-hidden="true">×
</button>
<h4><i class="icon fa fa-check"></i> 操作成功</h4>
{{ msg }}
</div>
{% endfor %}
<div class="form-group">
<label for="input_name">{{ form.name.label }}</label>
{{ form.name }}
<!--报错信息-->
{% for err in form.name.errors %}
<div class="col-md-12">
<font style="color:red">{{ err }}</font>
</div>
{% endfor %}
</div>
<div class="form-group">
<label for="input_pwd">{{ form.pwd.label }}</label>
{{ form.pwd }}
<!--报错信息-->
{% for err in form.pwd.errors %}
<div class="col-md-12">
<font style="color:red">{{ err }}</font>
</div>
{% endfor %}
</div>
<div class="form-group">
<label for="input_re_pwd">{{ form.repwd.label }}</label>
{{ form.repwd }}
<!--报错信息-->
{% for err in form.repwd.errors %}
<div class="col-md-12">
<font style="color:red">{{ err }}</font>
</div>
{% endfor %}
</div>
<div class="form-group">
<label for="input_role_id">{{ form.role_id.label }}</label>
{{ form.role_id }}
<!--报错信息-->
{% for err in form.role_id.errors %}
<div class="col-md-12">
<font style="color:red">{{ err }}</font>
</div>
{% endfor %}
</div>
</div>
<div class="box-footer">
{{ form.csrf_token }}
{{ form.submit }}
</div>
</form>
</div>
</div>
</div>
</section>
<!--内容-->
{% endblock %} {% block js %}
$(document).ready(function () {
$("#g-11").addClass('active');
$("#g-11-1").addClass('active');
});
{% endblock %}

Flask开发微电影网站(十)的更多相关文章

  1. Flask开发微电影网站(一)

    1.用到的Flask知识 1.使用整形,浮点型,路径型,字符串型下正则表达式路由转化器 2.使用GET与POST请求,上传文件,cookie获取与响应,404处理 3.使用模板自动转义,定义过滤器,定 ...

  2. Flask开发微电影网站(三)

    页面完成后的最终布局 可以看到,页面共同的部分是顶部导航和底部导航 所以我们可以把页面顶部导航和底部导航部分单独定义一个文件home.html,然后让需要使用顶部导航和底部导航的页面都继承home.h ...

  3. Flask开发微电影网站(五)

    后台管理页面是系统管理员登录后对网站进行管理的前端页面 后台登录页面,如下图所示 管理员登录后的页面,如下图所示 管理员登录后,在右上角显示的管理员信息,如下图所示 管理员登录后,在页面中间部分的左侧 ...

  4. Flask开发微电影网站(七)

    1.后台管理之电影管理 1.1 定义电影表单 在app的admin目录的forms.py文件中,定义电影表单 # 电影表单 class MovieForm(FlaskForm): title = St ...

  5. Flask开发微电影网站(六)

    1. 后台管理登录功能实现 1.1 后台管理页面登录表单LoginForm 在app的admin目录下创建forms.py文件,用来保存admin蓝图中需要使用到的表单 from flask_wtf ...

  6. Flask开发微电影网站(二)

    1.安装数据库连接依赖包 pip install flask-sqlalchemy 2.创建movie数据库 在CentOS虚拟机,进入MaridDB数据库提示符,创建movie数据库 create ...

  7. Flask开发微电影网站(九)

    1.后台管理之电影管理 1.1 电影管理之所有电影收藏列表 1.1.1 电影管理之电影收藏列表视图函数 在admin目录下的views.py文件中定义电影收藏列表视图函数 电影收藏列表视图函数需要被登 ...

  8. Flask开发微电影网站(八)

    1.后台管理之电影预告管理 1.1 定义电影预告表单 在app的admin目录的forms.py文件中,定义电影预告表单 # 预告表单 class PreviewForm(FlaskForm): ti ...

  9. Flask开发微电影网站(四)

    会员中心页面,如下图所示 用户登录后,修改密码页面,如下图所示 用户查看自己的评论页面,如下图所示 用户查看自己的登录日志页面,如下图所示 用户查看自己收藏的电影的页面,如下图所示 1. 定义用户主页 ...

随机推荐

  1. Binary Search(Java)(递归)

    public static int rank(int[] array, int k, int front, int rear) { if(front > rear) return -1; int ...

  2. Tomcat服务器下载、安装、配置环境变量教程(超详细)

    请先配置安装好Java的环境,若没有安装,请参照我以下的步骤进行安装! 请先配置安装好Java的环境,若没有安装,请参照我以下的步骤进行安装! 请先配置安装好Java的环境,若没有安装,请参照我以下上 ...

  3. fiddler抓包App数据

    在做手机或移动端APP的接口测试时,需要从开发人员那里获取接口文档,接口文档应该包括完整的功能接口.接口请求方式.接口请求URL.接口请求参数.接口返回参数.如果当前项目没有接口文档,则可以使用fid ...

  4. 转:Flutter动画一

    1. 动画介绍 动画对于App来说,非常的重要.很多App,正是因为有了动画,所以才会觉得炫酷.移动端的动画库有非常的多,例如iOS上的Pop.web端的animate.css.Android端的An ...

  5. Magento 2 创建 Widget

    Widget是一个更好的工具,可以将内容插入或编辑到CMS页面块或页面中. 什么是小部件? 小部件是Magento 2配置中的强大功能.作为商店管理员,您可以利用小部件来改善生动界面下的店面.小部件允 ...

  6. 用Pytorch训练线性回归模型

    假定我们要拟合的线性方程是:\(y=2x+1\) \(x\):[0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14] \(y\):[1, 3, 5, 7, ...

  7. 题解 CF540D 【Bad Luck Island】

    既然没有大佬写题解那本蒟蒻就厚颜无耻地写(水)一(经)下(验)吧 题目要求算出个种人单独留下的存活率 因为n,m,p的范围极小, 那么就可以方便地设3位dp状态dp[i][j][k]表示剩余i个石头, ...

  8. URL传递中文参数乱码问题

    web项目开发中,经常遇到中文参数乱码问题,而且有时候明明测试服务器上好用,换个正式环境就不用的情况也经常出现,今天做一个记录,防止自己以后忘记 1.地址栏url请求带中文参数 这类

  9. Python判断自定义的参数格式是否正确

    import argparse def args_validation(valid_list, valid_value): assert valid_value in valid_list, 'inv ...

  10. 任意模数NTT学习笔记

    这两天有点颓,所以东西学的也很慢...这个一眼就能推出来的活生生卡了我两天.. 说几个细节: 柿子: \[f*g = (\frac{f}{M} +f\%m)*(\frac{g}{M} +g\%m) \ ...