Django表单字段的验证方式

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了Django表单字段的验证方式相关的知识,希望对你有一定的参考价值。

一、给表单的字段添加验证器

In your forms.py

 1 def validate_name(value):
 2     try:
 3         # 查询存在的话抛出异常
 4         User.objects.get(username=value)
 5         raise ValueError("%s的用户已经存在"%value)
 6     except User.DoesNotExist:
 7         pass
 8 
 9 from blogapp.models import User
10 class Loginfm(forms.ModelForm):
11     # 与ModelForm中字段重名不会添加,这里用于给字段加验证器
12     username=forms.CharField(validators=[validate_name])
13     class Meta():
14         model=User
15         exclude=("id",email)

如果username已经存于数据库当中,提交时抛出已经存在的异常

 

二、clean_fieldname

针对某个字段进行验证

In your forms.py

 1 from blogapp.models import User
 2 class Loginfm(forms.ModelForm):
 3     
 4     # clean_username为User类的一个方法
 5     # self代表表单自己
 6     def clean_username(self):
 7         value=self.cleaned_data.get("username")
 8         try:
 9             User.objects.get(username=value)
10             raise ValueError("%s的用户信息已经存在"%value)
11         except User.DoesNotExist:
12             pass
13         return value
14 
15     class Meta():
16         model=User
17         exclude=("id",email)

 

三、clean方法

可用于对整个表单进行验证

In forms.py

 1 from blogapp.models import User
 2 class Loginfm(forms.ModelForm):
 3     def clean(self):
 4         # 调用父类的方法
 5         # 获取表单所有的数据
 6         cleaned_data=super(Loginfm,self).clean()
 7         value=cleaned_data.get("username")
 8         try:
 9             User.objects.get(username=value)
10             self._errors[username]=self.error_class(["%s已经存在"%value])
11             
12         except User.DoesNotExist:
13             pass
14         return cleaned_data
15     class Meta():
16         model=User
17         exclude=("id",email)

可以适用注册(两次密码匹配)

以上是关于Django表单字段的验证方式的主要内容,如果未能解决你的问题,请参考以下文章

17.Django表单验证

django 表单验证和字段验证

Django实战-----用户登录与注册系统4(表单)

Django:表单验证:一个字段接受多个值

如果空值传递给Django中的表单字段,如何验证表单?

Django REST框架--认证和权限