zoukankan      html  css  js  c++  java
  • forms组件

    上周内容补充:

      前后端数据传输的编码格式:

        1.urlencoded

        2.formdata

        3.appliation/json

    web中的请求过程中http格式的form请求基本包含:

      请求首行  POST  HTTP/1.1

      请求头(k:v键值对)

      标识编码:编码格式

      请求体

      form表单默认的编码格式是 urlencoded 不支持 发文件(只能把文件名发送过去)

      form表单所对应的数据格式  例如: username=jason&password=123

      request.POST只能解析 urlencoded 数据格式的数据

      formdata django 会帮你把文件数据取出来 放入request.FILES里面   专门用来传文件的

    web中用Ajax传输数据的格式:

      Ajax默认提交的编码格式也是 urlencoded

      当用 ajax 传输 json 格式的数据的时候 django 不会做任何的处理,

      数据以二进制的形式放在 request.body 中可以手动解码加反序列化拿到对应的字典格式数据 

      ajax 发送文件    利用js内置的FormData对象  

      Ajax发送json格式数据:
        $.ajax({
            url:'', // 不写默认朝当前页面所在的url地址提交
            type:'post',
            contentType:'application/json',
            data:JSON.stringify({'name':'jason','csrfmiddlewaretoken':'{{ csrf_token }}'}),
            success:function (data) {
                      alert(data)
            }
          }) 

      Ajax发送文件格式数据:
        $('#d1').click(function () {
          // 如果用ajax发送文件 需要使用内置对象FormData
          var formData = new FormData(); // 生成一个内置对象
          // 内置对象formdata既可以传普通的键值对,也可以传文件
          formData.append('name','jason'); // 普通键值对
          formData.append('password','123');
          // 传文件
          var fileObj = $('#d2')[0].files[0]; // 先获取标签对象 转成原生js对象 通过内置的files方

                          法拿到列表 然后去索引0拿到文件对象
          formData.append('myfile',fileObj);
          $.ajax({
            url:'', // 不写默认朝当前页面所在的url地址提交
            type:'post',
            // 注意ajax在发送文件的时候 需要你手动指定两个特殊的参数


            contentType:false, // 不要用任何编码 使用我formdata自带的编码即可
            processData:false, // 浏览器不要处理我的数据 是什么就什么

            data:formData,
            success:function (data) {
                  alert(data)
                      }

                    })
                  })

    form组件的应用:

    一、forms组建的主要功能:

      1.将前端渲染展示页面,获取用户输入

      2.将数据发送给后端进行数据的合法性校验

      3.将不合法的提示信息展示给用户看

    二、数据的校验:

      1.前端

      2.后端

      数据的校验前端可以没有,但后端一定要做!

    三、 forms组件能实现具体功能:

     1.校验数据:

       forms组件的校验数据的使用

       1.定义一个继承forms.Form一个类

       from django import forms

         class MYForm(forms.Form):    

           username = forms.CharField(max_length=6) # username最长只能是6位
           password = forms.CharField(max_length=8,min_length=3) # password最长8位 最短3位

        2.给组件传参数(字典的显示方式): 

        obj = views.MyForm({'username':'egondsb','password':'12','email':'123@qq.com'})

       3.查看数据是否合法:

        obj.is_valid()

       4.查看所有校验通过的数据:

        obj.cleaned_data
        {'email': '123@qq.com'}

       5.查看所有没有通过的数据:

         obj.errors

          """
          {
            'username': ['Ensure this value has at most 6 characters (it has 7).'],
            'password': ['Ensure this value has at least 3 characters (it has 2).']}
          """

      2.渲染标签:

      forms组件只能帮你渲染 获取用户输入(输入框 选择框 下拉框...)的标签提交按钮也得自己写

      form表单取消前端校验功能
      <form action="" method="post" novalidate>

      forms组件当前端输入的信息不合法的时候 页面上的数据保留不会刷新  这样方便用户修改

      3.展示提示信息: 

      {% for foo in form_obj %}
      <p>
        {{ foo.label }}{{ foo }}
        <span>{{ foo.errors.0 }}</span>
      </p>
      {% endfor %}

      4.forms组件的钩子函数:

      

    def clean_username(self):
      # 用户名中不能有666
      username = self.cleaned_data.get('username')
      if '666' in username:
      self.add_error('username','光喊666是不行的')
      return username

    # 全局钩子
      def clean(self):
        # 获取密码和确认密码比对
        password = self.cleaned_data.get('password')
        confirm_password = self.cleaned_data.get('confirm_password')
        if not password == confirm_password:
        self.add_error('confirm_password','两次密码不一致')
        return self.cleaned_data

    django中测试脚本书写
    import os
    import sys

    if __name__ == "__main__":
      os.environ.setdefault("DJANGO_SETTINGS_MODULE", "day66.settings")
      import django
      django.setup()

    from app01 import models
    print(models.Userinfo.objects.all())

  • 相关阅读:
    关于.NET2.0下的脱机文件App_Offline.htm文件
    VS2005中安装AJAX指南
    Ajax中“Sys未定义”错误的解决方法汇总
    GridView控件模板列中的按钮单击时,在RowDataBound事件中获取该行行号
    用户控件中使用User.Identity
    同一个页面中的不同Button分别验证某一部分输入控件
    hdu Tempter of the Bone
    acm steps chapter1总结
    ORACLE中的TOPN查询(TOPN分析),分页查询
    MySQL中如何实现select top n
  • 原文地址:https://www.cnblogs.com/sry622/p/11226988.html
Copyright © 2011-2022 走看看