全局钩子验证:

‘’’ 打包前端input,views数据处理,链接moduls数据库,用来验证 ’’’

Views:

Form=UserForm(request.POST)实例化对象

Form.cleaned_data #干净字段和值

Form.errors #dict---{‘效验错误字段’:’错误信息’}----form.errors.get(‘效验错误字段’)

form.errors.get(‘__all__’) #全局钩子错误信息

UserForm类定义:

From django import forms #自动验证

From django.forms import widgets

From django.core.exception import ValidationError

from django.core.validators import RegexValidator #正则

Wid_02 = widgets.PasswordInput(attrs={‘class’:’form-control’})#形成密码输入框

Pwd = forms.CharField(max_length=6,min_length=2,widget=wid_02,label=’密码’,validators=[RegexValidator(‘\d+’,’只能是数字’)],error_messages={‘required’:’该字段必填’'min_length': '密码长度不能小于8','max_length': '密码长度不能大于18','invalid': '密码格式错误',})  #对输入框进行限制

#局部钩子---判断输入是否在数据库中

Def clean_member_name:

  Val = self.cleaned_data.get(‘username’)

  Res = Member.objects.filter(username=val)

  If判断res:

    Return val

  Else:

    Raise ValidationError(‘用户名已存在’)

#全局钩子(前端和前端)

Def xxx:

  密码==重复密码

Html:

Form表单里:

1:

<lable for=’pwd’>{{form.username.lable}}</lable>   //标签名

<p>{{form.username}}<span class=’’pull-right error’’>{{form.username.errors.0}}</span></p>

//输入框----错误信息

2:

<lable for=’pwd’>{{form.username.lable}}</lable>   //标签名

<p><input type=’password’ name=’pwd’ value={{ request.POST.pwd }}<span class=’’pull-right error’’>{{form.username.errors.0}}</span></p>

// request.POST.pwd ==  request.POST.get(‘pwd’)

3:

如果不想加error_message来显示中文信息,可以在setting里修改配置

LANGUAGE_CODE = ‘zh-hans’

这样错误信息自动转为中文

my_form:

from django import forms #自动验证
from django.forms import widgets
from django.core.exceptions import ValidationError
from app01.models import Member class UserForm(forms.Form):
''''''
wid_email = widgets.EmailInput(attrs={'class':'form - control'})
wid_phone = widgets.TextInput(attrs={'class':'form - control'})
wid_username = widgets.TextInput(attrs={'class':'form - control'})
wid_displyname = widgets.TextInput(attrs={'class':'form - control'})
wid_password = widgets.PasswordInput(attrs={'class':'form - control'})
wid_rpassword = widgets.PasswordInput(attrs={'class':'form - control'})
member_email = forms.EmailField(max_length=120, min_length=2, widget=wid_email, label='邮箱',error_messages = {'required':'该字段必填'})
member_tel = forms.CharField(max_length=13, min_length=4, widget=wid_phone, label='手机号',error_messages = {'required':'该字段必填'})
member_name = forms.CharField(max_length=30, min_length=2, widget=wid_username, label='用户名',error_messages = {'required':'该字段必填'})
member_nickname = forms.CharField(max_length=20, min_length=2, widget=wid_displyname, label='昵称',error_messages = {'required':'该字段必填'})
member_pwd = forms.CharField(max_length=30, min_length=8, widget=wid_password, label='密码',error_messages = {'required':'该字段必填'})
r_pwd = forms.CharField(max_length=30, min_length=8, widget=wid_rpassword, label='重复密码',error_messages = {'required':'该字段必填'}) def clean_member_name(self):
''''''
val = self.cleaned_data.get('member_name')
res = Member.objects.filter(member_name=val)
print(res)
if not res:
return val
else:
return ValidationError('用户名已存在!') def clean(self):
''''''
member_pwd = self.cleaned_data.get('member_pwd')
r_pwd = self.cleaned_data.get('r_pwd')
if member_pwd and r_pwd:
if member_pwd == r_pwd:
return self.cleaned_data
else:
return ValidationError('两次密码不一致!')
else:
return self.cleaned_data

views:

from django.shortcuts import render,HttpResponse,redirect
from app01.models import *
from app01.my_form import UserForm
import json def enroll(request):
''''''
res = {'s':None,'info':None}
print(request.POST)
if request.method == 'POST':
form = UserForm(request.POST)
print(form)
print(form.errors)
print(1)
if not form.is_valid():
res['s'] = 0
res['info'] = form.errors
print(2)
return HttpResponse(json.dumps(res))
email = request.POST.get('member_email')
print(email)
phone = request.POST.get('member_tel')
username = request.POST.get('member_name')
displyname = request.POST.get('member_nickname')
password = request.POST.get('member_pwd')
member_obj = Member.objects.create(member_email=email,member_tel=phone,member_name=username,member_nickname=displyname,member_pwd=password)
print(3)
if member_obj:
res['s'] = 1
res['info'] = '注册成功'
else:
res['s'] = 2
res['info'] = '注册失败'
response = HttpResponse(json.dumps(res))
request.session['username'] = member_obj.member_name
request.session['member_id'] = member_obj.id
print(4)
return response return render(request, 'app01_enroll.html', locals())

