繁体   English   中英

flask-security角色_需要可插入视图

[英]flask-security roles_required with pluggable views

我试图要求一个角色访问一个我定义为MethodView的视图。 但是,我似乎无法正确地命名路线。

如果我只需要使用装饰器登录,则一切正常:

activities = Blueprint("activities", __name__, url_prefix="/activities")

class ActivitiesView(MethodView):
    def get():
        pass

    def post():
        pass

view = login_required(ActivitiesView.as_view("activities"))
activities.add_url_rule('/', view_func=view)

我得到了所需的路线名称,即activities.activities

>>> current_app.url_map
Map([...
 <Rule '/activities/' (HEAD, POST, OPTIONS, GET) -> activities.activities>,
...])

但是,当我尝试使用roles_required ,该路由的名称已损坏,并且不再列出POST方法:

view = roles_required("experimenter", ActivitiesView.as_view("activities"))
activities.add_url_rule('/', view_func=view)

>>> current_app.url_map
Map([...
 <Rule '/activities/' (HEAD, OPTIONS, GET) -> activities.wrapper>,
...])

将参数切换为add_url_rule不会更改任何内容。 如何在不弄乱路线名称的情况下使用roles_required

这样做可以修复路由名称,但不能修复缺少的POST方法:

view = roles_required("experimenter", endpoint="activities", ActivitiesView.as_view("activities"))
activities.add_url_rule('/', view_func=view)

解决方案是调用装饰器:

view = roles_required("experimenter")(ActivitiesView.as_view("activities"))
activities.add_url_rule('/', view_func=view)

或者:

decorators = [roles_required("experimenter")]

由于这篇文章:

http://scottlobdell.me/2015/04/decorators-arguments-python/

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM