Путь Джанго 1.10
Для Django 1.10, выпущенного в августе 2016 года, новый параметр с именем redirect_authenticated_user
был добавлен в представление login()
на основе функций, присутствующее в django.contrib.auth
[1].
Пример
Предположим, у нас есть приложение Django с файлом с именем views.py
и другим файлом с именем urls.py
. Файл urls.py
будет содержать такой код Python, как этот:
#
# Django 1.10 way
#
from django.contrib.auth import views as auth_views
from . import views as app_views
urlpatterns = [
url(r'^admin/', admin.site.urls),
url(r'^login/', auth_views.login, name='login',
kwargs={'redirect_authenticated_user': True}),
url(r'^dashboard/', app_views.Dashboard.as_view(), name='dashboard'),
url(r'^$', TemplateView.as_view(template_name='index.html'), name='index'),
]
Из этого файла соответствующая часть в определении переменной urlpatterns
является следующей, в которой используется уже упомянутый параметр redirect_authenticated_user
со значением True
:
url(r'^login/', auth_views.login, name='login',
kwargs={'redirect_authenticated_user': True}),
Обратите внимание, что значением по умолчанию для параметра redirect_authenticated_user
является False
.
Django 1.11 way
Для Django 1.11, выпущенного в апреле 2017 года, представление на основе класса LoginView
заменило представление на основе функции login()
[2], что дает вам два варианта выбора:
- Используйте тот же Django 1.10 way , только что описанный ранее, что является положительным моментом, поскольку ваш текущий код будет продолжать работать нормально. Если вы скажете интерпретатору Python отображать предупреждения, например, запустив в консольном терминале команду
python -Wd manage.py runserver
в каталоге проекта Django, а затем перейдя с веб-браузером на страницу входа, вы увидите в этом же консольном терминале предупреждение как это:
/ USR / местные / Библиотека / python3.6 / сайт-пакеты / Джанго / вно / авт / views.py: 54:
RemovedInDjango21Warning: представление login () заменяется
основанный на классе LoginView ().
- Используйте новый
Django 1.11 way
, который сделает ваш код более современным и совместимым с будущими выпусками Django. С этой опцией приведенный выше пример теперь будет выглядеть следующим образом:
* +1047 * Пример * +1048 *
Мы снова предполагаем, что у нас есть приложение Django с файлом с именем views.py
и другим файлом с именем urls.py
. Файл urls.py
будет содержать такой код Python, как этот:
#
# Django 1.11 way
#
from django.contrib.auth import views as auth_views
from . import views as app_views
urlpatterns = [
url(r'^admin/', admin.site.urls),
url(r'^login/',
auth_views.LoginView.as_view(redirect_authenticated_user=True),
name='login'),
url(r'^dashboard/', app_views.Dashboard.as_view(), name='dashboard'),
url(r'^$', TemplateView.as_view(template_name='index.html'), name='index'),
]
Из этого файла релевантная часть в определении переменной urlpatterns
выглядит следующим образом, которая снова использует уже упомянутый параметр redirect_authenticated_user
со значением True
, но передает его в качестве аргумента методу as_view
LoginView
класса:
url(r'^login/',
auth_views.LoginView.as_view(redirect_authenticated_user=False),
name='login'),
Обратите внимание, что здесь значение по умолчанию для параметра redirect_authenticated_user
также равно False
.
Ссылки