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")
Вернуться на верх