Изменить ошибки при смене пароля сериализатора в rest-auth - PullRequest
0 голосов
/ 09 января 2019

Я использую Django rest-auth, чтобы иметь конечные точки для моей регистрации, смены пароля и т. Д. Я работаю с конечной точкой смены пароля, которая содержит старый пароль, новый пароль и подтверждение пароля. Я пытаюсь переопределить что-то в оригинальном сериализаторе, например, добавить свои собственные сообщения об ошибках, если поле, например, неверно. Тем не менее, одно сообщение об ошибке, с которым я сталкиваюсь с трудностями, - это если поля пустые. По умолчанию сообщение об ошибке появляется так каждый раз:

{
    "old_password": [
        "This field may not be blank."
    ],
    "new_password1": [
        "This field may not be blank."
    ],
    "new_password2": [
        "This field may not be blank."
    ]
}

Я хотел бы реализовать свое собственное сообщение об ошибке, если поле пустое, однако я не могу этого сделать. Вот сериализатор, который я создал:

class PasswordChange(PasswordChangeSerializer):

    set_password_form_class = SetPasswordForm

    def validate_old_password(self, value):
        invalid_password_conditions = (
            self.old_password_field_enabled,
            self.user,
            not self.user.check_password(value)
        )

        if all(invalid_password_conditions):
            raise serializers.ValidationError('The password you entered is invalid.')
        return value

а вот класс формы:

class PasswordForm(ChangePasswordForm):

    oldpassword = PasswordField(label=_("Current Password"))
    password1 = SetPasswordField(label=_("New Password"))
    password2 = PasswordField(label=_("Confirm New Password"))

    def __init__(self, *args, **kwargs):
        super().__init__(*args, **kwargs)
        self.fields['oldpassword'].widget = forms.PasswordInput(attrs={"placeholder": ""})
        self.fields['password1'].widget = forms.PasswordInput(attrs={"placeholder": ""})
        self.fields['password2'].widget = forms.PasswordInput(attrs={"placeholder": ""})

    def clean_oldpassword(self):
        if not self.user.check_password(self.cleaned_data.get("oldpassword")):
            raise forms.ValidationError(_("The password you entered is invalid."))

Я делаю это правильно? Как я могу изменить сообщение об ошибке, которое отображается, когда поля не заполнены?

1 Ответ

0 голосов
/ 09 января 2019

Вы можете использовать error_messages атрибут serializers.CharField.

class PasswordChange(PasswordChangeSerializer):

    my_default_errors = 
            {
             'blank': 'your_message',
             'required': 'your_message',
            }
    old_password = serializers.CharField(max_length=128, error_messages=my_default_errors)
    new_password1 = serializers.CharField(max_length=128, error_messages=my_default_errors)
    new_password2 = serializers.CharField(max_length=128, error_messages=my_default_errors)

    def validate_old_password(self, value):
        invalid_password_conditions = (
            self.old_password_field_enabled,
            self.user,
            not self.user.check_password(value)
        )

        if all(invalid_password_conditions):
            raise serializers.ValidationError('The password you entered is invalid.')
        return value
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...