0

Google アプリ エンジンに組み込まれている OpenID 認証を使用して、現在サインインしているユーザーの情報をテンプレートで自動的に利用できるようにしようとしています。

手動で行うと、次のようになります。

from google.appengine.api import users
from tipfy import RequestHandler
from tipfy.ext.jinja2 import render_response

def WhateverHandler(RequestHandler):
    def get(self):
        user = users.get_current_user()
        return render_response('template_name.html', user=user)
        # great, now I can use {{ user.nickname }} or whatever in the template

すべてのリクエスト ハンドラーにこのコードを記述したくないので、何らかのミドルウェアを追加して対処できることを期待しています (ここではほとんど推測しています)。

from google.appengine.api import users

class GoogleUsersMiddleware(object)

    def post_dispatch(self, handler, response):
        user = users.get_current_user()
        # now somehow add user to the response?

        return response

何か案は?tipfy の SessionMiddleware がどのように機能するかを調べてみましたが、よくわかりません。

乾杯。

4

1 に答える 1

1

で現在のユーザーを自動的に取得する RequestHandler のサブクラスを作成できます__init__。また、そのサブクラスにメソッドを追加して、テンプレートのレンダリングをカスタマイズすることもできます。ミドルウェアがこの問題の正しい解決策だとは思いません。

from google.appengine.api import users
from tipfy import RequestHandler
from tipfy.ext.jinja2 import render_response

class UserPageHandler(RequestHandler):
    def __init__(self, app, request):
        super(UserPageHandler, self).__init__(app, request)

        self.user = users.get_current_user()

    def user_response(self, template_name):
        return render_response(template_name, user=self.user)

def WhateverHandler(UserPageHandler):
    def get(self):
        return self.user_response('template_name.html')
于 2011-03-30T02:35:09.310 に答える