07-01 基于角色的访问控制 权限管理

权限管理

  1. 模型: Auth
  2. 表单: AuthForm
  3. 请求方法: GET, POST
  4. 访问控制: admin_login_req

添加涉及文件:

E:\study\mooc\MicroMovie200731\app\admin\forms.py   创建模型

E:\study\mooc\MicroMovie200731\app\admin\forms.py   视图函数

E:\study\mooc\MicroMovie200731\app\templates\admin\auth_add.html   前端页面

E:\study\mooc\MicroMovie200731\app\templates\admin\menu.html     修改右侧菜单url_for

创建模型

class AuthForm(FlaskForm):
    name = StringField(
        label="权限",
        validators=[
            DataRequired(message="请输入权限名称~~~!")
        ],
        description="权限",
        render_kw={
            "class": "form-control",
            "id": "input_name",
            "placeholder": "请输入权限名称!",
        }
    )
    url = StringField(
        label="权限地址",
        validators=[
            DataRequired(message="请输入权限地址~~~!")
        ],
        description="权限地址",
        render_kw={
            "class": "form-control",
            "id": "input_name",
            "placeholder": "请输入权限地址!",
        }
    )
    submit = SubmitField(
        label="编辑/添加",
        render_kw={  # 设置生成前端"账号标签"对应的html属性
            "class": "btn btn-primary",
        }
    )

 

 视图函数

# 权限管理
@admin.route("/auth/add/", methods=['GET', 'POST'])  # 添加权限
@admin_login_req
def auth_add():
    form = AuthForm()
    if form.validate_on_submit():
        data = form.data
        # 查重
        auth = Auth.query.filter_by(name=data["name"]).count()
        if auth == 1:
            flash("权限已经存在,请重新输入!", "err")  # 失败消息闪现
            return redirect(url_for("admin.auth_add"))
        # 存库
        auth = Auth(
            name=data['name'],
            url=data['url']
        )
        db.session.add(auth)
        db.session.commit()
        flash("添加权限成功!", "ok")
    return render_template("admin/auth_add.html", form=form)



@admin.route("/auth/list/<int:page>/", methods=['GET'])  # 权限列表
@admin_login_req
def auth_list(page=None):
    if page is None:
        page = 1
    page_data = Auth.query.order_by(Auth.addtime.desc()).paginate(page=page, per_page=10)
    return render_template("admin/auth_list.html", page=1, page_data=page_data)

# 删除权限
@admin.route("/auth/del/<int:id>/", methods=['GET'])
@admin_login_req
def auth_del(id=None):
    auth = Auth.query.get_or_404(int(id))
    db.session.delete(auth)
    db.session.commit()
    flash("删除权限成功!", "ok")
    return redirect(url_for("admin.auth_list", page=1))

# 编辑权限
@admin.route("/auth/edit/<int:id>/", methods=['GET', 'POST'])  # 编辑权限
@admin_login_req
def auth_edit(id=None):
    form = AuthForm()
    auth = Auth.query.get_or_404(id)
    if form.validate_on_submit():
        data = form.data
        # 查重
        auth_count = Auth.query.filter_by(name=data["name"]).count()      # filter_by用于单表查询
        if auth.name != data["name"] and auth_count == 1:
            flash("权限已经存在,请重新输入!", "err")  # 失败消息闪现
            return redirect(url_for("admin.auth_edit", id=id))

        auth.name = data["name"]    # 存库操作
        auth.url = data["url"]
        db.session.add(auth)
        db.session.commit()
        flash("权限修改成功!", "ok")    # 成功消息闪现
        return redirect(url_for("admin.auth_edit", id=id))
    return render_template("admin/auth_edit.html", form=form, auth=auth)

 

 界面效果

 

报错处理

编辑权限时候的一个报错问题:

报错:

TypeError: __call__() takes 1 positional argument but 2 were given

出错文件:E:\study\mooc\MicroMovie200731\app\templates\admin\auth_edit.html

出错点:

 处理方法:

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值