Django - как создать систему аутентификации с использованием пользовательских моделей - PullRequest
2 голосов
/ 13 апреля 2019

Система аутентификации django по умолчанию использует собственные модели аутентификации, но я создал свою собственную модель и хочу, чтобы процесс аутентификации происходил там

Моя модель:

class User(models.Model):
Nome = models.CharField(max_length=12)
Sobrenome = models.CharField(max_length=12)
Nickname = models.CharField(max_length=21,unique=True)
Email = models.CharField(max_length=40)
Password = models.CharField(max_length=20)
Created_Account_Date = models.DateTimeField(auto_now=False,auto_now_add=True)
Avatar = models.FileField(blank=True)
Number_Following = models.IntegerField(default=0,null=False)
Number_Followers = models.IntegerField(default=0,null=False)

def __str__(self):
    return "%s%s" %("@",self.Nickname)

Я хочу использовать его для аутентификации, а не по умолчанию в django

1 Ответ

1 голос
/ 13 апреля 2019

Обязательно посмотрите Настройка аутентификации в Django docs.

Но я постараюсь разбить это для вас. Вы можете следовать и добавить свои конкретные поля:

Во-первых, для создания пользовательской модели User вам необходимо наследовать от AbstractUser или AbstractBaseUser. Имейте в виду, что первый предоставляет больше функциональных возможностей, чем второй, а также требует меньше настроек. Так что, если вы не слишком знакомы с системой аутентификации Django, я советую вам наследовать от AbstractUser, чтобы избежать ненужной настройки.

Пример:

Допустим, вы хотите расширить стандартную модель пользователя и добавить EmailField.

#models.py 'users' app
from django.contrib.auth.models import AbstractUser
class CustomUser(AbstractUser):
    email = models.EmailField(unique=True)

Теперь нам нужно сообщить Django, что мы используем нашу новую модель CustomUser. поэтому в нашем файле настроек мы можем добавить:

#settings.py
AUTH_USER_MODEL = 'users.CustomUser'

Возможно, вы захотите, чтобы пользователи указывали адрес электронной почты при регистрации. Для этого вам также необходимо настроить UserCreationForm в нашем файле форм:

#forms.py
from users.models import CustomUser
from django.contrib.auth.forms import UserCreationForm
class CustomUserCreationForm(UserCreationForm):
    email = forms.EmailField(max_length=200)

    class Meta:
        model = CustomUser
        fields = ('username', 'email', 'password1', 'password2')

После этого вам нужно пойти дальше и зарегистрировать свою только что созданную модель CustomUser в своей admin.py.

Скорее всего, вам придется сделать кастом UserChangeForm. И, возможно, пользовательский сервер аутентификации (например, если вы хотите, чтобы пользователи входили по электронной почте). Но это, вероятно, заслуживает нового вопроса.

Я настоятельно рекомендую вам прочитать документацию по аутентификации Django (ссылка вверху). Это даст вам лучшее руководство для правильной настройки под ваши конкретные потребности.

В качестве альтернативы, если вы чувствуете, что в данный момент это слишком сложно, вы можете также рассмотреть возможность создания отдельной модели с необходимыми настраиваемыми полями и затем объявить OneToOneField для связи между стандартной моделью User и вашей новой моделью.

Удачи!

...