美文网首页Flask微电影网站开发
【Flask微电影】21.基于角色访问控制-权限管理:增删查改

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

作者: 吾星喵 | 来源:发表于2018-11-11 20:29 被阅读29次

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

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

    权限管理

    权限增加

    创建权限表单

    class AuthForm(FlaskForm):
        name = StringField(
            label='权限名称',
            validators=[
                DataRequired('请输入权限名称!')
            ],
            description='请输入权限名称!',
            render_kw={
                'class': "form-control"
            }
        )
        url = StringField(
            label='访问链接',
            validators=[
                DataRequired('请输入访问链接!')
            ],
            description='请输入访问链接!',
            render_kw={
                'class': "form-control",
                'placeholder': '链接地址'
            }
        )
        submit = SubmitField(
            label='提交',
            render_kw={
                'class': "btn btn-primary"
            }
        )
    

    修改auth_add增加权限视图

    @admin.route("/auth/add/", methods=['GET', 'POST'])
    @admin_login_require
    def auth_add():
        form = AuthForm()
        if form.validate_on_submit():
            data = form.data
            if Auth.query.filter_by(url=data['url']).count() == 1:
                flash('权限链接地址已存在!',category='err')
                return redirect(url_for('admin.auth_add'))
            auth = Auth(
                name=data['name'],
                url=data['url']
            )
            db.session.add(auth)
            db.session.commit()
            flash('权限地址添加成功!', category='ok')
        return render_template('admin/auth_add.html', form=form)
    

    修改auth_edit.html增加权限模板

    <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">
                <label for="input_url">{{ form.url.label }}</label>
                {{ form.url }}
                {% for err in form.url.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>
    
    image.png

    权限列表

    修改auth_list权限显示视图

    @admin.route("/auth/list/<int:page>/")
    @admin_login_require
    def auth_list(page=None):
        if not page:
            page = 1
        page_auths = Auth.query.order_by(Auth.add_time.desc()).paginate(page=page, per_page=10)
        return render_template('admin/auth_list.html', page_auths=page_auths)
    

    修改auth_list.html权限显示模板

    {% include 'admin/alert_info.html' %}
    <table class="table table-hover">
        <tbody>
        <tr>
            <th>编号</th>
            <th>名称</th>
            <th>地址</th>
            <th>添加时间</th>
            <th>操作事项</th>
        </tr>
        {% for auth in page_auths.items %}
            <tr>
                <td>{{ auth.id }}</td>
                <td>{{ auth.name }}</td>
                <td>{{ auth.url }}</td>
                <td>{{ auth.add_time }}</td>
                <td>
                    <a class="label label-success">编辑</a>
                    &nbsp;
                    <a class="label label-danger">删除</a>
                </td>
            </tr>
        {% endfor %}
        </tbody>
    </table>
    
    
    {% import 'admin/pagination.html' as pg %}
    {{ pg.render_pagination(page_auths, 'admin.auth_list') }}
    

    修改base.html增加

    <a href="{{ url_for('admin.auth_list', page=1) }}">
        <i class="fa fa-circle-o"></i> 权限列表
    </a>
    

    权限删除

    修改auth_delete权限删除视图

    @admin.route("/auth/delete/<int:delete_id>/")
    @admin_login_require
    def auth_delete(delete_id=None):
        auth = Auth.query.get_or_404(delete_id)
        db.session.delete(auth)
        db.session.commit()
        flash('删除权限地址成功', category='ok')
        return redirect(url_for('admin.auth_list', page=1))
    

    修改auth_list.html权限删除链接

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

    权限编辑

    增加auth_update权限更新视图

    @admin.route("/auth/update/<int:update_id>/", methods=['GET', 'POST'])
    @admin_login_require
    def auth_update(update_id=None):
        auth = Auth.query.get_or_404(update_id)
        form = AuthForm(
            name=auth.name,
            url=auth.url
        )
        if form.validate_on_submit():
            data = form.data
            if Auth.query.filter_by(url=data['url']).count() == 1 and auth.url != data['url']:
                flash('权限链接地址已存在!', category='err')
                return redirect(url_for('admin.auth_update', update_id=update_id))
            auth.name = data['name']
            auth.url = data['url']
            db.session.commit()
            flash('权限地址修改成功!', category='ok')
        return render_template('admin/auth_edit.html', form=form)
    

    修改auth_edit.html权限编辑模板

    增加访问链接判断

    修改auth_list.html增加编辑链接

    <a class="label label-success" href="{{ url_for('admin.auth_update', update_id=auth.id) }}">编辑</a>
    

    修改auth_edit.html的添加和更新判断

    <li class="active">
        {% if request.path == url_for('admin.auth_add') %}
            添加权限
        {% else %}
            更新权限
        {% endif %}
    </li>
    
    
    <h3 class="box-title">
        {% if request.path == url_for('admin.auth_add') %}
            添加权限
        {% else %}
            更新权限
        {% endif %}
    </h3>
    
    image.png

    相关文章

      网友评论

        本文标题:【Flask微电影】21.基于角色访问控制-权限管理:增删查改

        本文链接:https://www.haomeiwen.com/subject/nadffqtx.html