Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/305.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python/Flask:AttributeError:';请求上下文';对象没有属性';登录';(分配给会话[';用户名';]时)_Python_Flask - Fatal编程技术网

Python/Flask:AttributeError:';请求上下文';对象没有属性';登录';(分配给会话[';用户名';]时)

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

我正在尝试设置Flask中的
会话['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"))