我得到这个错误,我想要任何输入,因为它现在是砖墙。AttributeError:'RequestContext'对象没有'user'属性
我有一个应用程序,即使用flask-security,通过flask-login导入current_user。任何集成问题都是过去并且已经有一段时间了。
我需要过滤某些特定信息的请求,这些信息放在了g上。我的蓝图工作,任何集成问题都是过去的事情。
昨天,我将这个请求过滤蓝图功能提取到general extension,它基本上将信息过滤到g,并且变得更容易配置,所以它或多或少已经准备好并经过测试。这个扩展替换this blueprint,以创建一个交叉应用程序请求过滤器
我把这个放回到我的应用程序,现在我得到这个,并声明它是不透明的:我不知道用户不在或不知道为什么RequestContext的
Traceback (most recent call last):
File "/home/zv/.virtualenvs/j/lib/python2.7/site-packages/flask/app.py", line 1701, in __call__
return self.wsgi_app(environ, start_response)
File "/home/zv/.virtualenvs/j/lib/python2.7/site-packages/flask/app.py", line 1689, in wsgi_app
response = self.make_response(self.handle_exception(e))
File "/home/zv/.virtualenvs/j/lib/python2.7/site-packages/flask/app.py", line 1687, in wsgi_app
response = self.full_dispatch_request()
File "/home/zv/.virtualenvs/j/lib/python2.7/site-packages/flask/app.py", line 1360, in full_dispatch_request
rv = self.handle_user_exception(e)
File "/home/zv/.virtualenvs/j/lib/python2.7/site-packages/flask/app.py", line 1356, in full_dispatch_request
rv = self.preprocess_request()
File "/home/zv/.virtualenvs/j/lib/python2.7/site-packages/flask/app.py", line 1539, in preprocess_request
rv = func()
File "/home/zv/.virtualenvs/j/lib/python2.7/site-packages/Flask_Flarf-0.0.1-py2.7.egg/flask_flarf/flarf.py", line 48, in preprocess_request
preprocess_func(r)
File "/home/zv/.virtualenvs/j/lib/python2.7/site-packages/Project_Producer-0.0.1-py2.7.egg/project_producer/config/configs/request_filters_config.py", line 10, in preprocess_with_user
g.preprocessed = current_app.extensions['flarf'].preprocess_cls(request)
File "/home/zv/.virtualenvs/j/lib/python2.7/site-packages/Project_Producer-0.0.1-py2.7.egg/project_producer/config/configs/request_filters_config.py", line 17, in __init__
self.aid = self.determine_account(request)
File "/home/zv/.virtualenvs/j/lib/python2.7/site-packages/Project_Producer-0.0.1-py2.7.egg/project_producer/config/configs/request_filters_config.py", line 51, in determine_account
current_user.account.identifier])
File "/home/zv/.virtualenvs/j/lib/python2.7/site-packages/werkzeug/local.py", line 336, in __getattr__
return getattr(self._get_current_object(), name)
File "/home/zv/.virtualenvs/j/lib/python2.7/site-packages/werkzeug/local.py", line 295, in _get_current_object
return self.__local()
File "/home/zv/.virtualenvs/j/lib/python2.7/site-packages/flask_login.py", line 403, in <lambda>
current_user = LocalProxy(lambda: _request_ctx_stack.top.user)
AttributeError: 'RequestContext' object has no attribute 'user'
理论:
1)此功能:
def preprocess_request(preprocess_func=self.preprocess_func):
r = _request_ctx_stack.top.request
request_endpoint = str(r.url_rule.endpoint).rsplit('.')[-1]
if request_endpoint not in _flarf.preprocess_skip:
preprocess_func(r)
那么,什么是在跟踪上述happpening是,preproc ess_request运行调用应用程序本地定义的preprocess_func,它自己创建一个应用程序本地定义的类实例以附加到g,这个本地定义的类实例使用'current_user'...并且这是它的错误。
运行,之前或使用_request_ctx_stack尚未与用户联系或删除用户。乘爆裂或触摸_request_ctx_stack.top.request是也许“不好”
2)的操作顺序,preprocess_request之前烧瓶的安全运行的添加用户
3)没有线索,比特丢失ATM
有什么建议吗?
编辑:
问题是最有可能的方法分辨率current_app.before_request_funcs返回:
{None: [<function flarf_filter_request at 0x1a781b8>, <bound method LoginManager._load_user of <flask_login.LoginManager object at 0x1a79990>>, <bound method Principal._on_before_request of <flask_principal.Principal object at 0x1a80290>>]}
所以主外卖是我做错了,在那里,如果我需要得到before_request信息,在before_request时间内得到那些信息,那么flask运行这些函数并不是最优的,因为目前没有before_request函数的排序。
选项?
添加选项命令before_request功能瓶中,可能作为优先关键字一样简单,并与我在做什么来电分类或有序字典
改变战术,例如将其从before_request更改为装饰器。但是,这需要一个观点符号,而创建蓝图和扩展的重点就是不必为每个视图收集某些信息。上行将是多个过滤器计划。
一个有用的,预先制备:烧瓶优等