首页
学习
活动
专区
工具
TVP
发布
社区首页 >问答首页 >装饰器的顺序在Flask视图中重要吗?

装饰器的顺序在Flask视图中重要吗?
EN

Stack Overflow用户
提问于 2015-01-29 07:01:14
回答 2查看 3.3K关注 0票数 15

我使用了login_required装饰器和另一个对输出数据进行分页的装饰器。哪一个先来很重要吗?

EN

回答 2

Stack Overflow用户

发布于 2018-04-28 13:26:49

根据login_required的实现,

代码语言:javascript
复制
def login_required(func):
    @wraps(func)
    def decorated_view(*args, **kwargs):
        if current_app.login_manager._login_disabled:
            return func(*args, **kwargs)
        elif not current_user.is_authenticated():
            return current_app.login_manager.unauthorized()
        return func(*args, **kwargs)
    return decorated_view

你应该像下面这样做。

代码语言:javascript
复制
@login_required
@paginate
def view_function():
    pass

假设您有另一个装饰器is_admin来判断一个用户是否拥有管理员权限,您应该这样做

代码语言:javascript
复制
@login_required
@is_admin
def view_function():
    pass
票数 3
EN

Stack Overflow用户

发布于 2015-01-29 07:22:08

根据PEP 318的说法,函数修饰器的语法是:

代码语言:javascript
复制
@dec2
@dec1
def func(arg1, arg2, ...):
    pass

这相当于:

代码语言:javascript
复制
def func(arg1, arg2, ...):
    pass
func = dec2(dec1(func))

在dec2之前调用dec1。

您可以定义这些函数进行检查,如下所示:

代码语言:javascript
复制
def dec1(func):
    print 'dec1'
def dec2(func):
    print 'dec2'

@dec2
@dec1
def func():
    pass
dec1
dec2

实际上,它不会产生任何错误,但如果您首先使用login_reqired,而用户没有登录,则应用程序将在login_required函数生成中止后处理数据并对其进行分页

flask中login_required装饰器的最佳实现是:

代码语言:javascript
复制
@paginate
@login_required
def view_function():
    pass
票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/28204071

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档