在 Django 中使用户名不区分大小写的更好方法? [复制]

Posted

技术标签:

【中文标题】在 Django 中使用户名不区分大小写的更好方法? [复制]【英文标题】:Better way to make usernames NOT case sensitive in Django? [duplicate] 【发布时间】:2019-08-14 12:07:33 【问题描述】:

Django 的默认用户模型用户名验证器允许 testUserTestUser 用于 2 个不同的用户名。

我找到了一种在注册过程中使用户名不区分大小写的方法,但我想知道是否没有内置方法可以做到这一点。

我是这样做的:

if form.is_valid():
    username = form.cleaned_data['username']

    brk = True

    try:
        User.objects.get(username__iexact=username)
    except:
        brk = False

    if brk:
        messages.warning(request, 'Username already in use')
        return redirect('signup')

    form.save()

这个方法看起来有点不专业。难道没有像 Django 一样的内置方式吗?类似于用户名 model 字段中的参数。

【问题讨论】:

可以先使用字符串方法string.lower()将其转为小写字符串 但我希望用户名与数据库中的输入字体大小写一起保存 ***.com/questions/13190758/… 【参考方案1】:

我看到了两种方法:

1 - 在数据库上创建一个约束,如下所示:Case insensitive unique model fields in Django?

2 - 覆盖用户名字段的表单验证。您可以将其用于处理用户名的任何或所有表单。

def clean_username(self):
    username = lower(self.cleaned_data['username')

    # You might even want to check with the username 
    #is already being used and raise a validation error here.

    return username

【讨论】:

以上是关于在 Django 中使用户名不区分大小写的更好方法? [复制]的主要内容,如果未能解决你的问题,请参考以下文章

如何使用 htmx 在 django 中进行不区分大小写的主动搜索

如何使用 Django 模型进行不区分大小写的查询

用户名和密码不区分大小写

如何实现 Django 不区分大小写的模型字段?

Django模板中的Django不区分大小写字符串比较

如何在 Django 中创建不区分大小写的数据库索引?