在Flask Limiter函数中访问用户对象返回上下文错误

时间:2016-03-12 04:55:20

标签: python flask

我使用Flask-limiter扩展来限制特定路由的页面请求数(除非他们以管理员身份登录)。我正在使用Flask-Stormpath扩展来管理我的用户身份验证。

由于某种原因,我现有的函数返回此错误:

Traceback (most recent call last):
  File "index.py", line 772, in <module>
    @limiter.limit("20/hour", exempt_when=admin_conditions())
  File "index.py", line 114, in admin_conditions
    if current_app.user.is_authenticated():
  File "c:\Python27\lib\site-packages\werkzeug\local.py", line 338, in __getattr
__
    return getattr(self._get_current_object(), name)
  File "c:\Python27\lib\site-packages\werkzeug\local.py", line 297, in _get_curr
ent_object
    return self.__local()
  File "c:\Python27\lib\site-packages\flask\globals.py", line 34, in _find_app
    raise RuntimeError('working outside of application context')
RuntimeError: working outside of application context

这是我的代码:

# Rate Limiting function
def admin_conditions():
    if user.is_authenticated():
        group_list = []
        for group in user.groups:
            group_list.append(group.name)

        if not group_list:
            return(False)
        else:
            if group_list[0] == "admins":
                return(True)
            else:
                return(False)
    else:
        return(False)

# route
@limiter.limit("20/hour", exempt_when=admin_conditions())

我读到了使用flask-limiter在request context中调用了admin_conditions函数,但我不了解如何从那里访问用户对象。有什么想法会发生什么?

1 个答案:

答案 0 :(得分:1)

您应该将函数传递给装饰器,而不是函数的结果。

@limiter.limit('20/hour', exempt_when=admin_conditions)

注意缺少(),所以不要立即调用该函数。目前,该函数在应用程序运行和处理请求之前的定义时执行。