Я недавно построил веб-сайт для одного из моих клиентов, используя READ + READ + REST + READ (которая прекрасна кстати) и столкнулась с проблемой.
Если кто-то из вас работал с отдыхом Django, вы узнаете множественные проблемы, которые всплывают, создавая пользовательскую модель пользователей, и, в частности, как изменения, которые вы делаете, не размышляют о сохранении.
Я покажу вам лучший путь (на мой взгляд), чтобы построить пользовательскую модель пользователей в DRF (Django Restand Framework), без имени пользователя.
Шаг 1
Создайте приложение, называемое пользователем (или все, что вы хотите вызвать его), а в моделях. My Make Model Model, которая расширяет абстрактныйBaseUser
from django.db import models from django.contrib.auth.models import AbstractBaseUser,BaseUserManager import datetime class User(AbstractBaseUser): username = None email = models.EmailField(_('email address'), unique=True) name = models.CharField(max_length=100) date_of_birth = models.DateField(default=datetime.date.today) USERNAME_FIELD = 'email' REQUIRED_FIELDS = [ 'date_of_birth','name' ] def __str__(self): # __unicode__ on Python 2 return self.email
Шаг 2
И теперь мы добавляем очень важно в модели
objects = UserManager()
Это в основном говорит Django, как он должен хранить объект и с какими атрибутами в зависимости от разрешений.
Шаг 3
Мы добавляем USERMANAGER
class UserManager(BaseUserManager): use_in_migrations = True def create_user(self, email, name, date_of_birth, password=None): user = self.model( email=self.normalize_email(email), date_of_birth=date_of_birth, name=name, ) user.set_password(password) user.save(using=self._db) return user def create_staffuser(self, email, name, date_of_birth, password): user = self.create_user( email, password=password, date_of_birth=date_of_birth, name=name, ) user.staff = True user.save(using=self._db) return user def create_superuser(self, email, name, date_of_birth, password): user = self.create_user( email, password=password, date_of_birth=date_of_birth, name= "True", ) user.staff = True user.admin = True user.save(using=self._db) return user
Шаг 4.
Построить пользовательский релегистрэриализатор
from rest_auth.registration.serializers import RegisterSerializer class CustomRegisterSerializer(RegisterSerializer): email = serializers.EmailField(required=True) password1 = serializers.CharField(write_only=True) name = serializers.CharField(required=True) date_of_birth = serializers.DateField(required=True) def get_cleaned_data(self): super(CustomRegisterSerializer, self).get_cleaned_data() return { 'password1': self.validated_data.get('password1', ''), 'email': self.validated_data.get('email', ''), 'name': self.validated_data.get('name', ''), 'date_of_birth': self.validated_data.get('date_of_birth', ''), } class CustomUserDetailsSerializer(serializers.ModelSerializer): class Meta: model = User fields = ('email','name','date_of_birth') read_only_fields = ('email',)
Создайте пользовательский вид, который просто имеет все объекты пользователя в качестве набора запросов
from rest_auth.registration.views import RegisterView class CustomRegisterView(RegisterView): queryset = User.objects.all()
Наконец обновите настройки .py, чтобы применить эти
ACCOUNT_USER_MODEL_USERNAME_FIELD = None ACCOUNT_AUTHENTICATION_METHOD = 'email' ACCOUNT_EMAIL_REQUIRED = True ACCOUNT_UNIQUE_EMAIL = True ACCOUNT_USERNAME_REQUIRED = False ACCOUNT_USER_EMAIL_FIELD = 'email' ACCOUNT_LOGOUT_ON_GET = True AUTH_USER_MODEL = 'users.User' REST_AUTH_SERIALIZERS = { "USER_DETAILS_SERIALIZER": "users.serializers.CustomUserDetailsSerializer", } REST_AUTH_REGISTER_SERIALIZERS = { "REGISTER_SERIALIZER": "users.serializers.CustomRegisterSerializer", }
И просто добавьте вид на URL, и вы хотите пойти!
Я искренне верю, что Stack read + REACT REACT – один из лучших в игре в игре, но Django Rest Framework требует немного больше работы, чтобы сделать его идеальным для большинства разработчиков.
Ударь меня, если вам нужна помощь! Или есть некоторые проекты, которые нуждаются в людей на работе с: D
Оригинал: “https://dev.to/callmetarush/the-django-rest-custom-user-model-and-authentication-5go9”