Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/336.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python 在用户登录期间,如何使我的用户字段不区分大小写?_Python_Django_Django Rest Framework - Fatal编程技术网

Python 在用户登录期间,如何使我的用户字段不区分大小写?

Python 在用户登录期间,如何使我的用户字段不区分大小写?,python,django,django-rest-framework,Python,Django,Django Rest Framework,我想使我的用户登录字段仅对用户名和电子邮件不区分大小写。我把它应用到我的模型中,但后来我意识到我应该保持数据的真实性。如何将不区分大小写应用于上述两个字段 views.py class CustomUserCreate(APIView): permission_classes = [AllowAny] def post(self, request, format='json'): serializer = CustomUserSerializer(data=re

我想使我的用户登录字段仅对
用户名
电子邮件
不区分大小写。我把它应用到我的模型中,但后来我意识到我应该保持数据的真实性。如何将不区分大小写应用于上述两个字段

views.py

class CustomUserCreate(APIView):
    permission_classes = [AllowAny]

    def post(self, request, format='json'):
        serializer = CustomUserSerializer(data=request.data)
        if serializer.is_valid():
            user = serializer.save()
            if user:
                json = serializer.data
                return Response(json, status=status.HTTP_201_CREATED)
        return Response(serializer.errors, status=status.HTTP_400_BAD_REQUEST)

序列化程序.py

class CustomUserSerializer(serializers.ModelSerializer):
    email = serializers.EmailField(required=True)
    username = serializers.CharField(required=True)
    password = serializers.CharField(min_length=8, write_only=True)
    first_name = serializers.CharField(max_length=30)
    last_name = serializers.CharField(max_length=30)
    subscribed = serializers.BooleanField(default=False)


    class Meta:
        model = User
        fields = ('email', 'username', 'password','first_name','last_name','subscribed')
        extra_kwargs = {'password': {'write_only': True}}

    def create(self, validated_data):
        password = validated_data.pop('password', None)
        instance = self.Meta.model(**validated_data)
        if password is not None:
            instance.set_password(password)
        instance.save()
        return instance
model.py:

class User(AbstractBaseUser, PermissionsMixin):

    email = models.EmailField(_('email address'), unique=True)
    username = models.CharField(max_length=150, unique=True)
    first_name = models.CharField(max_length=150, blank=True)
    last_name = models.CharField(max_length=150, blank=True)
    start_date = models.DateTimeField(default=timezone.now)
    subscribed = models.BooleanField(default=False)
    is_active = models.BooleanField(default=True)
    is_staff = models.BooleanField(default=False)

    objects = CustomAccountManager()


    USERNAME_FIELD = 'email'
    REQUIRED_FIELDS = ['username', 'first_name', 'last_name','password']

    def __str__(self):
        return self.username

谢谢您的指导

您可以在valiator中使用
\uuuuiExact
查找,例如:

def validate(self, data):
    if User.objects.filter(username__iexact=data['username']).exists():
        raise serializers.ValidationError("User already exists")
    return data

您可能想使用
self.Meta.model
而不是硬编码
User

然后我意识到我应该保持数据的原样和真实性:我可以问一下为什么吗?一些用户可能更喜欢在他们的
用户名
电子邮件
中的某些字符使用特定的大写字母(电子邮件可能没有这么多)。对于这种情况,我更希望用户验证不区分大小写@莱米诺