Джанго: Контекстные процессоры во взглядах, плохая практика? - PullRequest
0 голосов
/ 08 июля 2011

В моем проекте Django у меня есть контекстный процессор, который возвращает объект FacebookUser на основе файлов cookie, присутствующих в запросе (используя Python SDK Facebook). Это означает, что когда пользователь вошел в систему, соответствующий ему объект FacebookUser всегда доступен в моих шаблонах.

Однако, что мне делать, если я тоже хочу получить к нему доступ в представлениях?

Вариант 1: В каждом представлении, где я хочу получить доступ к этому объекту FacebookUser, вызывайте метод процессора контекста или метод, который делает то же самое.

Вариант 2: Снова в каждом представлении вызовите RequestContext(request), чтобы получить доступ к существующему объекту, добавленному в контекст процессором контекста.

Какая практика лучше, и есть ли рекомендуемые способы работы здесь?

Ответы [ 3 ]

3 голосов
/ 08 июля 2011

Если вам часто нужен объект FacebookUser, используйте промежуточное ПО. Документация здесь

Для примера класса промежуточного программного обеспечения:

class FacebookApiIntegrator(object):

    def process_request(self, request):
        if request.user.is_authenticated():# check if user has logged in
            request.facebook = <your profile func or obj..>

и в любом представлении вы можете просто использовать:

request.facebook

Ноне забывайте, что ваше промежуточное ПО будет запускаться для каждого запроса и добавлять ваш профиль в профиле Facebook для запроса на каждый запрос вошедшего в систему пользователя.Поэтому использование промежуточного программного обеспечения для объекта, который часто не используется, не очень хорошая идея.

1 голос
/ 08 июля 2011

Вариант 1. Делегировать работу процессора контекста другой функции и вызывать эту функцию.

0 голосов
/ 08 июля 2011

Вы уже используете промежуточное ПО.

https://docs.djangoproject.com/en/1.3/topics/http/middleware/#middleware

Вам просто нужно реализовать process_request, и это делается в каждом запросе.

https://docs.djangoproject.com/en/1.3/topics/http/middleware/#process_request

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...