Django - как узнать, был ли пользователь перенаправлен на страницу с помощью @login_required?

Я хочу использовать

@login_required 

декоратор для представления называется

allUsers_page

, который используется, когда вы переходите по URL-адресу

r'^users/allUsers$'

В моих settings.py у меня есть

LOGIN_URL='/login'

поэтому, когда пользователь переходит на

allUser_page

просмотр (когда он переходит по ссылке

users/allUsers

, если пользователь не вошел в свою учетную запись, он перенаправит его на страницу входа. Теперь, на странице входа, есть ли способ узнать, перешел ли пользователь непосредственно на страницу входа или он был перенаправлен на страницу входа с помощью

@login_required

декоратор? По сути, я хочу, чтобы моя страница входа выглядела примерно так

{% if the user was redirected to this page by @login_required %}
    <p>Hi, you must log in in order to view the page you were trying to view.</p>
{% else %}
    <p>Welcome! Please sign in.</p>
<!-- Here is where the log in form is -->

ПРИМЕЧАНИЕ. Я использую общий вид входа в систему.


person SilentDev    schedule 13.01.2014    source источник


Ответы (1)


Если пользователь был перенаправлен с другой страницы, django предоставит параметр строки запроса next, чтобы пользователь мог быть перенаправлен обратно после входа в систему.

Добавьте это в свой settings.py

TEMPLATE_CONTEXT_PROCESSORS = (
    "django.contrib.auth.context_processors.auth",
    "django.core.context_processors.debug",
    "django.core.context_processors.i18n",
    "django.core.context_processors.media",
    "django.core.context_processors.static",
    "django.core.context_processors.tz",
    "django.contrib.messages.context_processors.messages",
    "django.core.context_processors.request",
)

затем в шаблоне проверьте, существует этот параметр или нет.

{% if 'next' in request.GET %}

Однако не тестировался.

См. Документы по аутентификации

person synthomat    schedule 13.01.2014
comment
Вам нужно будет добавить request в список TEMPLATE_CONTEXT_PROCESSORS, чтобы указать request в шаблонах. - person synthomat; 13.01.2014
comment
отлично, сработало. Спасибо. Это в принципе сработало. Мне просто нужно было добавить «django.contrib.auth.context_processors.auth» в «TEMPLATE_CONTEXT_PROCESSORS» вместе с тем, что вы сказали, и это сработало. - person SilentDev; 13.01.2014
comment
Хуже того, в моем старом примере мы перезаписали все процессоры контекста по умолчанию. Правильный ответ немного длиннее :) Спасибо за комментарий... - person synthomat; 13.01.2014