Рубрики
Без рубрики

Пользовательская модель пользовательских пользовательских и аутентификация Django Ress

Небольшое руководство по созданию пользовательской аутентификации пользователя с Django. Теги с Джанго, Питоном, отдыхом Джанго.

Я недавно построил веб-сайт для одного из моих клиентов, используя 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”