0

使用谷歌应用引擎(python)时,我想在“请求范围”存储一些信息。我的意思是我想在第一次收到请求时初始化一些信息,然后能够在请求的整个生命周期内从任何地方访问它(并且只能从那个请求)。

例如,如果我在当前用户通过身份验证后将其保存在请求范围内。

我将如何去做这种事情?

谢谢!

4

2 回答 2

2

应用引擎本身使用的模式似乎是threading.local您可以在 SDK 代码中使用 grep 查找的模式。例如,使 os.environ 请求本地化是这样完成runtime/request_environment.py的。

一个粗略的例子:

import threading

class _State(threading.local):
    """State keeps track of request info"""
    user = None

_state = _State()

在其他地方,您可以在处理程序代码中尽早进行身份验证。

from state import _state
if authentication_passed:
    _state.user = user

并提供可用于代码其他部分的便利

from state import _state
def get_authenticated_user():
    user = _state.user
    if not user:
        raise AuthenticationError()
    return user
于 2012-06-09T21:09:03.497 回答
1

你需要这样的东西: -

class BaseHandler(webapp2.RequestHandler):
  #A function which is useful in order to determine whether user is logged in
  def initialize(self, *a, **kw):
    #Do the authentication
    self.username = username


class MainHandler(BaseHandler):
 def get(self):
   print self.username

现在,如果您继承 BaseHandler 类,所有请求将首先通过 BaseHandler 类的初始化方法,并且由于在 BaseHandler 类中您正在设置用户名,而 MainHandler 从 BaseHandler 继承,您将定义 self.username 并且所有请求都将通过初始化方法。

于 2012-06-09T21:19:15.317 回答