我正在使用内置于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是如何工作的,但是不太明白。
干杯。
答案 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')