python - Django CustomUserModel 电子邮件字段区分大小写
问题描述
Django(3.0)自定义用户模型中的电子邮件字段区分大小写,我尝试了各种方法使其不区分大小写,但到目前为止没有成功。
代码
表格.py
class UserCreationForm(UserCreationForm):
class Meta:
model = User
fields = ('first_name','last_name','username','email','password1','password2')
class UserChangeForm(UserChangeForm):
class Meta:
model = User
fields = ('first_name','last_name','username','email',)
class UserUpdateForm(forms.ModelForm):
'''
model form are the form that work with specific user model
'''
class Meta:
model = User
fields = ('first_name','last_name','username','email',)
class ProfileUpdateForm(forms.ModelForm):
'''
model form are the form that work with specific user model
'''
class Meta:
model = Profile
fields = ['image']
管理器.py
class UserManager(BaseUserManager):
def create_user(self, email, username, first_name, last_name, password=None):
if not email:
raise ValueError('Must have Email')
if not username:
raise ValueError('Must have username')
if not first_name:
raise ValueError('Must have first_name')
if not last_name:
raise ValueError('Must have last name')
user = self.model(
email=self.normalize_email(email),
username=username,
first_name=first_name,
last_name=last_name,
)
user.set_password(password)
user.save(using=self._db)
return user
def create_superuser(self, email, username, first_name, last_name, password=None):
user = self.create_user(
email=email,
username=username,
first_name=first_name,
last_name=last_name,
password=password,
)
user.is_active = True
user.is_staff = True
user.is_admin = True
user.is_superuser = True
user.save(using=self._db)
return user
模型.py
class User(AbstractBaseUser):
# compulsory fields
email = models.EmailField(max_length=255, unique=True)
username = models.CharField(
unique=True, max_length=255, null=True, blank=False)
first_name = models.CharField(
unique=False, max_length=255, null=True, blank=False, verbose_name='First Name')
last_name = models.CharField(
unique=False, max_length=255, null=True, blank=False, verbose_name='Last Name')
date_joined = models.DateTimeField(default=timezone.now)
is_staff = models.BooleanField(default=False)
is_admin = models.BooleanField(default=False)
is_superuser = models.BooleanField(default=False)
is_active = models.BooleanField(default=True)
USERNAME_FIELD = 'email'
REQUIRED_FIELDS = ['first_name', 'last_name', 'username']
objects = UserManager()
def __str__(self):
return f'{self. username}'
def has_perm(self, perm, obj=None):
return True
def has_module_perms(self, app_label):
return self.is_admin
class Profile(models.Model):
user = models.OneToOneField(
settings.AUTH_USER_MODEL, on_delete=models.CASCADE)
image = models.ImageField(default='default.jpg', upload_to='profile_pics')
与 User 交互的模型有两种,一种是 is User
,另一种是Profile
。(Profle
处理图像)
已经尝试过的事情
- 要尝试的一件非常明显的事情是在进行任何身份验证之前在 manager.py 中将电子邮件设为小写,所以我确实喜欢这个
manage.py (修改)
user = self.model(
email=self.normalize_email( **email.lower()** ), # <- notice change here
username=username,
first_name=first_name,
last_name=last_name,
)
user = self.create_user(
email=email.lower() , # <-- notice change here
username=username,
first_name=first_name,
last_name=last_name,
password=password,
)
但这没有用。
- 其次是这篇文章,这是我关注的另一个 StackOverflow 帖子,但也没有用
我试图解决这个问题几个小时,想不出别的,非常感谢一些建议。
解决方案
推荐阅读
- python - 初读Python编程文:一个简单的游戏不断返回AttributeError
- azure - 用于移动应用的具有生物特征和证书的 Azure Active Directory
- visual-studio-code - 错误 E:无法统计 /var/lib/apt/lists/partial/packages.microsoft.com_repos_vscode_dists_stable_InRelease
- oracle - 在交互式报表中创建列链接 -Oracle Apex
- python - Django模型关系与循环关系
- android - 如何从片段内以编程方式在 TabLayout 中的选项卡之间切换
- php - 关于 amazon url , 什么意思 "i:aps","p_72","p_78","ssx:relevance"
- javascript - 是否可以同时使用外部 css 样式表/js 文件和外部 svg 文件?
- c# - 为什么 Control.Location 在 Windows 窗体中被限制为 Point(32767, 32767)
- sql - 如何将其标准化为 1NF?