zoukankan      html  css  js  c++  java
  • Django框架 之 Form表单和Ajax上传文件

    浏览目录

    Form表单上传文件

    html

    <h3>form表单上传文件</h3>
    
    
    <form action="/upload_file/" method="post" enctype="multipart/form-data">
        <p><input type="file" name="upload_file_form"></p>
        <input type="submit">
    </form>

    注意:必须添加enctype="multipart/form-data属性。

    view

    def index(request):
    
        return render(request,"index.html")
    
    
    def upload_file(request):
        print("FILES:",request.FILES)
        print("POST:",request.POST)
        return HttpResponse("上传成功!") 

    Ajax上传文件

    什么是FormData

    XMLHttpRequest Level 2添加了一个新的接口FormData.利用FormData对象,我们可以通过JavaScript用一些键值对来模拟一系列表单控件,我们还可以使用XMLHttpRequest的send()方法来异步的提交这个"表单".比起普通的ajax,使用FormData的最大优点就是我们可以异步上传一个二进制文件.

    所有主流浏览器的较新版本都已经支持这个对象了,比如Chrome 7+、Firefox 4+、IE 10+、Opera 12+、Safari 5+。

    html

    <h3>Ajax上传文件</h3>
    
    <p><input type="text" name="username" id="username" placeholder="username"></p>
    <p><input type="file" name="upload_file_ajax" id="upload_file_ajax"></p>
    
    <button id="upload_button">提交</button>
    {#注意button标签不要用在form表单中使用#}
    
    <script>
        $("#upload_button").click(function(){
    
            var username=$("#username").val();
            var upload_file=$("#upload_file_ajax")[0].files[0];
    
            var formData=new FormData();
            formData.append("username",username);
            formData.append("upload_file_ajax",upload_file);
    
    
            $.ajax({
                url:"/upload_file/",
                type:"POST",
                data:formData,
                contentType:false,
                processData:false,
    
                success:function(){
                    alert("上传成功!")
                }
            });
    
    
        })
    </script>
    
     注意:contentType:false,   processData:false, 必不可少。

    views.py 

    def index(request):
      
        return render(request,"index.html")
      
      
    def upload_file(request):
        print("FILES:",request.FILES)
        print("POST:",request.POST)
        return HttpResponse("上传成功!") 

    伪造Ajax上传文件

    iframe标签

    <iframe> 标签规定一个内联框架。

    一个内联框架被用来在当前 HTML 文档中嵌入另一个文档。

    示例:

    <iframe src="http://www.baidu.com" width="1000px" height="600px"></iframe>  

    iframe+form

    <h3>伪造Ajax上传文件</h3>
    <form action="/upload_file/" method="post" id="form2" target="ifr" enctype="multipart/form-data">
        <p>
            <iframe name="ifr" id="ifr"></iframe></p>
        <p><input type="file" name="upload_file"></p>
        <p><input type="text" name="user"></p>
    
        <input type="button" value="提交" id="submitBtn">
    </form>
    
    <script>
    
    
    
        $("#submitBtn").click(function(){
    
            $("#ifr").load(iframeLoaded);
            $("#form2").submit();
    
    
        });
    
        function iframeLoaded(){
            alert(123)
        }
    
    </script>  

    views

    def index(request):
     
        return render(request,"index.html")
     
    def upload_file(request):
        print("FILES:",request.FILES)
        print("POST:",request.POST)
        return HttpResponse("上传成功!")
    

      

  • 相关阅读:
    原型模式
    哈希表原理
    Pow共识算法
    C++虚函数的工作原理
    TCP三次握手与四次分手
    TCP重置报文段及RST常见场景分析
    Ping、Traceroute工作原理
    ARP协议
    Rust生命周期bound用于泛型的引用
    Linux下core dump
  • 原文地址:https://www.cnblogs.com/gaoya666/p/8854919.html
Copyright © 2011-2022 走看看