将对象存储在Google应用引擎中的“请求范围”中

时间:2012-06-09 20:52:26

标签: python google-app-engine scope httprequest

我想在使用谷歌应用引擎(python)时在“请求范围”存储一些信息。我的意思是我想在首次收到请求时初始化一些信息,然后能够在请求的整个过程中从任何地方访问它(并且只能从该请求中获取)。

这样做的一个例子是,如果我在身份验证后将当前用户的名称保存在请求范围内。

我将如何做这类事情?

谢谢!

2 个答案:

答案 0 :(得分:2)

app引擎本身使用的模式似乎是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

答案 1 :(得分: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类的initialize方法,因为在BaseHandler类中,您要设置用户名  并且MainHandler继承了BaseHandler形式,您将定义self.username,并且所有请求都将通过initialize方法。