• Form 组件的学习


    学习链接:http://www.cnblogs.com/haiyan123/p/7778888.html

    Form组件可以做的几件事情:

      1、用户请求数据验证

      2、自动生成错误信息    

      3、打包用户提交的正确信息

      4、如果其中有一个错误了,其他的正确这,保留上次输入的内容

      4、自动创建input标签并可以设置样式

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

      

  • 相关阅读:
    ※剑指offer系列51:二叉搜索树的第k个结点
    ※剑指offer系列50:序列化二叉树
    sqlserver添加表注释、字段注释
    3-实体数据模型与LINQ-where&OfType
    3-实体数据模型与LINQ-Select
    Jquery 在子页面上设置父页面元素的值
    开发注意事项
    函数的进阶
    文件操作的相关内容
    基本数据类型----dict
  • 原文地址:https://www.cnblogs.com/smail-bao/p/9968725.html
Copyright © 2020-2023  润新知