0

Google App Engine(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 クラスの initialize メソッドを通過します。BaseHandler クラスではユーザー名を設定し、MainHandler は BaseHandler から継承するため、self.username が定義され、すべてのリクエストが通過します。初期化メソッド。

于 2012-06-09T21:19:15.317 に答える