Django не выдает ошибку валидации
class confirm_password_form(forms.Form):
password = forms.CharField(label="Password",widget = forms.PasswordInput,required=True)
confirm_password = forms.CharField(label="Confirm_Password",widget = forms.PasswordInput,required=True)
def clean(self):
print("this is clean")
cleaned_data = super().clean()
password = self.cleaned_data["password"]
confirm_password = self.cleaned_data["confirm_password"]
print("in clean password ",password)
print("in clean confirm_password",confirm_password)
if password!=confirm_password:
print("this is not equal condition")
raise forms.ValidationError("both password should be match")
В приведенном выше коде Django не выдает ошибку валидации. Он печатает "это условие не равно", но не выдает ошибку.
Я попробовал доступные решения.
ValidationError
должен быть импортирован из django.core.exceptions
. ссылка
ProTip:
Python рекомендует использовать функцию secrets модуля compare_digest
для сравнения паролей, чтобы избежать timing attack
secrets.compare_digest(a, b)
возвращает True, если строки или байтоподобные объекты a и b равны, иначе False, используя "сравнение в постоянном времени"
import secrets
from django.core.exceptions import ValidationError
class confirm_password_form(forms.Form):
password = forms.CharField(label="Password",widget = forms.PasswordInput,required=True)
confirm_password = forms.CharField(label="Confirm_Password",widget = forms.PasswordInput,required=True)
def clean(self):
print("this is clean")
cleaned_data = super().clean()
password = self.cleaned_data["password"]
confirm_password = self.cleaned_data["confirm_password"]
print("in clean password ",password)
print("in clean confirm_password",confirm_password)
if !secrets.compare_digest(password, confirm_password):
print("this is not equal condition")
raise ValidationError("both password should be match")
Я думаю, что ваш код выглядит в основном правильно, но может быть небольшая проблема в том, как вы обращаетесь к очищенным данным.
попробуйте это:-
from django import forms
class ConfirmPasswordForm(forms.Form):
password = forms.CharField(label="Password", widget=forms.PasswordInput, required=True)
confirm_password = forms.CharField(label="Confirm Password", widget=forms.PasswordInput, required=True)
def clean(self):
cleaned_data = super().clean()
password = cleaned_data.get("password")
confirm_password = cleaned_data.get("confirm_password")
if password and confirm_password and password != confirm_password:
raise forms.ValidationError("Both passwords should match")