Form 组件的学习
学习链接:http://www.cnblogs.com/haiyan123/p/7778888.html
Form组件可以做的几件事情:
1、用户请求数据验证
2、自动生成错误信息
3、打包用户提交的正确信息
4、如果其中有一个错误了,其他的正确这,保留上次输入的内容
4、自动创建input标签并可以设置样式
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 | ################################# views.py #################################### from django.shortcuts import render from django.shortcuts import redirect from django.shortcuts import HttpResponse from django import forms from django.forms import fields # 创建一个规则,创建的规则必须继承Form class F1Form(forms.Form): #创建字段,本质上就是设定正则表达式 user = fields.CharField( max_length = 18 , / / 字段条件 min_length = 6 , required = True , / / 是否是必填的 error_messages = { 'required' : '用户名不能为空' , 'max_length' : '太长了' , 'min_length' : '太短了' , 'invalid' : '..' } / / 自定义错误内容 ) pwd = fields.CharField(required = True ,min_length = 32 ) age = fields.IntegerField( required = True ) email = fields.EmailField( required = True , min_length = 8 ) # 下面就是使用规则了,将输入框中的数据和规则进行正则匹配 def f1(request): if request.method = = 'GET' : obj = F1Form() return render(request, 'f1.html' ,{ 'obj' :obj}) else : obj = F1Form(request.POST) / / 这个obj有用户输入的内容,也有错误提示信息 # 是否全部验证成功,这里我们看一下Django中的Form组件的is_valid的校验机制(https://www.cnblogs.com/aaronthon/p/9117439.html) #先来归纳一下整个流程 #(1)首先is_valid()起手,看seld.errors中是否值,只要有值就是flase #(2)接着分析errors.里面判断_errors是都为空,如果为空返回self.full_clean(),否则返回self._errors #(3)现在就要看full_clean(),是何方神圣了,里面设置_errors和cleaned_data这两个字典,一个存错误字段,一个存储正确字段。 #(4)在full_clean最后有一句self._clean_fields(),表示校验字段 #(5)在_clean_fields函数中开始循环校验每个字段,真正校验字段的是field.clean(value),怎么校验的不管 #(6)在_clean_fields中可以看到,会将字段分别添加到_errors和cleaned_data这两个字典中 #(7)结尾部分还设置了钩子,找clean_XX形式的,有就执行。执行错误信息也会添加到_errors中 #(8)整个校验过程完成 if obj.is_valid(): # 用户提交的数据 print ( '验证成功' ,obj.cleaned_data) return redirect( 'http://www.xiaohuar.com' ) else : print ( '验证失败' ,obj.errors) return render(request, 'f1.html' ,{ 'obj' :obj}) ###################################################################### html 文件 ####################################################################### <!DOCTYPE html> <html lang = "en" > <head> <meta charset = "UTF-8" > <title>Title< / title> < / head> <body> <form id = "fm" action = "/f1.html" method = "POST" > #<p><input type="text" name="user" />{{ obj.errors.user.0 }}</p> <p>{{ obj.user }}{{ obj.errors.user. 0 }}< / p> <p>{{ obj.pwd }}{{ obj.errors.pwd. 0 }}< / p> <p>{{ obj.age }}{{ obj.errors.age. 0 }}< / p> <p>{{ obj.email }}{{ obj.errors.email. 0 }}< / p> < input type = "submit" value = "提交" / > < / form> <script src = "/static/jquery-3.1.1.js" >< / script> < / body> < / html> {{ obj.user }} 这个是为了生成html代码(就是上面的 input 框的html代码) 因为如果使用上面的 input 框的代码的话,在我们输入完所有内容后,点击提交 所有框内的内容都消失了,只有了错误提示(正确的和错误的输入数据都刷新了) obj.errors.user. 0 这里. 0 的左右是,因为会可能有多个错误,那么我们拿第一条就可以了 |
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 10年+ .NET Coder 心语,封装的思维:从隐藏、稳定开始理解其本质意义
· .NET Core 中如何实现缓存的预热?
· 从 HTTP 原因短语缺失研究 HTTP/2 和 HTTP/3 的设计差异
· AI与.NET技术实操系列:向量存储与相似性搜索在 .NET 中的实现
· 基于Microsoft.Extensions.AI核心库实现RAG应用
· 10年+ .NET Coder 心语 ── 封装的思维:从隐藏、稳定开始理解其本质意义
· 地球OL攻略 —— 某应届生求职总结
· 提示词工程——AI应用必不可少的技术
· Open-Sora 2.0 重磅开源!
· 周边上新:园子的第一款马克杯温暖上架