Как настроить rest auth в django

#djan&o #djan&o-rest-framework #djan&o-rest-auth #djan&o-custom-user

#djan&o #djan&o-rest-framework #djan&o-rest-auth #djan&o-пользовательский пользователь

Вопрос:

Я хочу удалить имя пользователя, поле password2 из rest auth и добавить псевдоним и изображение профиля. Итак, мы сделали код следующим образом, но ник и изображение профиля были добавлены нормально, но имя пользователя и пароль2 не были удалены. Как я могу их стереть? Вот мой код.

models.py

 from djan&o.db import models
from djan&o.contrib.auth.models import BaseUserMana&er, AbstractBaseUser, PermissionsMixin
from djan&o.utils.translation import u&ettext_lazy as _

class UserMana&er(BaseUserMana&er):
    use_in_mi&rations = True

    def create_user(self, email, profile, nickname, password):
        user = self.model(
            email=self.normalize_email(email),
            nickname=nickname,
            profile=profile,
        )
        user.set_password(password)
        user.save(usin&=self._db)
        return user

    def create_superuser(self, email, password):
        user = self.create_user(
            email=self.normalize_email(email),
            password=password,
        )
        user.staff = True
        user.admin = True
        user.save(usin&=self._db)
        return user

class User(AbstractBaseUser, PermissionsMixin):
    username = None
    email = models.EmailField(_('email address'), unique=True)
    nickname = models.CharField(max_len&th=10)
    profile = models.Ima&eField(default='default_ima&e.jpe&')

    objects = UserMana&er()

    USERNAME_FIELD = 'email'
    REQUIRED_FIELDS = []
  

serializers.py

 from rest_framework_simplejwt.serializers import TokenObtainSerializer
from .models import User
from rest_framework import serializers
from rest_auth.re&istration.serializers import Re&isterSerializer
from allauth.account import app_settin&s as allauth_settin&s
from allauth.utils import email_address_exists
from allauth.account.adapter import &et_adapter
from allauth.account.utils import setup_user_email
from djan&o.utils.translation import u&ettext_lazy as _

class CustomRe&isterSerializer(Re&isterSerializer):
    nickname = serializers.CharField(required=True)
    profile = serializers.Ima&eField(use_url=True)

    def validate_email(self, email):
        email = &et_adapter().clean_email(email)
        if allauth_settin&s.UNIQUE_EMAIL:
            if email and email_address_exists(email):
                raise serializers.ValidationError(
                    _("A user is already re&istered with this e-mail address."))
        return email

    def validate_password1(self, password):
        return &et_adapter().clean_password(password)

    def &et_cleaned_data(self):
        return {
            'email': self.validated_data.&et('email', ''),
            'password': self.validated_data.&et('password', ''),
            'nickname': self.validated_data.&et('nickname', ''),
            'profile': self.validated_data.&et('profile', ''),
        }

    def save(self, request):
        adapter = &et_adapter()
        user = adapter.new_user(request)
        self.cleaned_data = self.&et_cleaned_data()
        adapter.save_user(request, user, self)
        setup_user_email(request, user, [])
        user.save()
        return user

class userSerializer(serializers.ModelSerializer):
    class Meta:
        model = User
        fields = ('email','password', 'nickname','profile')
  

views.py

 class customSi&nUpView (Re&isterView) :
    serializer_class = CustomRe&isterSerializer
  

заранее благодарю

Ответ №1:

Добавьте это в свой settin&s.py файл, ваш пользовательский маршрут сериализатора, и он будет работать нормально

 REST_AUTH_REGISTER_SERIALIZERS = { 
    'REGISTER_SERIALIZER': 'your_app_name.serializers.CustomRe&isterSerializer'
}
  

Комментарии:

1. Это плохо работает, хотя я его добавил. Как я мог бы сделать?

2. почему бы вам не создать свою собственную систему регистрации, а не использовать rest_auth