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 的左右是,因为会可能有多个错误,那么我们拿第一条就可以了

  

posted @   BigBao的博客  阅读(220)  评论(0编辑  收藏  举报
编辑推荐:
· 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 重磅开源!
· 周边上新:园子的第一款马克杯温暖上架
点击右上角即可分享
微信分享提示