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 回答