Регистрация пользователей

Давайте создадим простое представление, чтобы разрешить регистрацию пользователей на нашем сайте. В начале необходимо создать форму, чтобы позволить пользователю ввести логин, его реальное имя и пароль. Измените файл forms.py, расположенный в каталоге приложения account, и добавьте в него следующий код:

from django.contrib.auth.models import User

class UserRegistrationForm(forms.ModelForm):
    password = forms.CharField(label='Password', widget=forms.PasswordInput)
    password2 = forms.CharField(label='Repeat password', widget=forms.PasswordInput)

    class Meta:
        model = User
        fields = ('username', 'first_name', 'email')

    def clean_password2(self):
        cd = self.cleaned_data
        if cd['password'] != cd['password2']:
            raise forms.ValidationError('Passwords don\'t match.')
        return cd['password2']

Мы создали модель form для модели User. В нашей форме мы включаем только поля username, first_name и email. Эти поля будут проверены на основе соответствующих полей модели. Например, если пользователь выбирает имя пользователя, которое уже существует, он получит ошибку проверки. Мы добавили два дополнительных поля password и password2, чтобы пользователь установил свой пароль и подтвердит его. Мы определили метод clean_password2() для проверки совпадения password с password2. Эта проверка выполняется при проверке формы, вызывающей ее метод is_valid(). Можно предоставить clean_<fieldname>() для любого из полей формы, чтобы очистить значение или вызвать ошибки проверки формы для конкретного поля. Формы также включают общий метод clean() для проверки всей формы, что полезно для проверки полей, зависящих друг от друга.

Джанго также предоставляет форму UserCreationForm, которую можно использовать, которая находится в django.contrib.auth.forms и очень похожа на созданные нами формы.

Отредактируйте файл views.py приложения account и добавьте в него следующий код:

from .forms import LoginForm, UserRegistrationForm

def register(request):
    if request.method == 'POST':
        user_form = UserRegistrationForm(request.POST)
        if user_form.is_valid():
            # Create a new user object but avoid saving it yet
            new_user = user_form.save(commit=False)
            # Set the chosen password
            new_user.set_password(user_form.cleaned_data['password'])
            # Save the User object
            new_user.save()
            return render(request, 'account/register_done.html', {'new_user': new_user})
    else:
        user_form = UserRegistrationForm()
    return render(request, 'account/register.html', {'user_form': user_form})

Представление для создания учетных записей пользователей является довольно простым. Вместо сохранения необработанного пароля, введенного пользователем, мы используем метод set_password() модели User, обрабатывающей шифрование для сохранения безопасности.

Теперь отредактируйте файл urls.py приложения account и вставьте следующий url-шаблон:

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

И наконец создайте шаблон register.html в каталоге шаблонов account/ и добавьте в него следующий код:

{% extends "base.html" %}

{% block title %}Create an account{% endblock %}

{% block content %}
    <h1>Create an account</h1>
    <p>Please, sign up using the following form:</p>
    <form action="." method="post">
        {{ user_form.as_p }}
        {% csrf_token %}
        <p><input type="submit" value="Create my account"></p>
    </form>
{% endblock %}

Добавьте еще один шаблон в ту же директорию и назовите его register_done.html:

{% extends "base.html" %}

{% block title %}Welcome{% endblock %}

{% block content %}
    <h1>Welcome {{ new_user.first_name }}!</h1>
    <p>Your account has been successfully created. Now you can <a href="{% url "login" %}">log in</a>.</p>
{% endblock %}

Откройте в браузере страницу http://127.0.0.1:8000/account/register/ . Вы должны увидеть страницу регистрации:

Заполните все поля и нажмите на кнопку Create my account. Если все поля пройдут валидацию вы увидите сообщение об удачной регистрации пользователя:

Нажмите на ссылку log in и войдите под именем нового пользователя, чтобы убедиться в работоспособности нашего приложения.

Теперь мы можем добавить кнопку регистрации в шаблон входа на сайт. Измените шаблон registration/login.html и замените эту строку:

<p>Please, use the following form to log-in:</p>

...на эту:

<p>Please, use the following form to log-in. If you don't have an account <a href="{% url "register" %}">register here</a></p>

Мы сделали страницу регистрации доступной со страницы входа.

results matching ""

    No results matching ""