Google App Engine(python)を利用する際に「リクエストスコープ」に情報を格納したいと考えています。これが意味することは、リクエストが最初に受信されたときにいくつかの情報を初期化し、リクエストの存続期間中どこからでも (そのリクエストからのみ) アクセスできるようにしたいということです。
この例は、認証後に現在のユーザーの名前をリクエストスコープで保存した場合です。
このようなことをするにはどうすればよいでしょうか。
ありがとう!
Google App Engine(python)を利用する際に「リクエストスコープ」に情報を格納したいと考えています。これが意味することは、リクエストが最初に受信されたときにいくつかの情報を初期化し、リクエストの存続期間中どこからでも (そのリクエストからのみ) アクセスできるようにしたいということです。
この例は、認証後に現在のユーザーの名前をリクエストスコープで保存した場合です。
このようなことをするにはどうすればよいでしょうか。
ありがとう!
アプリ エンジン自体で使用されるパターン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
次のようなものが必要です:-
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 が定義され、すべてのリクエストが通過します。初期化メソッド。