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的数据模型 创建一个文章类 所有开发都是数据 ...
随机推荐
- BZOJ 1984: 月下“毛景树” (树链剖分+线段树)
注意赋值和加法的标记下传优先级.具体看代码. CODE #include <vector> #include <queue> #include <cstdio> # ...
- HDU-4300-Clairewd's message(扩展KMP)
链接: https://vjudge.net/problem/HDU-4300 题意: Clairewd is a member of FBI. After several years conceal ...
- JMeter性能测试,完整入门篇(转)
原文转自:https://blog.csdn.net/lovesoo/article/details/78579547 Apache JMeter是一款纯java编写负载功能测试和性能测试开源工具软件 ...
- 什么是favicon.ico?
㈠定义 ⑴所谓favicon,即Favorites Icon的缩写,顾名思义,便是其可以让浏览器的收藏夹中除显示相应的标题外,还以图标的方式区别不同的网站. ⑵根据浏览器的不同,Favicon显示也有 ...
- 数据库连接windows身份验证、sql验证
windows身份验证:"server=.;database=Northwind;Integrated Security=True;" sql验证:"server=.;d ...
- python 中type和object的关系
转自:https://segmentfault.com/a/1190000008938763 学习python的同学都知道这么几句话 object类是所有新式类的父类. type是所有类的类. 那么t ...
- RabbitMQ安装遇到的问题及解决记录
提示:若是win10 请注意计算机名称不能有中文 安装Rabbit MQ 需要先安装 Erlang 这里下载版本Erlang OTP22.0 http://www.erlang.org/downloa ...
- 牛客网 Wannafly挑战赛3 B.遇见
遇见 时间限制:C/C++ 1秒,其他语言2秒空间限制:C/C++ 65536K,其他语言131072K64bit IO Format: %lld 题目描述 A和B在同一条路上,他们之间的距离为 k ...
- Centos7 内核升级及删除无用内核
导入key rpm --import https://www.elrepo.org/RPM-GPG-KEY-elrepo.org 安装elrepo的yum源 rpm -Uvh http://www.e ...
- python进程间的通信
from multiprocessing import Queue, Process import time, random # 要写入的数据 list1 = ["java", & ...