Какие знаешь варианты определения модели пользователя в Django
Python
Middle
Без компании
Какие знаешь варианты определения модели пользователя в Django
Ответы
В Django модель пользователя можно определить несколькими способами:
- **Использование встроенной модели `User`**
Стандартная модель из `django.contrib.auth.models`. Подходит для базовых случаев, но не расширяема.
```
from django.contrib.auth.models import User
```
- **Расширение `AbstractUser`**
Позволяет добавить свои поля, сохраняя стандартные. Требует указания `AUTH_USER_MODEL` в settings.py.
```
from django.contrib.auth.models import AbstractUser
class CustomUser(AbstractUser):
phone = models.CharField(max_length=20)
```
- **Расширение `AbstractBaseUser`**
Полная кастомизация, включая замену стандартных полей (например, email вместо username).
```
from django.contrib.auth.models import AbstractBaseUser, BaseUserManager
class MyUserManager(BaseUserManager):
def create_user(self, email, password=None):
# логика создания
pass
class MyUser(AbstractBaseUser):
email = models.EmailField(unique=True)
is_active = models.BooleanField(default=True)
objects = MyUserManager()
USERNAME_FIELD = 'email'
```
- **Связь OneToOne с `User`**
Дополнительная модель для хранения данных, если не нужно менять аутентификацию.
```
from django.contrib.auth.models import User
class Profile(models.Model):
user = models.OneToOneField(User, on_delete=models.CASCADE)
bio = models.TextField()
```