您的位置:首页 > 编程语言 > Go语言

Django之Form验证初阶实战示例(验证篇二)

2019-01-26 06:00 169 查看
版权声明:本作品采用知识共享署名-非商业性使用-相同方式共享 4.0 国际许可协议进行许可。本文为博主原创文章,转载请附上博文链接! https://blog.csdn.net/Burgess_zheng/article/details/86653896

上一篇:Django之Form验证初识(Form验证篇一)点击跳转
目录篇:Django之Form及ModelForm目录篇 点击跳转
下一篇:Django之Form验证进阶常用字段注释示例(验证篇三)点击跳转

目录

1.创建Django项目

Django之创建项目【二】:https://blog.csdn.net/Burgess_zheng/article/details/86505526

2.创建app(并且app目录下创建一个urls.py文件)

进入项目目录下
创建app命令:
   F:\Burgess\Python\pycharm实验脚本\test\project_burgess>python manage.py startapp burgess_form

3.定义请求的URL路由分发

路径:project_burgess/project_burgess/urls.py

[code]from django.contrib import admin
from django.urls import path,re_path #Django版本2.0以上
from project_burgess import views
from django.conf.urls import url  #Django2.0
from django.conf.urls import include

urlpatterns = [
path('admin/', admin.site.urls),

#form
re_path('burgess_form/', include("burgess_form.urls")),
# url(r'^burgess_form/', include("burgess_form.urls")),

]

4.定义app下的URL路由

路径:project_burgess/burgess_form/urls.py

[code]__author__ = "Burgess Zheng"
#!/usr/bin/env python
#-*- coding:utf-8 -*-
from django.urls import path,re_path #Django版本2.0以上
from burgess_form import views
from django.conf.urls import url  #Django2.0

urlpatterns = [
re_path('fm/',views.fm),
#url(r'^fm/', views.fm),
]

5.url对应函数

1.自定义form字段验证类
2.实例化form对象(初始化信息)并把该form对象对象返回前端(前端可根据该对象调用字段相关信息)
3.前端提交的数据进行验证提取正确or错误信息及响应错误信息(把form对象返回,前端可以调用验证错误信息)

路径:project_burgess/burgess_form/views.py

[code]
from django.shortcuts import render
# Create your views here.
__author__ = "Burgess Zheng"

from django import forms
from django.forms import fields
from django.forms import widgets

class FM(forms.Form):
#字段本身只做验证
user = fields.CharField(
error_messages={'required':'用户名不能为空.'},
widget=widgets.Textarea(attrs={'class':'c1'}),
#定义插件:修改form生成的input标签type类型为:多行文本 添加class='c1'
label="用户名",
# initial='请输入用户名',
)
pwd = fields.CharField(
max_length=12,
min_length=6,
error_messages={'required':'密码不能为空.',
'min_length':'密码长度不能小于6',
'max_length': '密码长度不能大于12',},
widget=widgets.PasswordInput
)
email = fields.EmailField(error_messages={
'required': '邮箱不能为空.',
'invalid':'邮箱格式错误',
})
f = fields.FileField()

p = fields.FilePathField(path='burgess_form')

city = fields.ChoiceField(
choices=[(0,'上海'),(1,'广州'),(2,'深圳')]
)

mcity = fields.MultipleChoiceField(
choices=[(0,'上海'),(1,'广州'),(2,'深圳')]
)

def fm(request):
if request.method == "GET":
#获取编辑的默认数据,从数据库拿弄成字典
dic ={
"user":'r1',
"pwd" :'123123',
"email":'sdsfs',
"city":1,
"mcity":[1,2],
}
obj = FM(initial=dic) #示例话form对象并且进行初始化标签数据(也就是form生成的标签字段值)
return render(request,'fm.html',{'obj':obj})
#前端可根据obj该form对象进行应用字段标签和错误信息
elif request.method == "POST":
#获取用户所有的数据
#每条数据请求的验证
#验证成功:获取所有的正确的信息
#验证失败:显示错误信息
#实现以上自己写正则表达式也可以做到,但是代码量太大
#所有django提供个form组件
obj = FM(request.POST,request.FILES) #把接收的数据当做实参
#request.FILES 接收文件

r1 = obj.is_valid()#进行验证,验证以后,成功返回true,失败返回false
print(r1)
if r1:
#如果上传文件提交的话,数据也在obj.cleaned_data,key为f,数据为value,
# 通过我们之前学的接收上传数据就可以了
print(obj.cleaned_data)#成功打印用户输入的数据(字典形式)

# models.UserInf.objects.create(**obj.cleaned_data)
#如果输入正确,获取的字典形式数据直接就添加到数据库
else:
#ErrorDict
print(obj.errors['user'][0])#验证不成功,打印错误(字符串标签显示)
print(obj.errors.as_json())  # 验证不成功,打印错误(字典显示)
return render(request,'fm.html',{'obj':obj})
#一定要返回obj该form对象,这样前端才可以调用错误信息

return render(request,'fm.html')

6.前端通过form对象调用字段相关信息

涉及csrf:Django之CSRF XSS原理解析【交互篇四】https://blog.csdn.net/Burgess_zheng/article/details/86548425

路径:project_burgess/templates/fm.html

[code]<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<title>Title</title>
</head>
<body>
<form action="/burgess_form/fm/" method="POST" enctype="multipart/form-data">
{% csrf_token %}
<p>{{ obj.user.label }}{{ obj.user }}{{ obj.errors.user.0 }}</p>
<!--
obj.user.label: 调用我们自定义form对象的字段名
obj.user:调用我们自定义form对象的标签
obj.errors.user.0 #调用我们自定义对象的验证错误信息标签
-->
<p>{{ obj.pwd }}{{ obj.errors.pwd.0 }}</p>
<p>{{ obj.email }}{{ obj.errors.email.0 }}</p>
<p>{{ obj.f }}{{ obj.errors.f.0 }}</p>
<p>{{ obj.p }}</p>
<p>{{ obj.city }}</p>
<p>{{ obj.mcity }}</p>
<input type="submit"  value="提交"/>

<p>----三种比较简单的方法如下(不推荐,自定制差)------</p>
<p>------------obj.as_p-------------</p>
{{ obj.as_p }}
<input type="submit"  value="提交"/>

<p>-------------as_ul---------------</p>
{{ obj.as_ul }}
<input type="submit"  value="提交"/>

<p>-------------as_table----- -------</p>
<table>
{{ obj.as_table }}
</table>
<input type="submit"  value="提交"/>

</form>

</body>
</html>

7.启动Django

手动:python manage.py runserver 127.0.0.1:8000

pycharm:

8.浏览器访问URL结果

get请求

注释掉3中简单的的标签应用

正确点击提交

后台查看

错误提交(后端错误是注释掉的)

提交前

提交后

后台查看

上一篇:Django之Form验证初识(Form验证篇一)点击跳转
目录篇:Django之Form及ModelForm目录篇 点击跳转
下一篇:Django之Form验证进阶常用字段注释示例(验证篇三)点击跳转

 

内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: