Создаем страницы входа и выхода пользователей Django через базовый функционал


31 марта 2023


Выполнение входа и выхода в Django через базовый функционал

На любом сайте, где есть пользователи, так же существует функционал по работе с ними. Это может быть функционал по регистрации пользователей, входу и выходу из системы и процессу восстановления пароля. Каждый процесс так же может быть связан с идентификацией пользователя, аутентификацией и авторизацией.

Так как это базовый функционал, который нужен большинству сайтов, в Django уже есть простой способ реализовать это. В статье будет показано как можно реализовать страницы входа (login) и выхода (logout) пользователей для Django 4+. Для младших версий различия могут быть не существенными.

 

Тестовый проект

Последующие примеры показаны на следующем проекте:

django-admin startproject testproject
cd .\testproject\

В файле 'settings.py' указан путь до шаблонов:

TEMPLATES = [
        ...
        'DIRS': [BASE_DIR / 'templates'],
        ...
]

Путь до шаблонов Django в settings.py

Никакое приложение не нужно т.к. будет использоваться только urls.py, шаблоны и существующие классы.

Выполните миграцию для создания таблицы пользователей, а затем создайте самого пользователя.

python manage.py migrate
python manage.py createsuperuser

 

Изменение urls.py

Вьюшки, которые могут обрабатывать вход и выход пользователя, находятся по пути 'django.contrib.auth.views'. Нам нужны две конкретные вьюшки 'LoginView' и 'LogoutView'. Пример того, как вы можете реализовать их у себя.

from django.contrib import admin
from django.urls import path
from django.contrib.auth import views as auth_views

urlpatterns = [
    path('admin/', admin.site.urls),
    path('login/', auth_views.LoginView.as_view(), name='login'),
    path('logout/', auth_views.LogoutView.as_view(), name='logout'),
]

Используем вьюшки для входа (login) и выхода (logout) пользователей в Python Django

Если посмотреть вьюшку 'django.contrib.auth.views' подробнее, то можно увидеть и другие классы, которые вам так же могут понадобиться. Это может быть функционал регистрации пользователей, сброса пароля, ввода нового пароля и т.д. Если вам нужно реализовать весь подобный функционал, то вы можете просто выполнить 'include('django.contrib.auth.urls'))'. Например:

...
urlpatterns = [
    path('admin/', admin.site.urls),
    path('user/', include('django.contrib.auth.urls')),
]

 

Создание шаблонов

По умолчанию шаблоны для входа и выхода ищутся по следующим путям (тестовый проект использует папку 'templates' для шаблонов):

  • templates/registration/login.html
  • templates/registration/logout.html

Чаще всего шаблон "Logout" не создается т.к. нам не нужно отдельной страницы для уведомления пользователя о выходе. Мы просто отправляем его на главную страницу и завершаем его сессию.

Учитывая, что мы используем модули аутентификации самого Django, то можем взять и его шаблоны. Они находятся в папке фреймворка Django, т.е. примерно по следующему пути 'env\Lib\site-packages\django\contrib\admin\templates\registration'. Преимущество этого способа в том, что в нем есть и другие шаблоны (регистрация, восстановление пароля и т.д.).

Вы так же можете создать свой собственный шаблон, где будет типовой вывод формы.

  <h3>Вход</h3>
  <form method="post">
    {% csrf_token %}
    {{ form.as_p }}
    <button type="submit">Login</button>
  </form>
  <p><a href="{% url 'logout' %}">Выход</a></p>

Создание шаблона для входа пользователя в Django

 

Настройки переадресации

Успешный вход пользователя (идентификация, аутентификация, авторизация) обычно приводит к открытию какой-то страницы. Например - к открытию панели управления. По умолчанию переадресация идет на страницу "/accounts/profile/". Вы можете изменить страницу указав ее в переменной "LOGIN_REDIRECT_URL" в файле settings.py:

LOGIN_REDIRECT_URL = '/admin/'
# или ссылка на name из urls.py
LOGIN_REDIRECT_URL = 'admin'

Редирект для пользователей, которые выполнили вход в Django

В случае же успешного выхода, кроме завершения сессии, пользователь так же попадает на какую-то страницу. Эта страница указывается в параметрах вьюшки.

...
    path('logout/', auth_views.LogoutView.as_view(next_page='/'), name='logout'),
...

Вы можете переадресовать пользователя, который зашел на страницу 'login'. По умолчанию это не происходит. Для этого заполните параметр 'redirect_authenticated_user'.

...
    path('login/', auth_views.LoginView.as_view(redirect_authenticated_user=True), name='login'),
...

 

Использование других шаблонов

Вы можете изменить название файла и путь, который используется при поиске шаблонов для входа и выхода. Это делается так же в urls.py:

from django.contrib import admin
from django.urls import path, include
from django.contrib.auth import views as auth_views

urlpatterns = [
    path('admin/', admin.site.urls),
    path('login/', auth_views.LoginView.as_view('template_name': 'somepath/login.html'), name='login'),
    path('logout/', auth_views.LogoutView.as_view('template_name': 'somepath/logout.html'), name='logout'),
]

...

Теги: #python #django #аутентификация


Каналы
Telegram FixMyPc Telegram Лента FixMyPC RSS Rss
Популярные тэги
О блоге
Этот блог представляет собой конспекты выученного материала, приобретённого опыта и лучшие практики в системном администрировании и программировании.