我正在使用Django和Django Rest框架开始我的web项目。我希望我的用户名字段不区分大小写,因此我在网上搜索了如何实现它,找到了这个漂亮的博客:https://simpleisbetterthancomplex.com/tutorial/2017/02/06/how-to-implement-case-insensitive-username.html。他建议这样做:
from django.contrib.auth.models import AbstractUser, UserManager
class CustomUserManager(UserManager):
def get_by_natural_key(self, username):
case_insensitive_username_field = '{}__iexact'.format(self.model.USERNAME_FIELD)
return self.get(**{case_insensitive_username_field: username})
class CustomUser(AbstractUser):
objects = CustomUserManager()
为了型号.py你知道吗
但是当我写测试的时候,他们失败了,因为User.objects.get\u by \u自然\u键当我创建两个用户名相同但大小写不同的用户时,返回了两个user对象(例如:“aniket”和“aniket”)。你知道吗
所以,我通过了这个方法:
from django.contrib.auth.models import UserManager, AbstractUser
# Create your models here.
class CustomUserManager(UserManager):
def create_user(self, username, email=None, password=None, **extra_fields):
return super().create_user(username.lower(),email,password,**extra_fields)
def create_superuser(self, username, email, password, **extra_fields):
return super().create_superuser(username.lower(),email,password,**extra_fields)
def get_by_natural_key(self, username):
case_insensitive_username_field = '{}__iexact'.format(self.model.USERNAME_FIELD)
return self.get(**{case_insensitive_username_field: username})
class User(AbstractUser):
objects = CustomUserManager()
那么,这种方法是否符合要求?你知道吗
目前没有回答
相关问题 更多 >
编程相关推荐