0 added
0 removed
Original
2026-01-01
Modified
2026-03-10
1
<p>Теги: python, django, abstractuser, abstractbaseuser, authentication_backends, auth_user_model, custom</p>
1
<p>Теги: python, django, abstractuser, abstractbaseuser, authentication_backends, auth_user_model, custom</p>
2
<p>При работе с Django часто приходят задачи по изменению стандартного поведения юзера. В большинстве случаев, это заканчивается расширением полей, которое все привыкли делать через 1-1 и отказываются реализовывать по-другому. Но начиная с версии 1.7, Django предоставляет новые механизмы по работе с этим. Их два -<strong>AbstractUser</strong>и<strong>AbstractBaseUser</strong>.</p>
2
<p>При работе с Django часто приходят задачи по изменению стандартного поведения юзера. В большинстве случаев, это заканчивается расширением полей, которое все привыкли делать через 1-1 и отказываются реализовывать по-другому. Но начиная с версии 1.7, Django предоставляет новые механизмы по работе с этим. Их два -<strong>AbstractUser</strong>и<strong>AbstractBaseUser</strong>.</p>
3
<p><strong>AbstractUser</strong>поможет быстро добавить поля в<strong>custom</strong>пользователя.</p>
3
<p><strong>AbstractUser</strong>поможет быстро добавить поля в<strong>custom</strong>пользователя.</p>
4
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)<p>А редактирование<strong>AbstractBaseUser</strong>поможет изменить пользователя полностью. Например, отказаться от полей или отредактировать уникальный идентификатор. В идеале, это решение должно быть принято на старте проекта, так как оно существенно повлияет на схему базы данных.</p>
4
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)<p>А редактирование<strong>AbstractBaseUser</strong>поможет изменить пользователя полностью. Например, отказаться от полей или отредактировать уникальный идентификатор. В идеале, это решение должно быть принято на старте проекта, так как оно существенно повлияет на схему базы данных.</p>
5
class User(AbstractBaseUser): identifier = models.CharField(max_length=40, unique=True) ... USERNAME_FIELD = "identifier"<p>Не забывайте добавить в настройки нового юзера:</p>
5
class User(AbstractBaseUser): identifier = models.CharField(max_length=40, unique=True) ... USERNAME_FIELD = "identifier"<p>Не забывайте добавить в настройки нового юзера:</p>
6
AUTH_USER_MODEL = 'core.User'<p>А для изменения поведения при аутентификации можно использовать стандартные ручки.</p>
6
AUTH_USER_MODEL = 'core.User'<p>А для изменения поведения при аутентификации можно использовать стандартные ручки.</p>
7
AUTHENTICATION_BACKENDS = ['django.contrib.auth.backends.ModelBackend'] class MyBackend(object): def authenticate(self, request, username=None, password=None): # Проверим username/password и вернём user. ...<p>Вот такой простой способ изменения auth-работы с юзером.</p>
7
AUTHENTICATION_BACKENDS = ['django.contrib.auth.backends.ModelBackend'] class MyBackend(object): def authenticate(self, request, username=None, password=None): # Проверим username/password и вернём user. ...<p>Вот такой простой способ изменения auth-работы с юзером.</p>
8
<p><em>Есть вопрос? Напишите в комментариях!</em></p>
8
<p><em>Есть вопрос? Напишите в комментариях!</em></p>
9
9