在Google应用引擎上的模板中访问用户的OpenID信息(tipfy)

时间:2011-03-30 02:07:14

标签: python google-app-engine middleware tipfy

我正在使用内置于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

有什么想法吗?我已经尝试过查看tipMy的SessionMiddleware是如何工作的,但是不太明白。

干杯。

1 个答案:

答案 0 :(得分: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')