python - Django 注册表单中不区分大小写的用户名

标签 python django django-models django-forms

这是我的注册表单,

class SignupForm(forms.ModelForm):

   class Meta:
       model = User
       fields = ['first_name', 'last_name','username', 'email', 'password']

    def clean_username(self):
        username = self.cleaned_data.get('username')
        email = self.cleaned_data.get('email')

        if username and User.objects.filter(username=username).exclude(email=email).count():
            raise forms.ValidationError('This username has already been taken!')
       return username

这可以很好地检查是否存在相同的用户名。但是它不检查是否不区分大小写。如果有用户名,例如'userone',那么它也接受带有 'Userone' 的用户名。虽然它没有破坏任何功能,但看起来很不专业。

我的问题是如何检查表单中是否不区分大小写,并引发错误?

最佳答案

有时我也会遇到同样的问题。 Django 认为用户名是唯一的,无论是小写还是大写。就像如果我输入John,它是一个唯一的用户名,如果我输入john,它是一个新用户名。我需要考虑 Johnjohn 不在数据库中。就像 facebook 一样简单,大写和小写的用户名都是相同的,唯一的。

所以我只需像这样更改我的注册代码即可实现此目的。

username = self.cleaned_data.get('username').lower()

此外,在我的登录代码中,我将用户名转换为较低的。 因此,它始终将用户名保存在数据库中的较低位置,并使用小写用户名登录。尽管用户尝试使用大写用户名登录,但它会通过转换为小写来保存到数据库。

关于python - Django 注册表单中不区分大小写的用户名,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/54166564/

相关文章:

python - Django 。在不影响其 updated_at 字段的情况下增加对象的查看次数

Django Admin list_filter 和带注释字段的排序

python - 尝试在 Django 中遍历 session 字典时出现 KeyError 0

python - Mysql python 不插入数据

python - 可以在创建时将字典传递给 django 模型吗?

python - 创建一个函数来为上传的图像位置指定目录

python - 更改seaborn中箱形图中线的宽度

python - 有没有办法通过C++中的OUT参数接收Python中的返回值?

python - Django,在模板中显示上传的图像URL

python - Django - 多个数据库