全局钩子验证:

‘’’ 打包前端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. Spring 事务相关

    事务类型 数据库事务类型有本地事务和分布式事务: 本地事务:就是普通事务,能保证单台数据库上的操作的ACID,被限定在一台数据库上: 分布式事务:涉及两个或多个数据库源的事务,即跨越多台同类或异类数据 ...

  2. Systemd-journalctl日志管理

    Systemd 统一管理所有 Unit 的启动日志.带来的好处就是,可以只用journalctl一个命令,查看所有日志(内核日志和应用日志).日志的配置文件/etc/systemd/journald. ...

  3. 搭建私有CA

    一.实验目的 搭建私有CA并使其可以实现公司内部的的签名服务. 二.实验环境: 系统架构:Centos7(服务器).Centos6(需要申请证书的服务器)需要的软件包:openssl.openssl- ...

  4. 一次使用自定义 Http Header 引发的血案

    一次使用自定义 Http Header 引发的血案 HttpClient Http Header 自定义 nginx 不转发  起因 最近在整理我们产品的 OpenAPI Demo (Python.C ...

  5. web添加学生信息(首发web)

    程序思路,先在JSP上画好页面,然后再创建一Servlet文件用于判断在网页上操作是否正确,还需要与数据库相连接,用DBUtile文件连接数据库,用Dao层来实现数据的增加,用Service来服务于D ...

  6. js 实现深拷贝

    在ECMAScript变量中包含两种不同类型的值:基本类型值和引用类型值. 基本类型值:Undefined.Null.Boolean.Number.String 引用类型值:Object.Array. ...

  7. RobotFramework 截取中文中的数字比较时长

    先看下需求,这个报表中有个时长,需要对昨日和前日的时长进行比较,我们获取到的元素是例如“9分43秒”这样的格式 1.首先要讲中文中的分和秒分别提取出来 提取python代码如下: import res ...

  8. java+批量下载大文件

    我们平时经常做的是上传文件,上传文件夹与上传文件类似,但也有一些不同之处,这次做了上传文件夹就记录下以备后用. 这次项目的需求: 支持大文件的上传和续传,要求续传支持所有浏览器,包括ie6,ie7,i ...

  9. mysql gis基本使用

    # 插入空间数据 INSERT INTO `t_pot` VALUES ('1', '北京', POINT(116.401394,39.916042)); INSERT INTO `t_pot` VA ...

  10. python3 使用flask连接数据库出现“ModuleNotFoundError: No module named 'MySQLdb'”

    本文链接:https://blog.csdn.net/Granery/article/details/89787348 在使用python3连接MySQL的时候出现了 ‘ModuleNotFoundE ...