Предположим, я создал промежуточное программное обеспечение, которое должно перенаправить пользователя после входа в систему с помощью «следующего» параметра, взятого из LOGIN_REDIRECT_URL
. Но он должен делать это только один раз сразу после регистрации, а не с каждым запросом до LOGIN_REDIRECT_URL
. На данный момент я проверяю User.last_login
и сравниваю его с datetime.datetime.now()
, но, похоже, это не разумное решение. Любые лучшие идеи?Django Middleware, одно действие после входа в систему
ответ
мне удалось решить эту проблему. Я создал сигнал для действия user_logged_in, который добавляет переменную redirect_me=True
. То что я имел все тот же запрос в middleware, я мог проверить его и сделать и redirct. Вот пример кода здесь:
signals.py: из django.contrib.auth.signals импорта USER_LOGGED_IN
def do_stuff(sender, user, request, **kwargs):
if getattr(request, 'user', None) and not request.user.is_superuser:
request.do_stuff = True
models.py (вы также можете поместить его в инициализации .py или другой файл, выполняется сначала на 'runserver'):
from django.contrib.auth.signals import user_logged_in
user_logged_in.connect(do_stuff)
middleware.py:
класс PrimordialAdvertMiddleware (объект):
def process_response(self, request, response):
if getattr(request, 'do_stuff', None):
return do_some_other_stuff()
return response
Вы также выполняете действие process_request. Я надеюсь, что это поможет кому-то в будущем.
Возможно, вам стоит попробовать использовать user_logged_in вместо промежуточного программного обеспечения?
Также вы можете проверить объект пользователя из запроса на is_anonymous, может быть, это может помогает
Не сигналы, которые должны запускать действия в фоновом режиме? как я могу перенаправить пользователя на URL внутри сигнала? Кроме того, я проверяю объект пользователя на запрос, но я хочу перенаправить ONCE, только после входа в систему. – mdargacz
Вы можете посмотреть референт. 'HTTP_REFERER' – karthikr
промежуточное ПО ловит все запросы, почему вы не используете представление? – vadimchin
@vadimchin Мне нужно промежуточное ПО, потому что я хочу позволить авторизованным пользователям делать бесплатные шаги вокруг «зарегистрированной области», поэтому я создаю «посетителя» в промежуточном программном обеспечении, и когда он пытается просмотреть любой из «зарегистрированных областей», я хочу для отображения представления с уведомлением. Я мог бы сделать декоратор к просмотру «logged area», но я хочу, чтобы все это было в промежуточном программном обеспечении. – mdargacz