Настройка библиотеки django-allauth, часть 2
В этой части я расскажу и покажу, как делал страницу регистрации с применением библиотеки django-allauth. В первой части я писал о настройки страницы авторизации, если вы еще не посмотрели, то можете это сделать прямо сейчас перейдя по этой ссылке.
В принципе здесь все тоже самое, что и при авторизации. Сначала нужно перенести html код формы регистрации библиотеки в свою форму. Затем в forms.py я добавил несколько полей, это имя и фамлия пользователя и сделал их по умолчанию не обязательными полями. И в settings.py в словарь добавил свой класс формы.
Внедряем этот код в свой шаблон регистрации
{% extends "account/base.html" %}
{% load i18n %}
{% block head_title %}{% trans "Signup" %}{% endblock %}
{% block content %}
<h1>{% trans "Sign Up" %}</h1>
<p>{% blocktrans %}Already have an account? Then please <a href="{{ login_url }}">sign in</a>.{% endblocktrans %}</p>
<form class="signup" id="signup_form" method="post" action="{% url 'account_signup' %}">
{% csrf_token %}
{{ form.as_p }}
{% if redirect_field_value %}
<input type="hidden" name="{{ redirect_field_name }}" value="{{ redirect_field_value }}" />
{% endif %}
<button type="submit">{% trans "Sign Up" %} »</button>
</form>
{% endblock %}
Далее в forms.py я создал класс SignUp с двуми доп.полями + капча и насдуемся как вы заметили уже от класса SignupForm
class SignUp(SignupForm):
'''Добавление своих полей в форму регистрации'''
captcha = CaptchaField(label='Are you an human? ', )
first_name = forms.CharField(max_length=30, label='First Name', required=False)
last_name = forms.CharField(max_length=30, label='Last Name', required=False)
def signup(self, request, user):
'''Сохранение в базу данных'''
user.first_name = self.cleaned_data['first_name']
user.last_name = self.cleaned_data['last_name']
user.save()
return user
Тут нужно обязательно написать метод, который будет сохранять в базу данных значения полей которые пользователь заполнит. Если сохранять не нужно в бд данные, то этот метод не нужен.
Переходим в settings.py и в словарь ACCOUNT_FORMS добавляем путь до нашего класса
ACCOUNT_FORMS = {
'login': 'profiles.forms.SignIn',
'signup': 'profiles.forms.SignUp',
}
Теперь перейдем в наш шаблон формы регистрации. У меня он выглядит так
Весь код его я приводить не буду, акцентиррую внимание только на основном.
Здесь вывод полей я делал по тому же принципу что и в авторизации. Открывал в браузере консоль, наводил курсор на нужное поле и смотрел его name и id. Ошибки выводил не много по другому для каждогополя выводил отдельно.
Пример части моего кода шаблона регистрации.
<form id="loginform" class="form-horizontal" role="form" method="post" action="{% url 'account_signup' %}" >
{% csrf_token %}
<div class="row">
<div class="col-xs-12 col-sm-12 col-md-12">
<p>Логин <sup>*</sup></p>
<!-- Вывод ошибок о неверно заполненом поле -->
{{ form.non_field_errors }}
<div class="fieldWrapper">
{% if form.username.errors %}
<div class="alert alert-warning">{{ form.username.errors }}</div>
{% endif %}
<div style="margin-bottom: 25px" class="input-group">
<span class="input-group-addon"><i class="glyphicon glyphicon-user"></i></span>
<input value="{{ form.username.value|default:'' }}" type="text" name="username" id="id_username" class="form-control input-lg" placeholder="Login*" tabindex="1" required>
</div>
</div>
</div>
</div>
<div class="row">
<div class="col-xs-12 col-sm-6 col-md-6">
<p>Имя <sup></sup></p>
<div style="margin-bottom: 25px" class="input-group">
<span class="input-group-addon"><i class="glyphicon glyphicon-user"></i></span>
<input type="text" name="first_name" id="id_firstname" class="form-control input-lg" placeholder="First Name" tabindex="1">
</div>
</div>
<div class="col-xs-12 col-sm-6 col-md-6">
<p>Фамилия <sup></sup></p>
<div style="margin-bottom: 25px" class="input-group">
<span class="input-group-addon"><i class="glyphicon glyphicon-user"></i></span>
<input type="text" name="last_name" id="id_lastname" class="form-control input-lg" placeholder="Last Name" tabindex="2">
</div>
</div>
</div>
<p>e-mail <sup>*</sup></p>
<!-- Вывод ошибок о неверно заполненом поле -->
<div class="fieldWrapper">
{% if form.email.errors %}
<div class="alert alert-warning">{{ form.email.errors }}</div>
{% endif %}
<div style="margin-bottom: 25px" class="input-group">
<span class="input-group-addon"><i class="glyphicon glyphicon-envelope"></i></span>
<input value="{{ form.email.value|default:'' }}" id="id_email" type="email" class="form-control" name="email" value="" placeholder="e-mail*" required>
</div>
</div>
</form>
Результат если пользователь ввел данные в поля с ошибками будет такой.
В принципе это все. Я добился того, что при регисрации и авторизации у меня выводятся сообщения об ошибках и пользователь понимает что нужно исправить.
Еще в settings.py из документации библиотеки я добавил некоторые настройки
# django-allauth
ACCOUNT_EMAIL_CONFIRMATION_EXPIRE_DAYS = 5 # Определяет срок действия писем с подтверждением по электронной почте
ACCOUNT_AUTHENTICATION_METHOD = 'username_email' # Вход на сайт по логину и почте
ACCOUNT_EMAIL_VERIFICATION = 'mandatory' # Когда установлено «mandatory», пользователь блокируется от входа, пока адрес электронной почты не будет подтвержден.
ACCOUNT_LOGIN_ATTEMPTS_LIMIT = 2 # Количество попыток не удачного ввода логина и пароля. После пользователь блокируется.
ACCOUNT_LOGIN_ATTEMPTS_TIMEOUT = 300 # Время блокировки пользователя в секундах после количества не удачного ввода логина и пароля.
ACCOUNT_EMAIL_REQUIRED = True
LOGIN_REDIRECT_URL = '/accounts/profile/' # редирект после успешной авторизации
LOGIN_URL = '/accounts/login/'
На этом все.
Ваши комментарии
Комментарии могут оставлять только зарегистрированые пользователи!