Редактируем User-модель в Django с помощью класса AbstractUser | OTUS

Курсы

Программирование
iOS Developer. Basic
-23%
Python Developer. Professional
-13%
Golang Developer. Professional
-17%
Python Developer. Basic
-16%
iOS Developer. Professional
-13%
C# ASP.NET Core разработчик
-18%
Unity Game Developer. Professional
-11%
React.js Developer
-12%
Android Developer. Professional
-7%
Software Architect
-12%
C++ Developer. Professional
-8%
Разработчик C#
-8%
Backend-разработчик на PHP
-8%
Архитектура и шаблоны проектирования
-12%
Программист С Разработчик на Spring Framework MS SQL Server Developer AWS для разработчиков Cloud Solution Architecture Разработчик голосовых ассистентов и чат-ботов Vue.js разработчик VOIP инженер Нереляционные базы данных Супер - интенсив по паттернам проектирования Супер-практикум по использованию и настройке GIT IoT-разработчик Advanced Fullstack JavaScript developer Супер-интенсив Azure
Инфраструктура
Мониторинг и логирование: Zabbix, Prometheus, ELK
-17%
DevOps практики и инструменты
-18%
Архитектор сетей
-21%
Инфраструктурная платформа на основе Kubernetes
-22%
Супер-интенсив «IaC Ansible»
-16%
Супер-интенсив по управлению миграциями (DBVC)
-16%
Administrator Linux. Professional
-5%
Administrator Linux.Basic
-10%
Супер-интенсив «ELK»
-10%
Базы данных Сетевой инженер AWS для разработчиков Cloud Solution Architecture Разработчик голосовых ассистентов и чат-ботов Внедрение и работа в DevSecOps Супер-практикум по работе с протоколом BGP Супер - интенсив по паттернам проектирования Супер - интенсив по Kubernetes Супер-интенсив «СУБД в высоконагруженных системах»
Специализации Курсы в разработке Подготовительные курсы
+7 499 938-92-02

Редактируем User-модель в Django с помощью класса AbstractUser

Python_Deep_14.08_SIte.png

При работе с Django часто приходят задачи по изменению стандартного поведения юзера. В большинстве случаев, это заканчивается расширением полей, которое все привыкли делать через 1-1 и отказываются реализовывать по-другому. Но начиная с версии 1.7, Django предоставляет новые механизмы по работе с этим. Их два – AbstractUser и AbstractBaseUser.

AbstractUser поможет быстро добавить поля в custom пользователя.

from django.contrib.auth.models import AbstractUser

class User(AbstractUser):
    bio = models.TextField(max_length=500, blank=True)
    location = models.CharField(max_length=30, blank=True)
    birth_date = models.DateField(null=True, blank=True)

А редактирование AbstractBaseUser поможет изменить пользователя полностью. Например, отказаться от полей или отредактировать уникальный идентификатор. В идеале, это решение должно быть принято на старте проекта, так как оно существенно повлияет на схему базы данных.

class User(AbstractBaseUser):
    identifier = models.CharField(max_length=40, unique=True)
    ...
    USERNAME_FIELD = "identifier"

Не забывайте добавить в настройки нового юзера:

AUTH_USER_MODEL = 'core.User'

А для изменения поведения при аутентификации можно использовать стандартные ручки.

AUTHENTICATION_BACKENDS = ['django.contrib.auth.backends.ModelBackend']

class MyBackend(object):
    def authenticate(self, request, username=None, password=None):
        # Проверим username/password и вернём user.
        ...

Вот такой простой способ изменения auth-работы с юзером.

Есть вопрос? Напишите в комментариях!

Не пропустите новые полезные статьи!

Спасибо за подписку!

Мы отправили вам письмо для подтверждения вашего email.
С уважением, OTUS!

Автор
2 комментария
2

Забыли упомянуть, что после первой миграции прийдется выкручиваться через UserProfile (one-to-one к User Model) или Proxy Model к User Model

0

Всегда можно извернуться с fake-миграциями

Для комментирования необходимо авторизоваться