#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