您现在的位置是: 网站首页 >Flask >Flask搭建微电影视频网站 Flask

【Flask微电影】22.基于角色访问控制-角色管理:增删查改

admin2018年11月11日 20:30 Flask | Html | Python 1744人已围观

Flask搭建微电影视频网站简介 利用Flask搭建微电影视频网站 Github地址:https://github.com/xyliurui/FlaskMovie

## 角色管理 ### 角色添加 #### 增加角色的表单 ```python class RoleForm(FlaskForm): name = StringField( label='角色名称', validators=[ DataRequired('请输入角色名称!') ], description='请输入角色名称!', render_kw={ 'class': "form-control" } ) auths = SelectMultipleField( label='权限列表', description='请选择权限列表!', render_kw={ 'class': "form-control", }, coerce=int, # choices=[(item.id, item.name) for item in Auth.query.all()] ) submit = SubmitField( label='提交', render_kw={ 'class': "btn btn-primary" } ) def __init__(self, *args, **kwargs): super(RoleForm, self).__init__(*args, **kwargs) self.auths.choices = [(item.id, item.name) for item in Auth.query.all()] ``` #### 修改role_add角色添加视图 ```python @admin.route("/role/add/", methods=['GET', 'POST']) @admin_login_require def role_add(): form = RoleForm() if form.validate_on_submit(): data = form.data # print(data['auths']) # 权限id列表形式[1, 2] role = Role( name=data['name'], auths=','.join(map(lambda item: str(item), data['auths'])) # 数字转换为字符串形式 ) db.session.add(role) db.session.commit() flash('角色添加成功', category='ok') return render_template('admin/role_edit.html', form=form) ``` #### 修改role_edit.html角色添加模板 添加角色和更新角色使用一个模板 ```html {% extends 'admin/base.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"> {% if request.path == url_for('admin.role_add') %} 添加角色 {% else %} 更新角色 {% endif %} </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"> {% if request.path == url_for('admin.role_add') %} 添加角色 {% else %} 更新角色 {% endif %} </h3> </div> <form role="form" method="post"> <div class="box-body"> {% include 'admin/alert_info.html' %} <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" style="color: red">{{ err }}</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" style="color: red">{{ err }}</div> {% endfor %} </div> </div> {{ form.csrf_token }} <div class="box-footer"> {{ form.submit }} </div> </form> </div> </div> </div> </section> {% endblock %} {% block js %} <script> // 激活菜单栏 $(document).ready(function () { $("#g-10").addClass('active'); $("#g-10-1").addClass('active'); }) </script> {% endblock %} ``` ![BLOG_20181111_203126_97](/media/blog/images/2018/11/BLOG_20181111_203126_97.png "博客图集BLOG_20181111_203126_97.png") ![BLOG_20181111_203131_64](/media/blog/images/2018/11/BLOG_20181111_203131_64.png "博客图集BLOG_20181111_203131_64.png") ### 角色列表 #### 修改role_list角色列表视图 ```python @admin.route("/role/list/<int:page>/") @admin_login_require def role_list(page=None): if not page: page = 1 page_roles = Role.query.order_by( Role.add_time.desc() ).paginate(page=page, per_page=10) return render_template('admin/role_list.html', page_roles=page_roles) ``` #### 修改role_list.html角色列表模板 ```html <div class="box-body table-responsive no-padding"> {% include 'admin/alert_info.html' %} <table class="table table-hover"> <tbody> <tr> <th>编号</th> <th>角色名称</th> <th>添加时间</th> <th>操作事项</th> </tr> {% for role in page_roles.items %} <tr> <td>{{ role.id }}</td> <td>{{ role.name }}</td> <td>{{ role.add_time }}</td> <td> <a class="label label-success">编辑</a> &nbsp; <a class="label label-danger">删除</a> </td> </tr> {% endfor %} </tbody> </table> </div> <div class="box-footer clearfix"> {% import 'admin/pagination.html' as pg %} {{ pg.render_pagination(page_roles, 'admin.role_list') }} </div> ``` ### 角色删除 #### 创建role_delete角色删除视图 ```python @admin.route("/role/delete/<int:delete_id>/") @admin_login_require def role_delete(delete_id=None): role = Role.query.get_or_404(delete_id) db.session.delete(role) db.session.commit() flash('删除角色成功', category='ok') return redirect(url_for('admin.role_list', page=1)) ``` #### 修改role_list.html增加角色删除链接 ```html <a class="label label-danger" href="{{ url_for('admin.role_delete', delete_id=role.id) }}">删除</a> ``` ![BLOG_20181111_203154_41](/media/blog/images/2018/11/BLOG_20181111_203154_41.png "博客图集BLOG_20181111_203154_41.png") ### 角色编辑 #### 创建role_update角色更新视图 `auths`初始化,还要判断是否有值,如果没有则设置空 ```python @admin.route("/role/update/<int:update_id>/", methods=['GET', 'POST']) @admin_login_require def role_update(update_id=None): role = Role.query.get_or_404(update_id) form = RoleForm( name=role.name, auths=list(map(lambda item: int(item), role.auths.split(','))) if role.auths else '' # 换回int型列表 ) if form.validate_on_submit(): data = form.data role.name = data['name'] role.auths = ','.join(map(lambda item: str(item), data['auths'])) db.session.commit() flash('角色修改成功!', category='ok') return render_template('admin/role_edit.html', form=form) ``` #### 修改role_list.html角色修改链接 ```html <a class="label label-success" href="{{ url_for('admin.role_update', update_id=role.id) }}">编辑</a> ``` ![BLOG_20181111_203201_59](/media/blog/images/2018/11/BLOG_20181111_203201_59.png "博客图集BLOG_20181111_203201_59.png") ![BLOG_20181111_203235_88](/media/blog/images/2018/11/BLOG_20181111_203235_88.png "博客图集BLOG_20181111_203235_88.png")

很赞哦! (1)

文章交流

  • emoji
0人参与,0条评论

当前用户

未登录,点击   登录

站点信息

  • 建站时间:网站已运行2285天
  • 系统信息:Linux
  • 后台程序:Python: 3.8.10
  • 网站框架:Django: 3.2.6
  • 文章统计:257 篇
  • 文章评论:63 条
  • 腾讯分析网站概况-腾讯分析
  • 百度统计网站概况-百度统计
  • 公众号:微信扫描二维码,关注我们
  • QQ群:QQ加群,下载网站的学习源码
返回
顶部
标题 换行 登录
网站