【问题标题】:Access user's OpenID info in templates on Google app engine (tipfy)在 Google 应用引擎的模板中访问用户的 OpenID 信息(tipfy)
【发布时间】:2011-03-30 02:07:13
【问题描述】:

我正在使用 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 是如何工作的,但不太明白。

干杯。

【问题讨论】:

    标签: python google-app-engine middleware tipfy


    【解决方案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')
    

    【讨论】:

    • 这看起来可以正常工作。谢谢。我在考虑 django,对中间件和上下文处理器感到困惑。
    猜你喜欢
    • 1970-01-01
    • 2016-07-22
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2016-06-07
    • 2019-01-16
    • 2011-01-31
    相关资源
    最近更新 更多