请选择 进入手机版 | 继续访问电脑版
搜索
房产
装修
汽车
婚嫁
健康
理财
旅游
美食
跳蚤
二手房
租房
招聘
二手车
教育
茶座
我要买房
买东西
装修家居
交友
职场
生活
网购
亲子
情感
龙城车友
找美食
谈婚论嫁
美女
兴趣
八卦
宠物
手机

121.自定义验证器

[复制链接]
查看: 90|回复: 0

3万

主题

3万

帖子

9万

积分

管理员

Rank: 9Rank: 9Rank: 9

积分
92729
发表于 2020-2-15 08:06 | 显示全部楼层 |阅读模式
自界说考证器:

偶然候我们需要从数据库中提取数据举行考证,这个时候假如还是采纳已经界说好的考证器就不成以也许实现我们想要的功用了。比如我们在注册的时候要考证该手机号大如果邮箱之前能否已经注册过了。假如已经注册过了,就不成以也许再次举行注册了。这个时候我们就需要对数据库中的手机字段举行考证了。对某个字段举行考证的方式就是,界说一个方式,这个方式的名字的界说法则就是clean_fieldname.假如考证失利,那末就抛出一个毛病,假如没有找到类似的手机号就一般情况下返回一个手机号,代表已经经过了考证。

(1)比如,在注册的时候我们需要输入用户名手机号,密码以及确认密码四个字段的内容,同时需要对手机号能否存在数据库及第行判定,而且对密码的长度和两次密码的能否类似举行判定。那末便可以经过以下代码实现:

==forms.py文件中界说form表单字段,而且自界说考证器,示例代码以下:==
  1. from django import formsfrom djang.core import validatorsfrom .models import Userclass RegisterForm(forms.Form):    username = forms.CharField(max_length=100,error_messages={'invalid': '输入的username是无效的'})    # 留意这里界说的考证器参数validators所对应的是列表,一个可以迭代的工具。    telephone = forms.CharField(validators=[validators.RegexValidator(r"1[345678]\d{9}", message='请输入切确的手机号码')])    pwd1 = forms.CharField(max_length=24, min_length=6, error_messages={'invalid':'您输入的密码长度不合适要求'})    pwd2 = forms.CharField(max_length=24, min_length=6, error_messages={'invalid':'您输入的密码长度不合适要求'})                def clean_telephone(self):            telephone = self.super().cleaned_data.get('telephone')                exists = User.objects.filter(telephone=telephone).exists()        if exists:            raise forms.ValidationError('%s您输入的手机号已经注册过了,请肯定后再输入。'%telephone)        return telephone                def clean(self):        clean_data = super().clean()        pwd1 = clean_data.get('pwd1')        pwd2 = clean_data.get('pwd2')                if pwd1 != pwd2:            raise forms.ValidationError('您两次输入的密码不类似,请确认!')        return clean_data
复制代码
==在views.py文件界说对应的类视图,示例代码以下:==
  1. from django.views import Viewfrom .forms import RegisterFormfrom .models import Userfrom django.http import HttpResponsefrom django.shortcuts import renderclass register_view(View):        def get(self, request):        forms = RegisterForm()        return render(request, 'register.html',context={'forms':forms})            def post(self, request):        forms = RegisterForm(request.POST)                if forms.is_valid():            username = forms.cleaned_data.get('username')            telephone = forms.cleaned_data.get('telephone')            pwd1 = forms.cleaned_data.get('pwd1')            pwd2 = forms.cleaned_data.get('pwd2')            User.objects.create(username=username, telephone=telephone,pwd1=pwd1, pwd2=pwd2)            return HttpResponse('Add user successful')        else                    print(forms.errors.get_json_data())            return HttpResponse('Fail user lose')
复制代码
==在models.py文件中界说响应的User模子,示例代码以下:==
  1. from django.db import modelsclass User(models.Model):    username = models.CharField(max_length=100)    telephone = models.CharField(max_length=100,unique=True)    pwd1 = models.CharField(max_length=24)    pwd2 = models.CharField(max_length=24)
复制代码
==在APP中的urls.py文件及第行映照:==
  1. from django.urls import pathfrom .views import Addview, register_viewapp_name = 'validator'urlpatterns = [    path('', Addview.as_view(), name='add'),    path('register/', register_view.as_view(), name='register'),]
复制代码
==在项方针urls.py文件及第行映照,示例代码以下:==
  1. from django.urls import path, includeurlpatterns = [    path('front/', include('front.urls')),    path('validator/', include('validator.urls')),]
复制代码
==在register.html中的表单界说以下:==
  1.         Title    [table]        [tr]            [td]姓名:[/td]            [td][/td]        [/tr]        [tr]            [td]手机号:[/td]            [td][/td]        [/tr]        [tr]            [td]密码:[/td]            [td][/td]        [/tr]        [tr]            [td]确认密码:[/td]            [td][/td]        [/tr]        [tr]            [td][/td]            [td][/td]        [/tr]    [/table]
复制代码
免责声明:假如加害了您的权益,请联系站长,我们会实时删除侵权内容,感谢合作!
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

Copyright © 2006-2014 WAYSFOCUS 影像 你 我 他,中国商业影视一站式解决平台 版权所有 法律顾问:高律师 客服电话:0791-88289918
技术支持:迪恩网络科技公司  Powered by Discuz! X3.2
快速回复 返回顶部 返回列表