442 Глава 19 • Учетные записи пользователей
views.py from django.shortcuts import render, redirect
from django.contrib.auth import login
from django.contrib.auth.forms import UserCreationForm
def register(request):
"""Регистрирует нового пользователя."""
if request.method != 'POST':
# Выводит пустую форму регистрации.
❶
form = UserCreationForm()
else:
# Обработка заполненной формы.
❷
form = UserCreationForm(data=request.POST)
❸
if form.is_valid():
❹
new_user = form.save()
# Выполнение входа и перенаправление на домашнюю страницу.
❺
login(request, new_user)
❻
return redirect('learning_logs:index')
# Вывести пустую или недействительную форму.
context = {'form': form}
return render(request, 'users/register.html', context)
Сначала импортируются функции
render()
и
redirect()
. Затем мы импортируем
функцию
login()
для выполнения входа пользователя, если регистрационная
информация верна. Также импортируется класс
UserCreationForm
по умолча-
нию. В функции
register()
мы проверяем, отвечает ли функция на запрос POST.
Если нет, создается экземпляр
UserCreationForm
, не содержащий исходных
данных
.
В случае ответа на запрос POST создается экземпляр
UserCreationForm
, основан-
ный на отправленных данных
. Мы проверяем, что данные верны
; в данном
случае что имя пользователя содержит правильные символы, пароли совпадают,
а пользователь не пытается вставить вредоносные конструкции в отправленные
данные.
Если отправленные данные верны, мы вызываем метод
save()
формы для со-
хранения имени пользователя и хеша пароля в базе данных
. Метод
save()
возвращает только что созданный объект пользователя, который сохраняется
в
new_user
. После того как информация пользователя будет сохранена, мы вы-
полняем вход; этот процесс состоит из двух шагов: сначала вызывается функция
login()
с объектами
request
и
new_user
, которая создает действительный сеанс
для нового пользователя. Наконец, пользователь перенаправляется на домашнюю
страницу
, где приветствие в заголовке сообщает о том, что регистрация про-
шла успешно.
В конце функции строится страница, которая будет либо пустой формой, либо от-
правленной формой, содержащей недействительные данные.