码迷,mamicode.com
首页 > 其他好文 > 详细

表单中常用的验证器及自定义验证

时间:2020-02-08 18:01:02      阅读:87      评论:0      收藏:0      [点我收藏+]

标签:手机号   正则   validator   iba   获取   min   返回   参数   exists   

在验证某个字段时,我们可以传递一个validators(需引入from django.core import validators)参数来指定验证器,进一步对数据进行过滤。常用的验证器有如下:

  1. MaxValuValidator:验证最大值。
  2. MinValuValidator:验证最小值。
  3. MinLengthValidator:验证最小长度。
  4. MaxLengthValidator:验证最大长度。
  5. EmailValidator:验证是否是邮箱格式。
  6. URLValidator:验证是否是url格式。
  7. RegexValidator:写正则匹配来验证字段,如电话号等。。

新建forms.py 定义表单验证格式,

from django import forms
from django.core import validators
class MyForm(forms.Form):
  telephone = forms.CharField(validators=[validators.RegexValidator(r1[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。如果验证失败,就抛出一个错误验证。

  1. 首先我们先创建一个模型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 不唯一的
  2. 然后定义一个注册的视图函数:
    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(注册失败)

     

  3. 在表单 forms.py 中写
    class RegisterForm(forms.Form):
        username=forms.CharField(max_length=100)
        telephone = forms.CharField(validators=[validators.RegexValidator(r1[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

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!