所以我的基本问题。我有一个烧瓶应用程序。在这个应用程序内部,我构建了一个使用烧瓶会话的简单登录系统。我想打破我的代码 分成不同的类来帮助分离我的逻辑。但我收到以下错误。
Traceback (most recent call last):
File "server.py", line 22, in <module>
securty = Security()
File "/Users/chrisburgin/Development/pigarage/security.py", line 6, in __init__
print(session.get('logged_in'))
NameError: global name 'session' is not defined
使用以下内容接收此错误。
我的外部课程
class Security:
def __init__(self):
print('Security Created')
print(session.get('logged_in'))
def loggedIn(self):
if session.get('logged_in') != True:
return False
我从我的服务器文件
中调用它securty = Security()
就像夏日一样。我知道'Security'类没有访问会话的权限,因为它不在范围内,但我可以非常多地使用帮助来理解如何提供访问权限。
请纠正我做错的事。谢谢!
使用我的外部类文件顶部的flask导入会话进行编辑
File "server.py", line 22, in <module>
securty = Security()
File "/Users/chrisburgin/Development/pigarage/security.py", line 5, in __init__
print(session.get('logged_in'))
File "/Library/Python/2.7/site-packages/werkzeug/local.py", line 338, in __getattr__
return getattr(self._get_current_object(), name)
File "/Library/Python/2.7/site-packages/werkzeug/local.py", line 297, in _get_current_object
return self.__local()
File "/Library/Python/2.7/site-packages/flask/globals.py", line 20, in _lookup_req_object
raise RuntimeError('working outside of request context')
RuntimeError: working outside of request context
答案 0 :(得分:1)
Flask的session
变量是上下文本地。 Context locals是一种有点特殊的全局变量,因为它们只能在特定时间访问。
特别是对于session
,您只能在应用程序响应请求时使用它。 Flask在调用视图函数之前设置此变量的值。
在堆栈跟踪中,您似乎在初始化期间创建了Security
类的实例。此类的构造函数访问session
,但此时,实际上没有客户端,没有请求,也没有会话,因此这会给您一个错误。只要您不在构造函数中访问会话,就可以创建此类的对象。然后,您必须确保仅在视图函数或从视图函数调用的函数内调用loggedIn
方法,以确保存在请求上下文。