Функция представления register()

We use cookies. Read the Privacy and Cookie Policy

Функция представления register() должна вывести пустую форму регистрации при первом запросе страницы регистрации, а затем обрабатывает заполненную форму регистрации при отправке данных. Если регистрация прошла успешно, функция также должна выполнить вход для нового пользователя. Включите следующий код в users/views.py:

views.py

from django.shortcuts import render

from django.http import HttpResponseRedirect

from django.core.urlresolvers import reverse

from django.contrib.auth import login, logout, authenticate

from django.contrib.auth.forms import UserCreationForm

def logout_view(request):

...

def register(request):

. ."""Регистрирует нового пользователя."""

. .if request.method != 'POST':

. . . .# Display blank registration form.

(1) . . . .form = UserCreationForm()

. .else:

. . . .# Обработка заполненной формы.

(2) . . . .form = UserCreationForm(data=request.POST)

. . . .

(3) . . . .if form.is_valid():

(4) . . . . . .new_user = form.save()

. . . . . .# Выполнение входа и перенаправление на домашнюю страницу.

(5) . . . . . .authenticated_user = authenticate(username=new_user.username,

. . . . . . . .password=request.POST['password1'])

? . . . . . .login(request, authenticated_user)

? . . . . . .return HttpResponseRedirect(reverse('learning_logs:index'))

. .context = {'form': form}

. .return render(request, 'users/register.html', context)

Сначала импортируется функция render(), после чего импортируются функции login() и authenticate() для выполнения входа пользователя, если регистрационная информация верна. Также импортируется класс UserCreationForm по умол­чанию. В функции register() мы проверяем, отвечает ли функция на запрос POST. Если нет, создается экземпляр UserCreationForm, не содержащий исходных данных (1) . В случае ответа на запрос POST создается экземпляр UserCreationForm, основанный на отправленных данных (2). Мы проверяем, что данные верны (3); в данном случае что имя пользователя содержит правильные символы, пароли совпадают, а пользователь не пытается вставить вредоносные конструкции в отправленные данные.

Если отправленные данные верны, мы вызываем метод save() формы для сохранения имени пользователя и хеша пароля в базе данных (4). Метод save() возвращает только что созданный объект пользователя, который сохраняется в new_user.

После того как информация пользователя будет сохранена, мы выполняем вход; этот процесс состоит из двух шагов: сначала вызывается функция authenticate() с аргументом new_user.username и паролем (5). При регистрации пользователю предлагается ввести два совпадающих пароля; поскольку данные формы верны, мы знаем, что пароли совпадают, и можем использовать любой из них. В данном случае используется значение, связанное с ключом 'password1' в данных POST формы. Если имя пользователя и пароль верны, метод возвращает проверенный объект пользователя, который сохраняется в authenticated_user. Затем вызывается функция login() с объектами request и authenticated_user ?, которая создает действительный сеанс для нового пользователя.

Наконец, пользователь перенаправляется на домашнюю страницу ?, где приветствие в заголовке сообщает о том, что регистрация прошла успешно.