В этой статье разберём как сделать в Django custom user model, или на русском кастомную модель пользователя.
Ещё можете посмотреть статью «Django регистрация через RestAPI», там соответственно вы узнаете как сделать регистрацию используя кастомного пользователя Django.
Django модель пользователя создание:
Для создания модели пользователей в Django, нужно создать приложение, для посмотрите статью «Быстрый старт Django», там вы узнает как всё сделать.
После переходим в папку приложения и там открываем файл «models.py», в нём хранятся все модели и вот что в нём пишем.
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 | from django.db import models # Подключаем работу с моделями # Подключаем классы для создания пользователей from django.contrib.auth.models import AbstractBaseUser, BaseUserManager, PermissionsMixin # Создаем класс менеджера пользователей class MyUserManager(BaseUserManager): # Создаём метод для создания пользователя def _create_user(self, email, username, password, **extra_fields): # Проверяем есть ли Email if not email: # Выводим сообщение в консоль raise ValueError("Вы не ввели Email") # Проверяем есть ли логин if not username: # Выводим сообщение в консоль raise ValueError("Вы не ввели Логин") # Делаем пользователя user = self.model( email=self.normalize_email(email), username=username, **extra_fields, ) # Сохраняем пароль user.set_password(password) # Сохраняем всё остальное user.save(using=self._db) # Возвращаем пользователя return user # Делаем метод для создание обычного пользователя def create_user(self, email, username, password): # Возвращаем нового созданного пользователя return self._create_user(email, username, password) # Делаем метод для создание админа сайта def create_superuser(self, email, username, password): # Возвращаем нового созданного админа return self._create_user(email, username, password, is_staff=True, is_superuser=True) |
В этой части кода мы пока только создаём специальный класс для создания новых пользователей, и наследуем его от класса BaseUserManager
, также подключаем все нужные библиотеки.
Внутри класса MyUserManage
, есть три метода, первый _create_user()
это базовый метод который отвечает за создании пользователя, мы потом его будем использовать в остальных методах.
В метод мы передаём параметры email
, username
, password
и **extra_fields
, последний пожалуй самый интересный, он нам пригодится при создание суперпользователя, для добавления дополнительных параметров.
Внутри него уже идёт две проверки, есть ли Email и имя у пользователя, если да, то делаем пользователя, потом сохраняем пароль через user.set_password()
, и сохраняем всего пользователя, возвращаем его.
Следующие метод нужен для создания обычного пользователя, внутри него мы используем метод созданный выше.
Потом делаем метод для создания суперпользователя, и там как раз добавляем дополнительные параметры, которые отвечают за права доступа.
В целом стоит сказать, что этот класс нам нужен только для создания админа, вот и всё.
После того как мы сделали это, можем приступить к созданию кастомной модели делаем это как и обычную модель, только наследуем его от двух других классов.
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 | # Создаём класс User class User(AbstractBaseUser, PermissionsMixin): id = models.AutoField(primary_key=True, unique=True) # Идентификатор username = models.CharField(max_length=50, unique=True) # Логин email = models.EmailField(max_length=100, unique=True) # Email is_active = models.BooleanField(default=True) # Статус активации is_staff = models.BooleanField(default=False) # Статус админа USERNAME_FIELD = 'email' # Идентификатор для обращения REQUIRED_FIELDS = ['username'] # Список имён полей для Superuser objects = MyUserManager() # Добавляем методы класса MyUserManager # Метод для отображения в админ панели def __str__(self): return self.email |
Как видите мы действительно наследуем от двух классов, вот они:
- AbstractBaseUser — Базовый класс пользователя;
- PermissionsMixin — Класс для прав доступа;
Внутри класса User
, мы делаем несколько свойств, вот их список:
- id — Идентификатор;
- username — Логин или имя пользователя;
- email — Электронная почта;
- is_active — Поле статуса активации пользователя;
- is_staff — Поле статуса админа;
Самое интересное на мой взгляд, это то, что для is_active
значение по умолчанию True
, это значит, что любой пользователь будет уже активирован по умолчанию, иначе надо будет делать подтверждение по email, но так как я делаю это на локальном сервере, у меня нет такой возможности.
После назначаем свойство USERNAME_FIELD
которое отвечает за обращение к модели и REQUIRED_FIELDS
, это список имён полей для суперпользователя.
Дальше добавляем методы из MyUserManager
и создаём метод для __str__()
, который отвечает за то, как будет отображаться в админ меню данные из модели.
В целом на этом всё закончилось, теперь сделает миграции, создайте админа и не много настрой не «admin.py» и всё, вот как это сделать.
Миuрации:
1 2 | python3 manage.py makemigrations python3 manage.py migrate |
Создание админа:
1 | python3 manage.py createsuperuser |
admin.py:
1 2 3 4 | from django.contrib import admin from .models import User admin.site.register(User) |
Теперь вы можете спокойно работать с кастомной моделью пользователей.
Вывод:
В этой статье вы прочитали как сделать на Django custom user model, или на русском кастомную модель пользователя, думаю было интересно.