python flask,使用另一个类保持会话在范围内

时间:2015-07-30 04:04:47

标签: python class session flask scope

所以我的基本问题。我有一个烧瓶应用程序。在这个应用程序内部,我构建了一个使用烧瓶会话的简单登录系统。我想打破我的代码 分成不同的类来帮助分离我的逻辑。但我收到以下错误。

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

1 个答案:

答案 0 :(得分:1)

Flask的session变量是上下文本地。 Context locals是一种有点特殊的全局变量,因为它们只能在特定时间访问。

特别是对于session,您只能在应用程序响应请求时使用它。 Flask在调用视图函数之前设置此变量的值。

在堆栈跟踪中,您似乎在初始化期间创建了Security类的实例。此类的构造函数访问session,但此时,实际上没有客户端,没有请求,也没有会话,因此这会给您一个错误。只要您不在构造函数中访问会话,就可以创建此类的对象。然后,您必须确保仅在视图函数或从视图函数调用的函数内调用loggedIn方法,以确保存在请求上下文。