我使用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函数,但我不了解如何从那里访问用户对象。有什么想法会发生什么?
答案 0 :(得分:1)
您应该将函数传递给装饰器,而不是函数的结果。
@limiter.limit('20/hour', exempt_when=admin_conditions)
注意缺少()
,所以不要立即调用该函数。目前,该函数在应用程序运行和处理请求之前的定义时执行。