【问题标题】:django all-auth case insensitive usernamedjango all-auth 不区分大小写的用户名
【发布时间】:2020-10-19 08:25:26
【问题描述】:

我正在使用Django AllAuth,正在为应用程序的用户制作一个简单的个人资料页面。这可以通过输入用户的用户名来实现。

# urls.py
path('<str:username>/', UserDetail.as_view(), name='user-detail'),

# views.py
class UserDetail (DetailView):
    template_name = 'dashboard/user.html'
    model = User

    def get_object(self):
        return get_object_or_404(User, username=self.kwargs['username'])

我的想法是它会像推特一样运作。用户创建一个帐户用户名,如MyUsername,它看起来很好区分大小写并且可搜索不区分大小写。因此,如果有人搜索用户,他们可以输入不区分大小写的用户名,它总是会以更好看的区分大小写的样式找到正确的用户。

那时我意识到用户名:MyUsername 应该是 myusername 实际上是 2 个不同的用户!否则我认为我的想法很天真。


Django AllAuth 确实有我可以实现的ACCOUNT_PRESERVE_USERNAME_CASING (=True),但这只会使所有用户名都是小写的,而我只是想让用户名不区分大小写唯一,同时仍然显示更好的区分大小写的版本。

处理使用户名不区分大小写唯一但仍向用户显示区分大小写格式的最佳方法是什么?

【问题讨论】:

  • 您可以在其中覆盖LoginForm 和login 方法来检查用户名是否区分大小写。您还需要覆盖 SignupForm 以检查是否没有具有相同用户名的用户(不区分大小写)您可以在此处阅读 - link

标签: python django django-authentication django-allauth django-users


【解决方案1】:

我建议ACCOUNT_PRESERVE_USERNAME_CASING = False 并在单独的字段中保留一个“可显示”版本的用户名(在注册时设置)。如果更改了用户名,则两个名称也应同时更新(一个用于身份验证处理,另一个用于显示)。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2015-02-24
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2019-09-16
    • 1970-01-01
    • 2018-11-18
    相关资源
    最近更新 更多