表单中常用的验证器及自定义验证
Posted nihao2
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了表单中常用的验证器及自定义验证相关的知识,希望对你有一定的参考价值。
在验证某个字段时,我们可以传递一个validators(需引入from django.core import validators)参数来指定验证器,进一步对数据进行过滤。常用的验证器有如下:
- MaxValuValidator:验证最大值。
- MinValuValidator:验证最小值。
- MinLengthValidator:验证最小长度。
- MaxLengthValidator:验证最大长度。
- EmailValidator:验证是否是邮箱格式。
- URLValidator:验证是否是url格式。
- RegexValidator:写正则匹配来验证字段,如电话号等。。
新建forms.py 定义表单验证格式,
from django import forms from django.core import validators class MyForm(forms.Form): telephone = forms.CharField(validators=[validators.RegexValidator(r‘1[345678]d{9}‘,message=‘输入正确的手机格式。‘)])
在views视图中写:
from django.shortcuts import render from django.views.generic import View from .forms import MyForm class IndexView(View): def get(self,request): return render(request,‘index.html‘) def post(self,request): form = MyForm(request.POST) if form.is_valid(): form = form.cleaned_data.get(‘telephone‘) return HttpResponse(‘success‘) else: print(form.errors.get_json_data) return HttpResponse(‘shibai‘)
自定义验证:
有时候我们会需要验证一个的字段不是一个长度,一个正则表达式能够写清楚的,需要增加一些逻辑,django提供了自定义的验证,比如注册表单时要验证手机号是否已经被注册过了,两次密码是否一致等等。。。这个名字的定义规则时:clean_fieldname。如果验证失败,就抛出一个错误验证。
- 首先我们先创建一个模型models。定义我们的字段(将字段放到我们的数据库中)
from django.db import models # Create your models here. class User(models.Model): username = models.CharField(max_length=100) telephone = models.CharField(max_length=11,unique=True) #注意写unique 不唯一的
- 然后定义一个注册的视图函数:
class RegisterView(View): def get(self,request): return render(request,‘register.html‘) def post(self,request): form = RegisterForm(request.POST) if form.is_valid(): username = form.cleaned_data.get(‘username‘) telephone = form.cleaned_data.get(‘telephone‘) user = User.objects.create(username=username,telephone=telephone) #create方法 将网页上传入的添加到数据库中。 return HttpResponse(‘success‘) else: print(form.errors.get_json_data()) return HttpResponse(‘注册失败‘)
- 在表单 forms.py 中写
class RegisterForm(forms.Form): username=forms.CharField(max_length=100) telephone = forms.CharField(validators=[validators.RegexValidator(r‘1[345678]d{9}‘,message=‘请规范输入‘)]) pwd1=forms.CharField(max_length=16,min_length=6) pwd2=forms.CharField(max_length=16,min_length=6) def clean_telephone(self): #以clean开头加上该字段的名字,就会专门对改字段再进行一次更深的验证方法 telephone = self.cleaned_data.get(‘telephone‘) #获取手机号码 exists = User.objects.filter(telephone=telephone).exists() #exist()查看该字段是否存在否存在 if exists: raise forms.ValidationError(message=‘{}手机号已经被注册‘.format(telephone)) #如果验证没有问题 ,一定要将telephone返回。 return telephone def clean(self): #如果来到了clean方法说明之前的每一个字段都验证成功了 cleaned_data = super().clean() pwd1 = cleaned_data.get(‘pwd1‘) pwd2 = cleaned_data.get(‘pwd2‘) if pwd1 != pwd2: raise forms.ValidationError(message=‘两次不一致‘) return cleaned_data
注:以clean开头加上该字段的名字,就会专门对改字段再进行一次更深的验证方法
以上是关于表单中常用的验证器及自定义验证的主要内容,如果未能解决你的问题,请参考以下文章
Dubbo3高级特性「框架与服务」在dubbo3中进行参数校验及自定义验证扩展机制
原生JavaScript判断是否为邮箱危险字符验证长度验证网址验证小数整数浮点数等常用的验证
django中关于表单自定义验证器和常用验证器 validators