python-Web-django-钩子验证
全局钩子验证:
‘’’ 打包前端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-钩子验证的更多相关文章
- python web -- django
一. 安装 django $ pip install django (env)$ python >> import django >> django.VERSION >& ...
- python web——Django架构
环境:windows/linux/OS 需要的软件:Firefox 浏览器(别的也可以 不过firfox和python的webdriver兼容性好) git版本控制系统(使用前要配置 用户 编辑器可以 ...
- python web django base skill
web框架本质 socket + 业务逻辑 框架实现socket tonado node.js 使用WSGI实现socket django flask 自己实现框架思路 wsgiref socket ...
- python web django 2nd level -- 待更新
练习代码位置 实例代码位置 --> app: myblog Form 利用Form表单验证,自己写的html 思路: 新建一个类 LoginForm(forms.Form) 新建对象 obj = ...
- python web框架——扩展Django&tornado
一 Django自定义分页 目的:自定义分页功能,并把它写成模块(注意其中涉及到的python基础知识) models.py文件 # Create your models here. class Us ...
- python三大web框架Django,Flask,Flask,Python几种主流框架,13个Python web框架比较,2018年Python web五大主流框架
Python几种主流框架 从GitHub中整理出的15个最受欢迎的Python开源框架.这些框架包括事件I/O,OLAP,Web开发,高性能网络通信,测试,爬虫等. Django: Python We ...
- 选择一个 Python Web 框架:Django vs Flask vs Pyramid
Pyramid, Django, 和 Flask都是优秀的框架,为项目选择其中的哪一个都是伤脑筋的事.我们将会用三种框架实现相同功能的应用来更容易的对比三者.也可以直接跳到框架实战(Framework ...
- python web框架Django入门
Django 简介 背景及介绍 Django是一个开放源代码的Web应用框架,由Python写成.采用了MVC的框架模式,即模型M,视图V和控制器C.它最初是被开发来用于管理劳伦斯出版集团旗下的一些以 ...
- Django,Flask,Tornado三大框架对比,Python几种主流框架,13个Python web框架比较,2018年Python web五大主流框架
Django 与 Tornado 各自的优缺点Django优点: 大和全(重量级框架)自带orm,template,view 需要的功能也可以去找第三方的app注重高效开发全自动化的管理后台(只需要使 ...
- Python Web开发:Django+BootStrap实现简单的博客项目
创建blog的项目结构 关于如何创建一个Django项目,请查看[Python Web开发:使用Django框架创建HolleWorld项目] 创建blog的数据模型 创建一个文章类 所有开发都是数据 ...
随机推荐
- MySQL 异地 双机房同步之otter
一.背景: 阿里巴巴B2B公司,因为业务的特性,卖家主要集中在国内,买家主要集中在国外,所以衍生出了杭州和美国异地机房的需求, 同时为了提升用户体验,整个机房的架构为双A,两边均可写,由此诞生了ott ...
- Vue数据通信详解
如果有需要源代码,请猛戳源代码 希望文章给大家些许帮助和启发,麻烦大家在GitHub上面点个赞!!!十分感谢 一.前言 组件是 vue.js最强大的功能之一,而组件实例的作用域是相互独立的,这就意味着 ...
- vue 图片滑动登录
前言 最近在研究图片滑动解锁 登录,说是要用阿里的那个验证,但是还是想自己手写下这个Demo 效果图是这样的: 本来是想用canvas 来实现的,但是类,后来还想用css 和图片来代替canvas 其 ...
- Object-C(自学1)
----- 需求索要 自学了下 OBJECt-C ----- 就基础部分一些 和操作 command + R 运行command +B 只编译.m文件 NSlog() = printfNSLog 是 ...
- php类知识 self $this都只能在当前类中使用
$this是当前对象的指针,self是当前类的指针 $this只能用在成员方法中,不能存在于静态方法 self 静态方法和成员方法中都能使用 self可以访问类常量,静态属性,静态方法,成员方法--- ...
- Java-Base64工具类
/* * Base64 encoding and decoding. * Copyright (C) 2001-2004 Stephen Ostermiller * http://ostermille ...
- 进击JavaScript核心 --- (3)面向对象
JS中的对象定义为:无序属性的结合,其属性可以包含基本值.对象或者函数 1.定义对象的方式 (1).Object构造函数 var student = new Object(); student ...
- 附:常见的Jdbc Type 与 Java Type之间的关系
附:常见的Jdbc Type 与 Java Type之间的关系 JDBC Type Java Type CHAR String VARCHAR String LONG ...
- include和require的区别(PHP版本7)
亲自测试了一下,发现include有条件包含require无条件包含这个区别在PHP7版本中(据说PHP5以后)是不存在的了,也就是在if(false){ } 中都不会执行:还有一个返回值的问题,测试 ...
- 从gcc到Makefile简易版
1.Makefile的应用 我们主要用它来编译源代码,生成结果代码,然后把结果代码连接起来生成可执行文件或者库文件.2.Makefle简单例子的深入学习 程序概述:为了连接makefile的流程,我将 ...