【问题标题】:django.auth manipulate model fields/allow space in usernamesdjango.auth 操作模型字段/允许用户名中的空间
【发布时间】:2012-03-22 18:18:32
【问题描述】:

我目前正在为应用实施用户注册。我想将 django.auth 默认行为更改为使用电子邮件而不是用户名。我想我会使用自定义身份验证后端。我希望用户仍然能够提供用户名。

  1. 如何在不更改 django.auth 模型中的字段的情况下允许用户名中的空格(如“john doe”)。

  2. 如何使电子邮件字段成为必填项。目前,如果电子邮件为空,我的 UserCreation 表单中的 clean_email 方法会引发验证错误。一定有更好的办法。

感谢 Brandon 和 Andrew Sledge,这是我的解决方案:

class RegisterForm(UserCreationForm):
    username = forms.RegexField(label=("Username"), max_length=30, regex=r'^[ \t\r\n\f\w.@+*-]+$',
        help_text = ("Required. 30 characters or fewer. Letters, digits and @/./+/-/_ only."),
        error_messages = {'invalid': ("This value may contain only letters, numbers and @/./+/-/_ characters.")})
class Meta:
    model = User

我从 UserCreationForm 复制了该字段。重要的部分是将 \t\r\n\f 添加到正则表达式。 \s 不会工作。

【问题讨论】:

    标签: django django-authentication


    【解决方案1】:

    您始终可以覆盖 contrib.auth.forms 中的 UserCreationForm 来为用户名实现不同的字段并提供您自己的验证。只需继承表单并添加您自己的用户名字段,或在类的__init__ 中覆盖它。

    【讨论】:

    • 谢谢。这很容易。我已经覆盖了 UserCreationForm。我覆盖了用户名字段,现在它可以工作了。
    【解决方案2】:

    也许你想使用validate_slug:

    确保值仅由字母、数字、下划线或连字符组成的 RegexValidator 实例

    【讨论】:

      【解决方案3】:

      对于用户名: 覆盖 UserCreationForm (django.contrib.auth.forms) 以修改该字段的正则表达式参数以允许空格。无需更改模型。

      对于电子邮件: http://djangosnippets.org/snippets/74/

      【讨论】:

      • 谢谢,这就是解决方案。为什么我必须使用 \t\r\n\f 而不是 \s ?
      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2013-09-10
      • 1970-01-01
      • 2020-11-08
      • 1970-01-01
      • 2020-07-15
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多