django文件上传下载
2021-04-12 13:27
标签:告诉 更新 处理 图片上传 date tin crm osi shortcut 目录 就这么六步! 一、settings配置文件中配置 二、url路由中配置 三、models.py文件中的写法 四、views视图函数中的写法,上传一个图片: 五、更新上传了的文件(注意,只是会更新数据库中那个字段保存的文件的路径,但是之前上传的文件是不会被自动删除的,需要我们自行再写逻辑来删除之前上传错的或者需要被覆盖的文件。还有就是如果上传的文件名称是相同的那么你会发现数据库中这个字段的路径后面的文件名称会出现一个乱起八糟的随机字符串,这是因为上传的文件名称冲突了,django为了解决这个冲突,给你改了一下你的文件名称。) 六、查看已经上传了的文件(就需要借助我们上面在settings配置文件中和url中的配置了) views.py视图函数的写法: index.html文件中的写法: 在实际的项目中很多时候需要用到下载功能,如导excel、pdf或者文件下载,当然你可以使用web服务自己搭建可以用于下载的资源服务器,如nginx,这里我们主要介绍django中的文件下载。 我们这里介绍三种Django下载文件的简单写法,然后使用第三种方式,完成一个高级一些的文件下载的方法 index.html内容如下 urls.py文件内容如下: view视图函数的写法有一下三种: 方式1: 注意:HttpResponse会直接使用迭代器对象,将迭代器对象的内容存储城字符串,然后返回给客户端,同时释放内存。可以当文件变大看出这是一个非常耗费时间和内存的过程。而StreamingHttpResponse是将文件内容进行流式传输,数据量大可以用这个方法 方式2: 方式3: 三种http响应对象在django官网都有介绍.入口:https://docs.djangoproject.com/en/1.11/ref/request-response/ 推荐使用FileResponse,从源码中可以看出FileResponse是StreamingHttpResponse的子类,内部使用迭代器进行数据流传输。 django文件上传下载 标签:告诉 更新 处理 图片上传 date tin crm osi shortcut 原文地址:https://www.cnblogs.com/saoqiang/p/12397743.html
文件上传
MEDIA_URL = '/media/'
MEDIA_ROOT = os.path.join(BASE_DIR, 'medias').replace('\\', '/')#media即为图片上传的根路径
urlpatterns = [
url(r'^admin/', admin.site.urls),
url(r'^index/', views.index,name='index'),
] + static(settings.MEDIA_URL, document_root=settings.MEDIA_ROOT) #如果单纯的是上传,文件并不用来显示或者读取,就不用加这个
class Book(models.Model):
name = models.CharField(max_length=32)
date1 = models.DateTimeField(auto_now=True,null=True)
date2 = models.DateTimeField(auto_now_add=True,null=True)
img = models.ImageField(upload_to='img',null=True) #写上upload_to,后面指定一个路径,那么将来上传的文件会直接生成到配置文件中的那个medias文件夹中的img文件夹中,不需要我们自己写读取文件内容写入本地文件的操作,django内部帮我们自动处理了
def index(request):
if request.method == 'POST':
print(request.POST)
username = request.POST.get('username')
print('files',request.FILES)
file_obj = request.FILES.get('file')
models.Book.objects.create(
name=username,
img=file_obj,
) #自动就会将文件上传到我们配置的img文件夹中
return render(request,'index.html')
obj = models.Book.objects.get(name='chao2')
obj.img=file_obj
obj.save()
#下面的update方法是不能更新正确更新保存的文件路径的,除非我们自己手动拼接文件路径,然后img=路径来进行update更新
models.Book.objects.filter(name='chao2').update(img=file_obj)
def index(request):
objs = models.Book.objects.all()
return render(request,'index.html',{'objs':objs})
文件下载
urlpatterns = [
url(r'^index/', views.index,name='index'),
url(r'^download/', views.download,name='download'),
]
from django.shortcuts import HttpResponse
def download(request):
file = open('crm/models.py', 'rb') #打开指定的文件
response = HttpResponse(file) #将文件句柄给HttpResponse对象
response['Content-Type'] = 'application/octet-stream' #设置头信息,告诉浏览器这是个文件
response['Content-Disposition'] = 'attachment;filename="models.py"' #这是文件的简单描述,注意写法就是这个固定的写法
return response
from django.http import StreamingHttpResponse #
def download(request):
file=open('crm/models.py','rb')
response =StreamingHttpResponse(file)
response['Content-Type']='application/octet-stream'
response['Content-Disposition']='attachment;filename="models.py"'
return response
from django.http import FileResponse
def download(request):
file=open('crm/models.py','rb')
response =FileResponse(file)
response['Content-Type']='application/octet-stream'
response['Content-Disposition']='attachment;filename="models.py"'
return response
上一篇:2.CSS初试
下一篇:3.CSS样式的三种使用方式