标签:手机号 正则 validator iba 获取 min 返回 参数 exists
在验证某个字段时,我们可以传递一个validators(需引入from django.core import validators)参数来指定验证器,进一步对数据进行过滤。常用的验证器有如下:
新建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。如果验证失败,就抛出一个错误验证。
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(‘注册失败‘)
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开头加上该字段的名字,就会专门对改字段再进行一次更深的验证方法
标签:手机号 正则 validator iba 获取 min 返回 参数 exists
原文地址:https://www.cnblogs.com/nihao2/p/12283977.html