zoukankan      html  css  js  c++  java
  • django-form组件

    ########django-form组件########
    
    什么时form组件呢?
        其实就是一个form类,可以检测前端传来的数据,是否合法。
        就好邮件格式对不对,用户名中不能以什么开头,等等之类
    
    form组件的几大用处:
    一、校验字段功能
        1、首先先到导入forms这个模块
        from django import forms
        2、自己写一个类,并且继承forms.Form
        class Myform(forms.Form):
            # 这行代码的意思,name这字段最长位8,最短位3
            name = forms.CharField(max_length=8,min_length=3)
    
        def index(request):
            dic = {'name':'zh'}
            # 这里就是类的实例化,传的参数必须为一个字典
            myform = Myform(dic)
            # 这是对象的绑定方法,它的返回值就是一个布尔类型
            # True表示你传的dic这个字典满足form里的条件,False就是不满足
            # 我们可以通过判断它,再进行逻辑操作,比如该字段符合你的要求,再怎么操作
            if myform.is_valid():
                return HttpResponse('校验成功')
            # 走到这一步,代表当中有字段不符合要求
            # 它的返回值是一个对象,但是它继承了字典,所以你可以通过get取到错误提示
            # 对了,你传的字典的key值必须要和创建的类(Myform)要对应,并且只能多,不能少
            # name_error = myform.errors.get('name')
            # 这样你可以取到name字段出错的原因了
            name_error = myform.errors
            return HttpResponse('校验失败')
    
        ## 总结下:1、Myform的实例化必须传字典
                  2、is_valid()返回值是布尔类型
                  3、errors  调用这个方法,返回值是对象,你可以通过get取值
    
    2、渲染标签功能
    form组件可以在视图函数中使用,也可以在模板中使用
    视图层:
        def index(request):
            myform = Myform()
            return render(request,'index.html',local())
    模板层:
        渲染方式一:
        <form action='' method='post'>
            用户名:{{myform:name}} <br>
            <input type='submit' value = '提交'></input>
        </form>
        # 这里的{{myform:name}} 和你写input框是一样的效果,就是属性比input框多一点
    
        渲染方式二(推荐使用):
        <form action='' method='post'>
            {% for foo in myform%}
                {{ foo.lable }} : {{ foo }}  <br>
            <input type='submit' value = '提交'></input>
        </form>
        # 页面显示都是一样的,foo.lable不是用户名,是name,但是你可以在创建Myform类时
        # 在CharFiel中添加lable='用户名',这样就行了。
    
        渲染方式三:
            <form action='' method='post'>
                {{ myform.as_p }}
            <input type='submit' value = '提交'></input>
        </form>
        # 对,方式三就是这么简单,但是拓展性太差了,对不对,所以不推荐使用它
    
    
    3、渲染错误信息功能
        渲染错误信息,之前不是写了error这个方法嘛,他就是装着错误信息的对象,
        其实就是让它渲染到页面上,这不就是很简单嘛
        拿渲染方式二来举例子吧:
        <form action='' method='post'>
            {% for foo in myform%}
                {{ foo.lable }} : {{ foo }} <span>{{foo.errors.0}}</span><br>
            <input type='submit' value = '提交'></input>
        </form>
    
        # 来讲下为什么不是用get去取错误信息,首先这个foo是什么?它就是你创建的字段
        # 所以直接通过索引取值就好了,那么就应该知道foo.errors貌似就是一个列表对吧
        # 模板渲染时我在后台渲染好了,再返回到前台的,那我可以不可以将错误信息传到前台
        # 让前台执行DOM操作进行渲染呢?
        # 我觉得太麻烦,况且前端我。。。(你懂的)
    
    4、组件的参数配置
        其实在些Myform,下面的字段还有很多参数,我就写写大概有什么用
        max_length    # 代表该字段最长为多少
        min_length    # 代表该字段最短为多少
        error_messages # 这是设置错误信息的属性
        # 例子
        error_messages=
        {'max_length': '最长八位', 'min_length': '最短三位', 'required': '不能为空'}
        required   # 默认值为True,意思是你传来的字段必须有它,没有的话校验失败
        widget=widgets.TextInput()  # 你在模板渲染的时候,就会渲染成Input框,type为text
                                      还有其他类型的input框,自己在看看吧
        对了,在TextInput(),你可以为input添加属性,attrs={'class':'abc'}  写在括号里面
        lable   #这个是不是上面讲到了,lable='用户名'
    
    5、局部钩子
        局部钩子说白了就是写一个函数,但是这个函数名必须为clean_name,这个name是可以改变的,
        你定义的类里,你想对哪个字段写钩子函数,这个name就为那个字段的名字,比如我想为password这个
        字段写钩子函数,那函数名就为clean_password,就这样。
    
        那这个局部钩子有什么用了?
            首先你的程序能走到局部钩子这一步,就说明你传的字典中的字段符合要求,这要记清楚,那么我们在
            取值就从clean_data中取就好了,clean_data里装的是符合要求的数据,是一个字典。
            我们可以从clean_data中取到相应的值再做一次逻辑处理,比如我写clean_name这个局部钩子,
            我可以拿到name,对这个name进行一些操作,名字开头不能是数字,名字中不能有有什么字符,这
            些等等,看你自己的需求,逻辑代码写好了,最后return name 就好了
            
    6、全局钩子
        全局钩子其实作用差不多的,每个字段你可以进行局部钩子进行逻辑书写,这些处理完成之后,有需要的话,
        你再进行全局处理,举个例子就大概能明白,你在写注册用户的时候,是不是有密码,确认密码,你可以进行
        布局钩子处理,处理完毕是不是在进行判断,判断他们是否相等,相等的话,就存到数据库中,不相等就抛个
        异常,对了对了,上面局部钩子忘记写异常,下面讲讲。
        
    
    补充:1、局部钩子,全局钩子所抛出异常的类型为ValidationError,它是在下面这行代码导入
            from django.core.exceptions import ValidationError
         2、局部钩子抛出的异常会添加到该字段中的错误信息中,也就是myform.errors.get(字段名)中
         3、而全局钩子抛出的异常会添加到__all__中,myform.errors.get('__all__')中可以取到
         
    
    好了今天到此结束了!!!!!!!!!
  • 相关阅读:
    HSSFworkbook,XSSFworkbook,SXSSFworkbook区别总结
    var、let、const的区别
    寻找数组中的质数方法
    lintcode刷题笔记(二)
    CUDA11.2环境上MXNet源码和pytorch源码编译
    protobuf的使用(python)
    Hadoop集群安装-CDH5(5台服务器集群)
    Hadoop 2.6.0 HA高可用集群配置详解(一)
    Hadoop系列之(二):Hadoop集群部署
    Hadoop系列之(一):Hadoop单机部署
  • 原文地址:https://www.cnblogs.com/zhuchunyu/p/9998297.html
Copyright © 2011-2022 走看看