python-Web-django-钩子验证的更多相关文章

  1. python web -- django

    一. 安装 django $ pip install django (env)$ python >> import django >> django.VERSION >& ...

  2. python web——Django架构

    环境:windows/linux/OS 需要的软件:Firefox 浏览器(别的也可以 不过firfox和python的webdriver兼容性好) git版本控制系统(使用前要配置 用户 编辑器可以 ...

  3. python web django base skill

    web框架本质 socket + 业务逻辑 框架实现socket tonado node.js 使用WSGI实现socket django flask 自己实现框架思路 wsgiref socket ...

  4. python web django 2nd level -- 待更新

    练习代码位置 实例代码位置 --> app: myblog Form 利用Form表单验证,自己写的html 思路: 新建一个类 LoginForm(forms.Form) 新建对象 obj = ...

  5. python web框架——扩展Django&tornado

    一 Django自定义分页 目的:自定义分页功能,并把它写成模块(注意其中涉及到的python基础知识) models.py文件 # Create your models here. class Us ...

  6. python三大web框架Django,Flask,Flask,Python几种主流框架,13个Python web框架比较,2018年Python web五大主流框架

    Python几种主流框架 从GitHub中整理出的15个最受欢迎的Python开源框架.这些框架包括事件I/O,OLAP,Web开发,高性能网络通信,测试,爬虫等. Django: Python We ...

  7. 选择一个 Python Web 框架:Django vs Flask vs Pyramid

    Pyramid, Django, 和 Flask都是优秀的框架,为项目选择其中的哪一个都是伤脑筋的事.我们将会用三种框架实现相同功能的应用来更容易的对比三者.也可以直接跳到框架实战(Framework ...

  8. python web框架Django入门

    Django 简介 背景及介绍 Django是一个开放源代码的Web应用框架,由Python写成.采用了MVC的框架模式,即模型M,视图V和控制器C.它最初是被开发来用于管理劳伦斯出版集团旗下的一些以 ...

  9. Django,Flask,Tornado三大框架对比,Python几种主流框架,13个Python web框架比较,2018年Python web五大主流框架

    Django 与 Tornado 各自的优缺点Django优点: 大和全(重量级框架)自带orm,template,view 需要的功能也可以去找第三方的app注重高效开发全自动化的管理后台(只需要使 ...

  10. Python Web开发:Django+BootStrap实现简单的博客项目

    创建blog的项目结构 关于如何创建一个Django项目,请查看[Python Web开发:使用Django框架创建HolleWorld项目] 创建blog的数据模型 创建一个文章类 所有开发都是数据 ...

随机推荐

  1. 去除IntelliJ IDEA中重复代码报灰黄色的下划波浪线

    最近写Java在用IntelliJ IDEA这款传说中的神器IDE,看群里的大神们都在用,也耐不住寂寞想向大神们看齐一下.刚开始用,很多地方也不是很熟,今天遇到一个问题,导入一个项目后,看有些类里的代 ...

  2. 一例swoole_process运行swoole_http_server

    swoole_process swoole_process('执行的文件路径','文件所需的参数');//利用swoole-process执行一个外部脚本 swoole_process__constr ...

  3. JavaScript基础之变量的自增与自减

    一.自增(++) ⑴什么是自增? 通过自增运算符可以使变量在自身的基础上加一: 对于一个变量自增以后,原变量的值会立即自增一: 示例: <!DOCTYPE html> <html l ...

  4. jsp大文件传输断点续传源码

    这里只写后端的代码,基本的思想就是,前端将文件分片,然后每次访问上传接口的时候,向后端传入参数:当前为第几块文件,和分片总数 下面直接贴代码吧,一些难懂的我大部分都加上注释了: 上传文件实体类: 看得 ...

  5. windows驱动开发详解学习笔记

    1. windows驱动分两类,NT式驱动和WDM驱动,后者支持即插即用: 2. DriverEntry是入口函数,传入参数:pDriverObject由IO管理器传入: 3. WDM驱动中,AddD ...

  6. MapBox

    MapBox的地图API大家用过吗 用作网站或者APP的底图,就不用自己架设地图服务器了 发布自己的地图了 这跟Google Map是一样的道理,类似的还有天地图,高德,百度地图API等等. 属于前端 ...

  7. 妙味课堂——JavaScript基础课程笔记

    集中时间把秒微课堂JS的基础课程看完,并且认真完成了课后练习.感觉在JS方面的技能算是入了个门了.课后练习的作业完成的代码我都汇总在了这里.至于视频课的学习笔记,则记录如下. 第01课JS入门基础_热 ...

  8. CodeForces - 369E Valera and Queries(树状数组)

    CodeForces - 369E Valera and Queries 题目大意:给出n个线段(线段的左端点和右端点坐标)和m个查询,每个查询有cnt个点,要求给出有多少条线段包含至少其中一个点. ...

  9. JIRA备份,数据迁移以及小问题

    Jira的备份(切记将许可证号备份) Jira默认会打开自动备份的功能,备份路径为/var/atlassian/application-data/jira/export 管理员账号登录Jira,点击右 ...

  10. iOS真机调试之免费预配(Free provisioning)

    免费预配允许开发者在不加入Applec Developer Program的情况下,可以发布和测试App 注意:免费预配(Free Provisioning)与自动预配(Auto Provisioni ...