Ajax上传文件(异步刷新)
1、setting
#静态资源探测设置 STATIC_URL = '/static/' STATICFILES_DIRS = [ os.path.join(BASE_DIR,'resources'), ]
2、templates
<!upload.html> <!DOCTYPE html> {% load static %} <html lang="en"> <head> <meta charset="UTF-8"> <title>Ajax上传页面</title> <script type="text/javascript" src="{% static 'js/jquery-3.1.1.js' %}"></script> <script type="text/javascript"> function upload_data(){ var formdata = new FormData(); // 使用FormData对象封装Ajax上传的数据 formdata.append("uploadname",$("#username").val()); // 添加用户名数据 formdata.append("uploadfile",$("[name='myfile']")[0].files[0]); // 添加上传数据 // 将csrftoken的值也添加到formdata对象中 formdata.append("csrfmiddlewaretoken",$("[name='csrfmiddlewaretoken']").val()); $.ajax({ //ajax局部刷新 url:"{% url 'myapp:upload' %}", data:formdata, type:"post", contentType:false, //内容解析 不解析 processData:false, //处理数据,设置flase success:function(data){ alert(data); } }); } </script> </head> <body> {% csrf_token %} 用户名:<input type="text" id="username"/> <br/> <input type="file" name="myfile"/> <br/> <input type="button" value="点击上传" onclick="upload_data()"/> </body> </html>
3、views
from django.http import HttpResponse from django.shortcuts import render import os BASE_DIR = os.path.dirname(os.path.dirname(os.path.abspath(__file__))) def go_upload(request): return render(request,'upload.html') def upload(request): username = request.POST["uploadname"] # 接收上传文本 upload_obj = request.FILES.get("uploadfile") # 接收上传文件 dest_path = os.path.join(BASE_DIR,'upload','images',upload_obj.name) # 拼凑上传文件地址 with open(dest_path,'wb') as f: for chunk in upload_obj.chunks(): f.write(chunk) return HttpResponse(username+",您的文件已经成功上传!")
4、urls