- android - 多次调用 OnPrimaryClipChangedListener
- android - 无法更新 RecyclerView 中的 TextView 字段
- android.database.CursorIndexOutOfBoundsException : Index 0 requested, 光标大小为 0
- android - 使用 AppCompat 时,我们是否需要明确指定其 UI 组件(Spinner、EditText)颜色
我遇到了这个错误,我想要任何类型的输入,因为它现在是一堵砖墙。
我有一个应用程序,它正在使用 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)
所以上面跟踪中发生的事情是 preprocess_request 运行调用应用程序本地定义的 preprocess_func,它本身创建一个应用程序本地定义的类实例以附加到 g,这个本地定义的类实例使用“current_user”......是错误的地方。
在使用 _request_ctx_stack 之前跑来跑去,或者还没有与用户联系或删除用户。多次弹出或触摸 _request_ctx_stack.top.request 可能“不好”
2) 操作顺序,preprocess_request 在 flask-security 添加用户之前运行
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 信息,在 flask 运行这些函数的 before_request 时间内获取该信息并不是最佳的,因为目前没有 before_request 函数的排序。
选项?
向 flask 添加一个选项来对 before_request 函数进行排序,可能与优先关键字一样简单,并调用已排序或已排序的字典
根据我正在做的事情改变策略,例如将其从 before_request 更改为装饰器。但是,这将需要每个 View 的符号,而创建蓝图和扩展的全部意义在于跳过必须在每个 View 的基础上收集某些信息。好处是计划中的多个过滤器。
一个有用的预制解决方案:Flask-Classy
最佳答案
嘿,我也遇到了这个问题,但是使用 Django 时,出现了完全相同的错误。所以我认为这可能是相似的。 RequestContext 不是一个请求,但它包含它。它是 django 中的一个特殊类,当它由您的 View 创建时,它实际上包含请求以及您从 View 传递到模板的所有其他上下文变量。
这是它的创建方式:
c = RequestContext(request, {
'foo': 'bar',
})
长话短说,RequestContext 是一个包含“request”键内的请求的字典。所以你可以这样访问它:
request = context['request']
user = request.user
在您的模板中,您可以像往常一样访问请求,request.user 应该可以工作。希望这会有所帮助,我觉得这在 Flask 和 Django 中可能是相似的。如果这没有帮助,您可以打印出上下文并查看其中包含的数据。这就是我解决问题的方式。
干杯
关于python - 属性错误 : 'RequestContext' object has no attribute 'user' ,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/16695418/
你能比较一下属性吗 我想禁用文本框“txtName”。有两种方式 使用javascript,txtName.disabled = true 使用 ASP.NET, 哪种方法更好,为什么? 最佳答案 我
Count 属性 返回一个集合或 Dictionary 对象包含的项目数。只读。 object.Count object 可以是“应用于”列表中列出的任何集合或对
CompareMode 属性 设置并返回在 Dictionary 对象中比较字符串关键字的比较模式。 object.CompareMode[ = compare] 参数
Column 属性 只读属性,返回 TextStream 文件中当前字符位置的列号。 object.Column object 通常是 TextStream 对象的名称。
AvailableSpace 属性 返回指定的驱动器或网络共享对于用户的可用空间大小。 object.AvailableSpace object 应为 Drive 
Attributes 属性 设置或返回文件或文件夹的属性。可读写或只读(与属性有关)。 object.Attributes [= newattributes] 参数 object
AtEndOfStream 属性 如果文件指针位于 TextStream 文件末,则返回 True;否则如果不为只读则返回 False。 object.A
AtEndOfLine 属性 TextStream 文件中,如果文件指针指向行末标记,就返回 True;否则如果不是只读则返回 False。 object.AtEn
RootFolder 属性 返回一个 Folder 对象,表示指定驱动器的根文件夹。只读。 object.RootFolder object 应为 Dr
Path 属性 返回指定文件、文件夹或驱动器的路径。 object.Path object 应为 File、Folder 或 Drive 对象的名称。 说明 对于驱动器,路径不包含根目录。
ParentFolder 属性 返回指定文件或文件夹的父文件夹。只读。 object.ParentFolder object 应为 File 或 Folder 对象的名称。 说明 以下代码
Name 属性 设置或返回指定的文件或文件夹的名称。可读写。 object.Name [= newname] 参数 object 必选项。应为 File 或&
Line 属性 只读属性,返回 TextStream 文件中的当前行号。 object.Line object 通常是 TextStream 对象的名称。 说明 文件刚
Key 属性 在 Dictionary 对象中设置 key。 object.Key(key) = newkey 参数 object 必选项。通常是 Dictionary 
Item 属性 设置或返回 Dictionary 对象中指定的 key 对应的 item,或返回集合中基于指定的 key 的&
IsRootFolder 属性 如果指定的文件夹是根文件夹,返回 True;否则返回 False。 object.IsRootFolder object 应为&n
IsReady 属性 如果指定的驱动器就绪,返回 True;否则返回 False。 object.IsReady object 应为 Drive&nbs
FreeSpace 属性 返回指定的驱动器或网络共享对于用户的可用空间大小。只读。 object.FreeSpace object 应为 Drive 对象的名称。
FileSystem 属性 返回指定的驱动器使用的文件系统的类型。 object.FileSystem object 应为 Drive 对象的名称。 说明 可
Files 属性 返回由指定文件夹中所有 File 对象(包括隐藏文件和系统文件)组成的 Files 集合。 object.Files object&n
我是一名优秀的程序员,十分优秀!