1、form
from django import forms from django.core.exceptions import ValidationError #出现异常时用的 from user import models #validators的先验证 #第一步验证 def test_phone(value): print('test_phone',3) if len(value) != 11: raise ValidationError('手机号码格式不正确')#抛出异常 else: return value class ArticleForm(forms.Form): #字段名称要和提交的字段相同 title = forms.CharField(required=True,#是否必填 validators=[test_phone],#自定义校验,公共校验,验证手机,邮箱 strip=False,#是否去掉输入的空格,默认为True error_messages={#错误信息提示 'required':'必填参数未填', 'max_length':'最大10个字符', 'min_length':'最小5个字符' }) # 字段名称要和提交的字段相同 # title = forms.CharField(required=True, # 是否必填 # max_length=10, # 最大字符长度 # min_length=5, # 最小字符长度 # strip=False, # 是否去掉输入的空格,默认为True # error_messages={ # 错误信息提示 # 'required': '必填参数未填', # 'max_length': '最大10个字符', # 'min_length': '最小5个字符' # }) #form 中的钩子函数 #第三步对全局进行验证 def clean(self): print('clean',1) # 通过 self.cleaned_data获取所有的数据 return self.cleaned_data #针对个别字段进行验证 #第二步对个别数据进行验证 def clean_title(self): print('clean_title',2) #验证手机号是否是我们系统的 return self.cleaned_data.get('title') def clean_content(self): pass
views.py中的代码块
from user.forms import ArticleForm,StudentForm def add_article(request): if request.method == 'GET': return render(request,'post.html') else: article_obj = ArticleForm(request.POST) f = article_obj.is_valid()#获取校验结果 if f: cleaned_data = article_obj.cleaned_data#校验通过后,结果会存在cleaned_data中,是个dict print(cleaned_data) else: print(article_obj.errors) return HttpResponseRedirect(article_obj.errors)
2、modelform
# model + form def test_name(value): if value == 'dsx': raise ValidationError('姓名不存在。') else: return value class StudentForm(forms.ModelForm): # 当你觉得model写的验证规则不符合你的要求,可以像forms.Form 一样进行验证 name = forms.CharField(validators=[test_name]) class Meta: model = models.Student # 创建类变量和model建立映射关系 # fields = '__all__' # 验证全部字段 # fields = ['name'] # 显示指定列验证 只有指定的验证的字段才会出现在cleaned_data中 exclude = ['age'] # 排除了就不会出现在cleaned_data中 def clean(self): if self.cleaned_data.get('name') == 'ssz': raise ValidationError('姓名是射手座') else: return self.cleaned_data # 单个字段验证,必须要争在form中有些这个 字段 def clean_name(self): if self.cleaned_data.get('name') == 'nhy': raise ValidationError('姓名是nhy') else: return self.cleaned_data.get('name')
views.py中的代码块
def student(request): if request.method == 'GET': return render(request,'student.html') else: studentObj = StudentForm(request.POST) f = studentObj.is_valid() if f: print('cleaned_data',studentObj.cleaned_data) else: print('errormsg',studentObj.errors) return HttpResponse('ok')