Создание суперпользователя
Создайте суперпользователя, выполнив следующую команду:
python manage.py createsuperuser
Вам должно быть предложено ввести адрес электронной почты и пароль:
Как вы можете видеть выше, уникальным идентификатором является адрес электронной почты вместо имени пользователя по умолчанию, предоставленного Django. И если мы откроем наши записи в БД, мы увидим следующую строку в таблице пользователей:
Создание пользовательской формы
Следующим шагом является преобразование пользовательской модели в форму Django.
Django предоставляет класс ModelForm, который используется для прямого преобразования модели в форму Django. Создайте файл forms.py и добавьте следующий код:
from django import forms
from django.core.exceptions import ValidationError
from .models import User
class UserCreationForm(forms.ModelForm):
password1 = forms.CharField(label='Password', widget=forms.PasswordInput)
password2 = forms.CharField(label='Enter Password Again', widget=forms.PasswordInput)
class Meta:
model = User
fields = ('email', 'phone_number')
def clean_password2(self):
# Убедимся, что две записи пароля совпадают
password1 = self.cleaned_data.get("password1")
password2 = self.cleaned_data.get("password2")
if password1 and password2 and password1 != password2:
raise ValidationError("Passwords don't match")
return password2
def save(self, commit=True):
# Сохраним предоставленный пароль в хэшированном формате
user = super().save(commit=False)
user.set_password(self.cleaned_data["password1"])
if commit:
user.save()
return user
Здесь мы сначала начинаем с создания формы создания пользователя, проверяем, совпадают ли пароли, и хешируем предоставленный пароль.
Регистрация формы в Django Admin
Откройте admin.py и добавьте код:
from django.contrib import admin
from django.contrib.auth.admin import UserAdmin
from .forms import UserCreationForm
from .models import User
class CustomUserAdmin(UserAdmin):
add_form = UserCreationForm
list_display = ('email', 'phone_number', 'is_admin')
list_filter = ('is_admin',)
fieldsets = (
(None, {'fields': ('email', 'password')}),
('Permissions', {'fields': ('is_admin',)}),
)
add_fieldsets = (
(None, {
'classes': ('wide',),
'fields': ('email', 'password1', 'password2', 'phone_number'),
}),
)
ordering = ('email',)
filter_horizontal = ()
admin.site.register(User, CustomUserAdmin)
list_display- определяет поля, используемые для создания нового пользователяlist_filter- определяет критерии фильтрации
Запустите сервер разработки:
python manage.py runserver
Перейдите на сайт администратора (http://127.0.0.1:8000/admin/), мы видим, что Django у нас требует Email и пароль:
Войдите в систему с учетными данными суперпользователя и в следующем шаге попробуем приступить к добавлению новых пользователей. Попробуем создать нового пользователя, мы видим те поля, которые добавили для нашего пользователя:
Нажав SAVE мы успешно создадим пользователя.
Попробуем создать пользователя с не правильным форматом телефонного номера, чтобы проверить работу нашего валидатора:
Как мы видим все прекрасно работает.
В этом проекте мы не будем создавать страницы регистрации, профиля и другие пользовательские страницы. Данные возможности мы рассмотрели в предыдущем курсе при добавлении стандартной пользовательской системы в Django.