我正在尝试为django.contrib.auth用户模型自定义用户名验证。它显示为Usernames may contain alphanumeric, _, @, +, . and - characters.
,但我希望使其在用户使用@, ., -, +
创建用户名时无效。如何覆盖此验证,以便在用户创建用户名时使用我的自定义验证而不是原始UnicodeUsernameValidator
?
我正在使用我自己的自定义用户模型,但我是从AbstractBaseUser
继承的。是否有一种简单的方法来添加我的用户名验证?
3条答案
按热度按时间ct2axkht1#
有一个
username_validator
属性可以在模型类上设置:指向用于验证用户名的验证程序示例。默认值为
validators.UnicodeUsernameValidator
。要更改默认的用户名验证器,您可以将
User
模型子类化,并将此属性设置为不同的验证器示例。例如,要使用ASCII用户名:odopli942#
假设您正在使用users应用,自定义用户模型的名称为
CustomUser
,位于users/models.py中。如果您不希望在用户名中使用@, ., -, +
,请创建一个forms.py,如下所示:用户/forms.py
如果有人尝试在用户名中使用
@, ., -, +
注册,将显示您的自定义错误消息。要修改Django的默认描述
Required. 150 characters or fewer. Letters, digits and @/./+/-/_ only.
,你的models.py应该如下所示:用户/models.py
同时也不要忘记检查你的views.py和你的模板。
用户/views.py
用户/模板/注册.html
这是你必须使用的最小HTML。然后一切都将按照你想要的方式工作。
您可以添加更多的自定义设置(例如添加Django cripy表单,或用户名/电子邮件不区分大小写,或避免重复输入
email@gmail.com
和email@googlemail.com
的用户。这两个电子邮件是相同的。如果您不包含检查,那么您的数据库中会有重复的用户。wgx48brx3#
@Bytes这是肮脏的伎俩,但工作:-