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