2011-03-30 42 views
0

我正在使用内置于Google应用引擎中的OpenID身份验证,并试图使当前登录的用户信息自动在模板中可用。在Google应用引擎上的模板中访问用户的OpenID信息(tipfy)

做手工可能是这样的:

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是如何工作的,但并不完全明白。

干杯。

回答

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') 
+0

这看起来像它会正常工作。谢谢。我在考虑django,并在中间件和上下文处理器之间感到困惑。 – codebyren 2011-03-30 03:54:50

相关问题