Уведомления

Группа в Telegram: @pythonsu

#1 Июнь 12, 2011 15:32:34

fth
От:
Зарегистрирован: 2010-07-26
Сообщения: 105
Репутация: +  0  -
Профиль   Отправить e-mail  

Модификация request в middleware

Нужно добавить к request атрибут с определённой информацией. Решил посмотреть как это делается в SessionMiddleware, но обнаружил там следующую магию:

class SessionMiddleware(object):
def process_request(self, request):
engine = import_module(settings.SESSION_ENGINE)
session_key = request.COOKIES.get(settings.SESSION_COOKIE_NAME, None)
request.session = engine.SessionStore(session_key)
Разумеется попытка сделать по аналогии проваливается:
# middleware.py
class TestMiddleware(object):
def process_request(self, request):
request.test = 'foo'
Т.е. если во вьюхе попытаться обратиться к request.test, то получим AttributeError.

Так как работает добавление атрибута session и возможно ли сделать аналогичную мидлварю?
Разумеется можно вместо process_request использовать process_view и руками вызывать вьюху с изменённым request, но, на мой взгляд, это будет слишком костыльно.



Отредактировано (Июнь 12, 2011 15:36:31)

Офлайн

#2 Июнь 12, 2011 15:56:28

fth
От:
Зарегистрирован: 2010-07-26
Сообщения: 105
Репутация: +  0  -
Профиль   Отправить e-mail  

Модификация request в middleware

Вопрос снимается.
Вышеприведённая мидлваря отлично работает.



Офлайн

#3 Июнь 18, 2011 14:22:50

tier
От:
Зарегистрирован: 2007-11-25
Сообщения: 30
Репутация: +  0  -
Профиль   Отправить e-mail  

Модификация request в middleware

такие вещи лучше делать через кастомный context processor, а не middleware. если надо - могу показать пример, как.



Офлайн

#4 Июнь 26, 2011 02:29:08

fth
От:
Зарегистрирован: 2010-07-26
Сообщения: 105
Репутация: +  0  -
Профиль   Отправить e-mail  

Модификация request в middleware

tier
Вы это о чём? Я не зря к реквесту присобачиваю дополнительный атрибут, мне эти данные нужны во вьюхе, а не в шаблоне. (используется для замены стандартного User при использовании документоориентированной БД с сохранением schema-less)



Офлайн

Board footer

Модераторировать

Powered by DjangoBB

Lo-Fi Version