【问题标题】:How to change UserCreationForm error messages in django如何在 django 中更改 UserCreationForm 错误消息
【发布时间】:2021-02-11 19:23:16
【问题描述】:

我正在尝试更改 UserCreationForm 中的错误消息。我想更改密码字段错误消息,但我不知道如何。我试过这个:

class CreateUserForm(UserCreationForm):
    error_messages = {
        'password_mismatch': "my message",
    }
    class Meta:
        model = User
        fields = ['username', 'first_name', 'password1', 'password2']

它有效,但我不知道如何更改其他消息,例如“密码与用户名太相似”、“密码太短”、“密码太常见”和“密码完全是数字” . 我尝试添加到 error_messages 'min_length' 键,但这不起作用

【问题讨论】:

  • 尝试在 Github 上搜索 Django 源代码。
  • @FatemehKarimi,是的,password_validation.py 中有代码“password_too_short”,我尝试将其添加到 error_messages 但令人惊讶的是,它不起作用!

标签: django


【解决方案1】:

您可以将django.contrib.auth.password_validation 复制到您的项目中,并使用您的自定义消息创建相同的验证器。

users/password_validation.py:

from django.contrib.auth import password_validation
from django.core.exceptions import (
    FieldDoesNotExist, ValidationError,
)

from django.utils.translation import gettext as _, ngettext


class MinimumLengthValidator(password_validation.MinimumLengthValidator):

    def __init__(self, min_length=8):
        self.min_length = min_length

    def validate(self, password, user=None):
        if len(password) < self.min_length:
            raise ValidationError(_(f"Пароль слишком короткий. Он должен содержать не менее {self.min_length} символов."))

    def get_help_text(self):
        return _(f"Ваш пароль должен содержать не менее {self.min_length} символов.")

别忘了在settings.py 中指出它们:

AUTH_PASSWORD_VALIDATORS = [
    {
        'NAME': 'users.password_validation.MinimumLengthValidator',
    },
   ...
]

【讨论】:

  • 感谢您的回答,这是个好主意,但由于某些原因,人们说这是一种不好的做法,他们建议不要这样做。另外,我不知道当我在主机上部署网站时是否能够编辑 django 源代码
  • 我不是要你重写 Django 的源代码。我稍微更新了答案。
  • 呃,因为我们可以通过 settings.py 中的 LANGUAGE_CODE = 'ru-ru' 翻译错误,所以我认为最好按照您在答案中所做的类似方式来更改翻译。你能告诉我怎么做吗?
  • 默认情况下,俄语的语言代码是ru,并且已经有翻译。既然我的回答已经回答了你的问题,你还有什么不清楚的地方?
猜你喜欢
  • 2021-09-15
  • 1970-01-01
  • 1970-01-01
  • 2023-01-07
  • 2019-05-27
  • 2018-06-26
  • 1970-01-01
  • 2020-07-19
  • 2021-09-16
相关资源
最近更新 更多