Python/Flask:AttributeError:';请求上下文';对象没有属性';登录';(分配给会话[';用户名';]时)
我正在尝试设置Flask中的Python/Flask:AttributeError:';请求上下文';对象没有属性';登录';(分配给会话[';用户名';]时),python,flask,Python,Flask,我正在尝试设置Flask中的会话['username']属性。我用的是蓝图。我的目录结构如下所示(截断了一些不相关的子目录): 我在虚拟环境中工作 在应用程序目录中,我有一个\uuuu init\uuuu.py,其中包含以下内容: 从烧瓶导入烧瓶 def create_app(): app=Flask(\uuuuu name\uuuuuuuu,instance\u relative\u config=False) app.secret_key='谁关心安全性'#忽略坏秘密,占位符 使用app.a
会话['username']
属性。我用的是蓝图。我的目录结构如下所示(截断了一些不相关的子目录):
我在虚拟环境中工作
在应用程序目录中,我有一个\uuuu init\uuuu.py
,其中包含以下内容:
从烧瓶导入烧瓶
def create_app():
app=Flask(\uuuuu name\uuuuuuuu,instance\u relative\u config=False)
app.secret_key='谁关心安全性'#忽略坏秘密,占位符
使用app.app_context():
#在此处注册蓝图,为清晰起见,将其截断
from.login导入登录
应用程序注册蓝图(login.login\u bp)
返回应用程序
在登录目录中,我有一个login.py
:
从flask导入蓝图、呈现模板、请求、会话、重定向、url
将app.googleutils.utils作为googleutil导入
登录\u bp=Blueprint(
“登录名”,
template_folder='templates',
静态文件夹=“静态”
)
@login\u bp.route('/login',methods=['GET','POST'])
def login():
如果request.method==“POST”:
#处理登录请求
用户名=请求。表单[“用户名”]
密码=请求。表格[“密码”]
user=googleutil.find_用户(用户名、密码)
如果用户:
会话[“用户名”]=用户名
返回重定向(url\u for('home\u bp.home'))
返回呈现模板('login.html')#占位符
其他:
返回呈现模板('login.html')
当用户访问/login
时,他们会填写一张用户名/密码表,我通过POST获取该表。这是对照谷歌数据存储中存储的实体列表进行检查的。如果发现用户名/密码匹配,我将尝试为用户名分配会话['username']
属性。但是,这给了我一个错误:AttributeError:'RequestContext'对象没有属性'login'
这是堆栈跟踪:
Traceback (most recent call last):
File "C:\Users\NAME\Desktop\PROJECT\env\Lib\site-packages\flask\app.py", line 2464, in __call__
return self.wsgi_app(environ, start_response)
File "C:\Users\NAME\Desktop\PROJECT\env\Lib\site-packages\flask\app.py", line 2450, in wsgi_app
response = self.handle_exception(e)
File "C:\Users\NAME\Desktop\PROJECT\env\Lib\site-packages\flask\app.py", line 1867, in handle_exception
reraise(exc_type, exc_value, tb)
File "C:\Users\NAME\Desktop\PROJECT\env\Lib\site-packages\flask\_compat.py", line 39, in reraise
raise value
File "C:\Users\NAME\Desktop\PROJECT\env\Lib\site-packages\flask\app.py", line 2447, in wsgi_app
response = self.full_dispatch_request()
File "C:\Users\NAME\Desktop\PROJECT\env\Lib\site-packages\flask\app.py", line 1952, in full_dispatch_request
rv = self.handle_user_exception(e)
File "C:\Users\NAME\Desktop\PROJECT\env\Lib\site-packages\flask\app.py", line 1821, in handle_user_exception
reraise(exc_type, exc_value, tb)
File "C:\Users\NAME\Desktop\PROJECT\env\Lib\site-packages\flask\_compat.py", line 39, in reraise
raise value
File "C:\Users\NAME\Desktop\PROJECT\env\Lib\site-packages\flask\app.py", line 1950, in full_dispatch_request
rv = self.dispatch_request()
File "C:\Users\NAME\Desktop\PROJECT\env\Lib\site-packages\flask\app.py", line 1936, in dispatch_request
return self.view_functions[rule.endpoint](**req.view_args)
File "C:\Users\NAME\Desktop\PROJECT\env\login\login.py", line 20, in login
session["username"] = username
File "C:\Users\NAME\Desktop\PROJECT\env\Lib\site-packages\werkzeug\local.py", line 350, in __setitem__
self._get_current_object()[key] = value
File "C:\Users\NAME\Desktop\PROJECT\env\Lib\site-packages\werkzeug\local.py", line 306, in _get_current_object
return self.__local()
File "C:\Users\NAME\Desktop\PROJECT\env\Lib\site-packages\flask\globals.py", line 39, in _lookup_req_object
return getattr(top, name)
AttributeError: 'RequestContext' object has no attribute 'login'
我不确定我做错了什么。查看flask的globals.py,我发现以下几行提到了“login”属性:
# context locals
_request_ctx_stack = LocalStack()
_app_ctx_stack = LocalStack()
current_app = LocalProxy(_find_app)
request = LocalProxy(partial(_lookup_req_object, "request"))
session = LocalProxy(partial(_lookup_req_object, "login"))
g = LocalProxy(partial(_lookup_app_object, "g"))
但我不知道从这里该怎么办
取消注释行session[“username”]=username
可以修复错误,并且RHS变量username
肯定不是空的
谢谢。Flask的globals.py应如下所示:
session = LocalProxy(partial(_lookup_req_object, "session"))
根据。在flask的历史记录中,该行从未使用过字符串“login”。我不知道为什么您的系统会这样,但将其更改回“会话”应该可以解决您的问题。使用app.app_context()执行
的原因是什么:
?当试图弄清楚它们是如何工作的。老实说,我不知道那句台词是什么意思。但是,使用app.app_context()删除:
并没有修复错误。
session = LocalProxy(partial(_lookup_req_object, "session"))