Книга «Изучаем Python»



Pdf көрінісі
бет232/238
Дата07.01.2022
өлшемі7,86 Mb.
#18670
түріКнига
1   ...   228   229   230   231   232   233   234   235   ...   238
Рис. 19.5. Домашняя страница с персональным приветствием  

и ссылкой для выхода




Создание учетных записей пользователей    425

Страница регистрации

Теперь мы построим страницу для регистрации новых пользователей. Для этой 

цели мы используем класс Django 

UserCreationForm

, но напишем собственную 

функцию представления и шаблон.

URL-адрес регистрации

Следующий код предоставляет шаблон URL для страницы регистрации — также 

в файле 


users/urls .py

:

urls.py

...

urlpatterns = [



# Страница входа

...


    # Страница регистрации

    url(r'^register/$', views.register, name='register'),

]

Шаблон соответствует URL http://localhost:8000/users/register/ и отправляет за-



просы функции 

register()

, которую мы сейчас напишем.

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

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

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.   

        form = UserCreationForm()



    else:

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

        form = UserCreationForm(data=request.POST)



        

        if form.is_valid():



            new_user = form.save()

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



426    Глава 19  •  Учетные записи пользователей

            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

, не содержащий исходных 

данных . В случае ответа на запрос POST создается экземпляр 

UserCreationForm

основанный на отправленных данных . Мы проверяем, что данные верны ; 



в данном случае что имя пользователя содержит правильные символы, пароли 

совпадают, а пользователь не пытается вставить вредоносные конструкции в от-

правленные данные.

Если отправленные данные верны, мы вызываем метод 

save()

 формы для со-



хранения имени пользователя и хеша пароля в базе данных . Метод 

save()


 

возвращает только что созданный объект пользователя, который сохраняется 

в 

new_user


.

После того как информация пользователя будет сохранена, мы выполняем вход; 

этот процесс состоит из двух шагов: сначала вызывается функция 

authenticate()

 

с аргументом 



new_user.username

 и паролем . При регистрации пользователю 

предлагается ввести два совпадающих пароля; поскольку данные формы верны, 

мы знаем, что пароли совпадают, и можем использовать любой из них. В данном 

случае используется значение, связанное с ключом 

'password1'

 в данных POST 

формы. Если имя пользователя и пароль верны, метод возвращает проверенный 

объект пользователя, который сохраняется в 

authenticated_user

. Затем вызывает-

ся функция 

login()

 с объектами 

request

 и 


authenticated_user

 



, которая создает 

действительный сеанс для нового пользователя.

Наконец, пользователь перенаправляется на домашнюю страницу 

, где привет-



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

Шаблон регистрации

Шаблон страницы регистрации похож на шаблон страницы входа. Проследите 

за тем, чтобы он был сохранен в одном каталоге с 

login .html

:

register.html

{% extends "learning_logs/base.html" %}

{% block content %}

 

    {% csrf_token %}

    {{ form.as_p }}

        


   


Создание учетных записей пользователей    427

   

 

    


{% endblock content %}

Мы снова используем метод 

as_p

, чтобы инфраструктура Django могла правильно 



отобразить все поля формы, включая все сообщения об ошибках, если форма была 

заполнена неправильно.

Создание ссылки на страницу регистрации

Следующий шаг — добавление кода для вывода ссылки на страницу регистрации 

для любого пользователя, еще не выполнившего вход:

base.html

...


{% if user.is_authenticated %}

Hello, {{ user.username }}.

log out

{% else %}

    register -

log in


{% endif %}

...


Теперь пользователи, выполнившие вход, получат персональное приветствие 

и ссылку для выхода. Другие пользователи видят ссылку на страницу регистрации 

и ссылку для входа. Проверьте страницу регистрации, создав несколько учетных 

записей с разными именами пользователей.

В следующем разделе доступ к некоторым страницам будет ограничен, чтобы 

страницы были доступны только для зарегистрированных пользователей. Также 

необходимо позаботиться о том, чтобы каждая тема принадлежала конкретному 

пользователю.





Достарыңызбен бөлісу:
1   ...   228   229   230   231   232   233   234   235   ...   238




©emirsaba.org 2024
әкімшілігінің қараңыз

    Басты бет