• Python Day 67 Dango框架图解(总结)、Wsgiref和uwsgi、前后端传输数据的编码格式、From表单和Ajax方式在前端往后端发送文件、补充一下页面清缓存


      ##Django框架图解

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

    #前后端传输数据的编码格式
        1.urlencoded 
        2.formdata 
        3.application/json

      ##From表单和Ajax方式在前端往后端发送文件

    form表单默认的编码格式是urlencoded不支持发文件(只能把文件名发过去)
    它所对应数据格式 username=jason&password=123
    
    request.POST只能解析urlencoded数据格式的数据  
    formdata django会帮你把文件数据取出来  放入request.FILES里面   专门用来传文件的
    
    
    Ajax默认提交的编码格式也是urlencoded
    当用ajax传输json格式的数据时候 django不会做任何处理
    数据以二进制形式放在request.body中 你可以手动解码加反序列化拿到对应的字典格式数据
      Ajax发送json格式数据
      $.ajax({
                url:'',  // 不写默认朝当前页面所在的url地址提交
                type:'post',
                contentType:'application/json',//修改默认的编码格式
                data:JSON.stringify({'name':'jason','csrfmiddlewaretoken':'{{ csrf_token }}'}), //将数据修改为json格式
                success:function (data) {
                    alert(data)
                }
            }) ajax发送文件 利用js内置的FormData对象
    def index(request):
        if request.method == 'POST':
            print(request.POST)
            print(request.FILES)
            # file_obj = request.FILES.get('myfile')
            # print(file_obj.name)  # 查看当前文件对象的文件名
            #form表单传过来的数据写入服务器本地文件(注意:编码不是默认的urlencoded,而是修改成enctype="multipart/form-data">)
            # with open(file_obj.name,'wb') as f:
            #     for line in file_obj:
            #         f.write(line)
    
            #ajax发过来的数据是以二进制数据单独在request.body中,可进行解码然后序列化得到数据字典格式
            # print(request.body)
            # bytes_str = request.body
            # res = json.loads(bytes_str.decode('utf-8'))
            # print(res,type(res))
        return render(request,'index.html')
    后端核心代码
    <!DOCTYPE html>
    <html>
    <head>
        <meta charset="utf-8">
        <title>Title</title>
        <script src="https://cdn.bootcss.com/jquery/3.4.1/jquery.min.js"></script>
    </head>
    <body>
    {#<form action="" method="post" enctype="multipart/form-data">#}
    {#    {% csrf_token %}#}
    {#    <p>username:<input type="text" name="username"></p>#}
    {#    <p>password:<input type="password" name="password"></p>#}
    {#    <p>image:<input type="file" name="myfile"></p>#}
    {#    <input type="submit">#}
    {#</form>#}
    
    <input type="file" name="myfile" id="d2">
    <button id="d1">点我</button>
    
    <script>
        $('#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)
                }
    
            })
        })
    </script>
    </body>
    </html>
    前端代码示例

     

     

       ##补充一下页面清缓存

     

  • 相关阅读:
    意料之外,情理之中,Spring.NET 3.0 版本发布-
    学习究竟是为了什么?
    测量软件应用系统的聚合复杂度【翻译稿】
    关键字New,如阴魂不散
    选择IT事业,意味着终身学习
    华为机试001:字符串最后一个单词的长度(华为OJ001)
    C++版
    C++版
    C++版-剑指offer 面试题6:重建二叉树(Leetcode105. Construct Binary Tree from Preorder and Inorder Traversal) 解题报告
    C++版
  • 原文地址:https://www.cnblogs.com/liangzhenghong/p/11226088.html
Copyright © 2020-2023  润新知