全局钩子验证:

‘’’ 打包前端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. BZOJ 1984: 月下“毛景树” (树链剖分+线段树)

    注意赋值和加法的标记下传优先级.具体看代码. CODE #include <vector> #include <queue> #include <cstdio> # ...

  2. HDU-4300-Clairewd's message(扩展KMP)

    链接: https://vjudge.net/problem/HDU-4300 题意: Clairewd is a member of FBI. After several years conceal ...

  3. JMeter性能测试,完整入门篇(转)

    原文转自:https://blog.csdn.net/lovesoo/article/details/78579547 Apache JMeter是一款纯java编写负载功能测试和性能测试开源工具软件 ...

  4. 什么是favicon.ico?

    ㈠定义 ⑴所谓favicon,即Favorites Icon的缩写,顾名思义,便是其可以让浏览器的收藏夹中除显示相应的标题外,还以图标的方式区别不同的网站. ⑵根据浏览器的不同,Favicon显示也有 ...

  5. 数据库连接windows身份验证、sql验证

    windows身份验证:"server=.;database=Northwind;Integrated Security=True;" sql验证:"server=.;d ...

  6. python 中type和object的关系

    转自:https://segmentfault.com/a/1190000008938763 学习python的同学都知道这么几句话 object类是所有新式类的父类. type是所有类的类. 那么t ...

  7. RabbitMQ安装遇到的问题及解决记录

    提示:若是win10 请注意计算机名称不能有中文 安装Rabbit MQ 需要先安装 Erlang 这里下载版本Erlang OTP22.0 http://www.erlang.org/downloa ...

  8. 牛客网 Wannafly挑战赛3 B.遇见

    遇见 时间限制:C/C++ 1秒,其他语言2秒空间限制:C/C++ 65536K,其他语言131072K64bit IO Format: %lld 题目描述 A和B在同一条路上,他们之间的距离为 k ...

  9. Centos7 内核升级及删除无用内核

    导入key rpm --import https://www.elrepo.org/RPM-GPG-KEY-elrepo.org 安装elrepo的yum源 rpm -Uvh http://www.e ...

  10. python进程间的通信

    from multiprocessing import Queue, Process import time, random # 要写入的数据 list1 = ["java", & ...