这篇文章主要介绍了Python Web框架之Django框架文件上传功能,结合实例形式详细分析了Django框架form表单基于ajax的文件上传功能详细操作技巧,需要的朋友可以参考下
本文实例讲述了Python Web框架之Django框架文件上传功能。分享给大家供大家参考,具体如下:
上传方式:
– Form表单上传文件
– Ajax上传文件
– 基于form表单和iframe自己实现ajax请求
1,创建项目
2,settings配置(注册app01,static路径等等这些)及url添加(略过)
3,views视图函数
form的视图收到了在request.FILES中的文件数据。从上述form来的数据可以通过request.FILES[‘file’]来存取。
特别注意的是,只有当request方法是POST,且发送request的有属性enctype=”multipart/form-data”时,request.FILES中包含文件数据,否则request.FILES为空。
from django.shortcuts import render,redirect,HttpResponse from app01 import models import json import os def upload(request): if request.method == 'GET': img_list = models.Img.objects.all() return render(request,'upload.html',{'img_list': img_list}) elif request.method == "POST": user = request.POST.get('user') fafafa = request.POST.get('fafafa') obj = request.FILES.get('fafafa') # print(obj.name,obj.size) #读取文件名称和大小,返回后台 # print(user,fafafa) file_path = os.path.join('static','upload',obj.name) f = open(file_path, 'wb') for chunk in obj.chunks(): f.write(chunk) f.close() models.Img.objects.create(path=file_path) ret={'status':True,'path':file_path} return HttpResponse(json.dumps(ret))
4,文件操作方法
obj.read()
:从文件中读取整个上传的数据,这个方法只适合小文件;
obj.chunks()
:按块返回文件,通过在for循环中进行迭代,可以将大文件按块写入到服务器中;
obj.multiple_chunks()
:这个方法根据myFile的大小,返回True或者False,当myFile文件大于2.5M(默认为2.5M,可以调整)时,该方法返回True,否则返回False,因此可以根据该方法来选择选用read方法读取还是采用chunks方法
obj.name
:这是一个属性,不是方法,该属性得到上传的文件名,包括后缀,如123.exe;
obj.size
:这也是一个属性,该属性得到上传文件的大小。
5.1 form 上传
<title>Title</title> <div> {% for item in img_list %} {% endfor %} </div>
5.2 原生的ajax Http请求上传文件方法
涉及到两个对象FormData和XMLHttpRequest
利用FormData对象,我们可以通过JavaScript用一些键值对来模拟一系列表单控件,我们还可以使用XMLHttpRequest的send()
方法来异步的提交这个”表单”.比起普通的ajax,使用FormData的最大优点就是我们可以异步上传一个二进制文件.
XMLHttpRequest 是一个API, 它为客户端提供了在客户端和服务器之间传输数据的功能。它提供了一个通过 URL 来获取数据的简单方式,并且不会使整个页面刷新。这使得网页只更新一部分页面而不会打扰到用户。XMLHttpRequest来源[email protected]搞@^&代*@码)网 在 AJAX 中被大量使用。
XMLHttpRequest 是一个 JavaScript 对象,它最初由微软设计,随后被 Mozilla、Apple 和 Google采纳. 如今,该对象已经被 W3C组织标准化. 通过它,你可以很容易的取回一个URL上的资源数据. 尽管名字里有XML, 但 XMLHttpRequest 可以取回所有类型的数据资源,并不局限于XML。 而且除了HTTP ,它还支持file 和 ftp 协议.
语法var myRequest = new XMLHttpRequest();
<title>Title</title> .container img{ width:200px; height:200px; } <div class="container"> {% for img in img_list %} {% endfor %} </div>
5.4 jQuery Ajax上传,同时使用了iframe,一下代码包含了两种方法。即:
- 1-利用JQuery Ajax + FormData进行文件上传
- 2-基于Iframe实现伪Ajax 上传文件
<title>Title</title> .container img{ width: 200px; height: 200px; } <h1>测试Iframe功能</h1><hr /><h1>基于iframe实现form提交</h1> <h1>图片列表</h1><div class="container" id="imgs"> {% for img in img_list %} {% endfor %} </div>
希望本文所述对大家基于Django框架的Python程序设计有所帮助。
以上就是Python Web框架之Django框架文件上传功能详解的详细内容,更多请关注gaodaima搞代码网其它相关文章!