Flask微电影网站开发

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

2018-11-11  本文已影响22人  吾星喵

个人博客,欢迎查看:https://blog.starmeow.cn/

Github地址:https://github.com/xyliurui/FlaskMovie

角色管理

角色添加

增加角色的表单

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角色添加视图

@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角色添加模板

添加角色和更新角色使用一个模板

{% 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 %}
image.png image.png

角色列表

修改role_list角色列表视图

@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角色列表模板

<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角色删除视图

@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增加角色删除链接

<a class="label label-danger" href="{{ url_for('admin.role_delete', delete_id=role.id) }}">删除</a>
image.png

角色编辑

创建role_update角色更新视图

auths初始化,还要判断是否有值,如果没有则设置空

@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角色修改链接

<a class="label label-success" href="{{ url_for('admin.role_update', update_id=role.id) }}">编辑</a>
image.png image.png
上一篇下一篇

猜你喜欢

热点阅读