Django之文件上传

form表单 上传

html代码:

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <title>Title</title>
</head>
<body>
    <form action="/index/" method="post" enctype="multipart/form-data">
        {% csrf_token %}
        <p><input type="text" name="user" id="user"></p>
        <p><input type="file" name="myFile" id="file"></p>
        <input type="submit">
    </form>
</body>
</html>

django中views:

from django.shortcuts import render
# Create your views here.
import  os
def index(request):

    if request.method=='POST':
        print(request.POST)
        file_obj=request.FILES.get("myFile")

        with open(file_obj.name,"wb") as f:
            for line in file_obj:
                f.write(line)

    return render(request,"index.html")

djang的urls:

from django.conf.urls import url
from django.contrib import admin
from  app01 import  views

urlpatterns = [
    url(r'^admin/', admin.site.urls),
    url(r'^index/', views.index),
]

【注意】文件上传默认存放在项目目录下面。

 ajax上传

FormData是什么呢? 

XMLHttpRequest Level 2添加了一个新的接口FormData.利用FormData对象,我们可以通过JavaScript用一些键值对来模拟一系列表单控件,我们还可以使用XMLHttpRequest的send()方法来异步的提交这个"表单".比起普通的ajax,使用FormData的最大优点就是我们可以异步上传一个二进制文件.
所有主流浏览器的较新版本都已经支持这个对象了,比如Chrome 7+、Firefox 4+、IE 10+、Opera 12+、Safari 5+。
HTML:
</head>
<body>

    <form action="/index/" method="post" enctype="multipart/form-data">
        {% csrf_token %}
        <p><input type="text" name="user" id="user"></p>
        <p><input type="file" name="myFile" id="file"></p>
        <input type="submit">
    </form>
<hr>
<button>ajaxSend</button>


<script>
      $("button").click(function () {

          var formdata=new FormData();
          formdata.append("username",$("#user").val());
          formdata.append("imgFile",$("#file")[0].files[0]);
          formdata.append("csrfmiddlewaretoken",$("[name='csrfmiddlewaretoken']").val());

          $.ajax({
              url:"/index/",
              type:"POST",
              data:formdata,    //
              processData:false,
              contentType:false,
              success:function (data) {
                  console.log(data)
              }
          })
      })
</script>
</body>
</html>

django的views;

from django.shortcuts import render,HttpResponse
# from  app01 import  forms
# Create your views here.

import  os
def index(request):
    if request.is_ajax():
        print("POST:",request.POST)
        print("FILES:",request.FILES)
        return HttpResponse("上传成功")
    return render(request,"index.html")

 结果:

[15/Dec/2017 15:12:40] "POST /index/ HTTP/1.1" 200 12
POST: <QueryDict: {'username': [''], 'csrfmiddlewaretoken': ['gwDeotVXZPLBNZ1FL01DKx3O7XUTpLmHiYDgcSFnmMmymyVBtJamkAU1qlq4Z1Y4']}>
FILES: <MultiValueDict: {'imgFile': [<InMemoryUploadedFile: 微信图片_20170705172111.jpg (image/jpeg)>]}>

 

 

posted @ 2017-12-15 13:28  ShengLeQi  阅读(961)  评论(1)    收藏  举报