Доступ к информации OpenID пользователя в шаблонах на движке приложений Google (tipfy) - PullRequest
0 голосов
/ 30 марта 2011

Я использую аутентификацию OpenID, встроенную в движок приложений Google, и пытаюсь сделать доступными в данный момент информацию о пользователе автоматически в шаблонах.

Выполнение этого вручную может выглядеть примерно так:

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

Есть идеи? Я пытался посмотреть, как работает SessionMiddleware, но не совсем понял.

Приветствие.

1 Ответ

1 голос
/ 30 марта 2011

Вы можете создать подкласс RequestHandler, который автоматически извлекает текущего пользователя на __init__.Также вы можете добавить методы к этому подклассу для настройки рендеринга шаблона.Я не думаю, что Middleware - правильное решение для этой проблемы.

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')
...