微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

尝试在 django-allauth 框架中使用自定义用户模型

如何解决尝试在 django-allauth 框架中使用自定义用户模型

我有一个像这样的自定义用户模型

from django.db import models
from django.contrib.auth.models import AbstractUser
from django.contrib.auth.base_user import BaseUserManager


# user manager code
class MyUserManager(BaseUserManager):
    def create_user(self,email,password=None,**extra_fields):
        """
        Creates and saves a User with the given email,first name,last name and password.
        """
        if not email:
            raise ValueError("Users must have an email address")

        user = self.model(
            email=self.normalize_email(email),**extra_fields,)

        user.set_password(password)
        user.save(using=self._db)
        return user

# Create your models here.


class CustomUser(AbstractUser):

    email = models.EmailField(unique=True)

    objects = MyUserManager()

    USERNAME_FIELD = 'email'
    required_FIELDS = ['first_name','last_name']

    def __str__(self):
        return self.email

我的序列化程序.py

class RegisteSerializer(serializers.Serializer):

    password = serializers.CharField(style={"input_type": "password"},write_only=True)
    password2 = serializers.CharField(style={"input_type": "password"},write_only=True)
    email = serializers.EmailField(required=allauth_settings.EMAIL_required)
    first_name = serializers.CharField(min_length=2,max_length=50)
    last_name = serializers.CharField(min_length=2,max_length=50)
    USERNAME_FIELD = 'email'

    class Meta:
        model = User
        fields = [
            'id','first_name','last_name',"email","password","password2",]

        extra_kwargs = {'password': {'write_only': True}}

    def validate_email(self,email):
        email = get_adapter().clean_email(email)
        if allauth_settings.UNIQUE_EMAIL:
            if email and email_address_exists(email):
                raise serializers.ValidationError(
                    ("A user is already registered with this e-mail address."))
        return email

    def validate_password(self,password):
        return get_adapter().clean_password(password)

    def validate(self,data):
        if data['password'] != data['password2']:
            raise serializers.ValidationError(
                ("The two password fields didn't match."))
        return data

    def get_cleaned_data(self):
        return {
            'first_name': self.validated_data.get('first_name',''),'last_name': self.validated_data.get('last_name','password': self.validated_data.get('password','password2': self.validated_data.get('password','email': self.validated_data.get('email',}

    def save(self,request):
        adapter = get_adapter()
        user = adapter.new_user(request)
        self.cleaned_data = self.get_cleaned_data()
        adapter.save_user(request,user,self)
        setup_user_email(request,[])
        user.save()
        return user

当我使用端点 http://127.0.0.1:8000/api/dj-rest-auth/registration/ 注册时 我以我想要的方式迎接所有领域

但是当我尝试登录 http://127.0.0.1:8000/api/dj-rest-auth/login/ 我仍然看到用户名

即使在配置了我的 django allauth 之后

# django-allauth configuarations

ACCOUNT_UNIQUE_EMAIL = True
ACCOUNT_USER_MODEL_USERNAME_FIELD = None
ACCOUNT_EMAIL_required = True
ACCOUNT_USERNAME_required = False
ACCOUNT_AUTHENTICATION_METHOD = 'email'
ACCOUNT_SIGNUP_PASSWORD_ENTER_TWICE = True

我是 django rest 框架的新手,我不想重写我什至不知道如何重写的所有内容

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。