Django中的clean()
函数是Django表单中常用的一个方法,它是用来验证表单数据的函数。我们可以通过继承forms.Form
类并重写clean()
函数来实现表单数据的验证。clean()
函数中的代码会在表单数据存储到cleaned_data
中之前执行,如果数据验证未通过,那么我们可以通过raise forms.ValidationError()
这个函数来抛出异常,以便为用户提供错误信息。
clean()
函数的使用方法:
- 在表单类中继承
forms.Form
类,并在表单类中重写clean()
函数,用于自定义表单数据的验证逻辑; - 在重写的
clean()
函数中,通过验证表单数据的方法,判断表单数据是否符合规范; - 如果表单数据不符合规范,则通过
raise forms.ValidationError()
函数抛出异常,并设置错误信息; - 如果表单数据验证通过,则将验证后的数据存储到
cleaned_data
中,并将其返回。
下面是具体的两个实例:
实例1:验证表单中两次输入的密码必须一致
from django import forms
class UserForm(forms.Form):
username = forms.CharField(label='用户名', max_length=50)
password = forms.CharField(label='密码', widget=forms.PasswordInput())
confirm_password = forms.CharField(label='确认密码', widget=forms.PasswordInput())
def clean_confirm_password(self):
password = self.cleaned_data['password']
confirm_password = self.cleaned_data['confirm_password']
if password and confirm_password and password != confirm_password:
raise forms.ValidationError('两次密码输入不一致,请重新输入。')
return confirm_password
上面的代码中,在UserForm
表单类中重写了clean_confirm_password()
方法,用于验证表单中两次输入密码是否一致。如果通过验证,则返回验证后的确认密码;否则抛出ValidationError
异常。
实例2:验证表单中输入的日期是否早于今天
from django import forms
from django.utils.timezone import localtime, now
class DateForm(forms.Form):
name = forms.CharField(label='姓名', max_length=50)
date = forms.DateField(label='日期')
def clean_date(self):
input_date = self.cleaned_data['date']
now_date = localtime(now()).date()
if input_date >= now_date:
raise forms.ValidationError('输入日期必须早于今天。')
return input_date
上面的代码中,在DateForm
表单类中重写了clean_date()
方法,用于验证表单中的日期是否早于今天。如果通过验证,则返回验证后的日期;否则抛出ValidationError
异常。