【问题标题】:How to include forward slash in django username如何在 django 用户名中包含正斜杠
【发布时间】:2019-04-20 14:37:48
【问题描述】:

我正在开发一个要求用户名包含正斜杠的网站。像“CSC/15U/1155”这样的用户名。

django 说 '输入一个有效的用户名。该值只能包含字母、数字和@/./+/-/_ 字符。'.

我的问题如下:有没有办法允许用户名中的正斜杠而不扩展用户模型,如果有请帮助。

提前致谢。

【问题讨论】:

标签: django django-users


【解决方案1】:

由于Django's Username validator 而发生此错误。所以你可以像这样覆盖它(从文档中复制粘贴):

from django.contrib.auth.models import User
from django.contrib.auth.validators import ASCIIUsernameValidator

class CustomUser(User):
    username_validator = ASCIIUsernameValidator()  # or your custom validator

    class Meta:
        proxy = True  # If no new field is added.

或者,如果您不想使用任何验证器,那么只需 override the username field

更新

当您使用CustomUser模型时,您需要更新settings.py中的AUTH_USER_MODEL。例如:

#  settings.py

AUTH_USER_MODEL = 'yourapp.models.CustomUser'

如果你想覆盖CustomUser中的username字段,那么你可以这样做:

 from django.contrib.auth.models import AbstractUser


 class CustomUser(AbstractUser):
      username = models.CharField(max_length=255, unique=True)

请参阅the documentation 了解如何在 Django 中使用自定义用户模型。

对于管理站点,您需要覆盖您的登录表单。例如:

# some form

from django.contrib.auth.forms import AuthenticationForm

class LoginForm(AuthenticationForm):
    username = forms.CharField(label='username', max_length=100)

并在 urls.py(as per this answer) 中更新:

from django.contrib import admin
from my.forms import AuthenticationForm

admin.autodiscover()
admin.site.login_form = LoginForm

默认管理站点登录不起作用,因为它使用规范化输入值的Username 字段。

【讨论】:

  • 感谢您的回复,但我仍然无法创建包含正斜杠的用户名。我认为 ASCIIUsernameValidator 只允许字母、数字和@/./+/-/_ 字符。'。就我而言,我想允许正斜杠 '/'
  • 在这种情况下,只需像答案中提到的文档那样覆盖用户名字段。
  • 我覆盖了验证器的用户名,现在它使用 User.objects.create_user() 在 shell 中工作,但不幸的是它不适用于 django 管理表单
猜你喜欢
  • 2012-10-21
  • 2021-03-27
  • 2018-09-21
  • 2020-04-03
  • 2012-06-28
  • 2015-10-03
  • 2017-10-16
  • 1970-01-01
  • 2011-04-25
相关资源
最近更新 更多