使用Django怎么实现文件上传下载功能

  介绍

这篇文章将为大家详细讲解有关使用Django怎么实现文件上传下载功能,文章内容质量较高,因此小编分享给大家做个参考,希望大家阅读完这篇文章后对相关知识有一定的了解。

创建项目:

django-admin  startproject  file_upload   cd  file_upload   python  manage.py  startapp 上传

目录结构:

使用Django怎么实现文件上传下载功能

0.设置。py

LANGUAGE_CODE =, & # 39; zh-Hans& # 39;   时间=TIME_ZONE  & # 39;亚洲/上海# 39;   USE_I18N =,真的   USE_L10N =,真的   时间=USE_TZ 假

1.的url。py

父:

得到django.contrib  import 管理   得到django.urls  import 路径,包括   ,   urlpatterns =, (   ,路径(& # 39;管理/& # 39;,,admin.site.urls),   ,路径(& # 39;上传/& # 39;,,包括(& # 39;uploader.urls& # 39;))   

子:

得到django.contrib  import 管理   得到django.urls  import 路径,包括   得到只import 观点   ,   时间=app_name  & # 39;上传# 39;   ,   urlpatterns =, (   ,路径(& # 39;& # 39;,,views.upload,, name=& # 39;上传# 39;),,#,上传   ,路径(& # 39;列表/& # 39;,,views.list),, #,列表   ,路径(& # 39;下载/& lt; id> & # 39;,, views.download,, name=& # 39;下载# 39;),,#,下载   ,路径(& # 39;删除/& lt; id> & # 39;,, views.delete,, name=& # 39;删除# 39;),,#,删除   )

2.的模型。py

得到django.db  import 模型   得到django.utils  import 时区   ,   & # 39;& # 39;& # 39;   文件记录   & # 39;& # 39;& # 39;   class  FileInfo (models.Model):=,,file_name  models.CharField (max_length=500)=,,file_size  models.DecimalField (max_digits=10, decimal_places=0)=,,file_path  models.CharField (max_length=500)=,,upload_time  models.DateTimeField(默认=timezone.now ())

3.形式。py

得到django  import 形式   ,   & # 39;& # 39;& # 39;   上传表单   & # 39;& # 39;& # 39;   class  UploadForm (forms.Form):=,,file  forms.FileField (   ,小部件=forms.ClearableFileInput (attrs={& # 39;多个# 39;:,真正}),,#,支持多文件上传   ,标签=& # 39;选择文件……& # 39;,   ,help_text=& # 39;最大猴100 # 39;   之前,)

4.的观点。py

得到django.shortcuts  import 呈现   得到django.http  import  HttpResponseRedirect   得到django.http  import  HttpResponseRedirect   得到django.http  import  FileResponse   得到django.template  import  RequestContext   得到django.urls  import 相反   得到django.utils.http  import  urlquote   ,   得到.models  import  FileInfo   得到.forms  import  UploadForm   import 操作系统   ,   ,   #,上传文件   def 上传(请求):   ,# Handle  file 上传==,if  request.method  & # 39;文章# 39;:=,,form  UploadForm (request.POST, request.FILES)   ,if  form.is_valid ():   files 才能=,request.FILES.getlist(& # 39;文件# 39;)   for 才能;f 拷贝文件:   时间=file_info 才能;FileInfo (file_name=f.name, file_size=1, if  0, & lt;, f.size  & lt;, 1024, else  f.size /, 1024年,file_path=os.path.join (& # 39; D: \ \上传# 39;,,f.name))   file_info.save才能()   #,才能上传   destination =,开放才能(os.path.join (“D: \ \ upload",, f.name),, & # 39; wb + & # 39;)   for 才能;chunk 拷贝f.chunks ():   ,,destination.write(块)   destination.close才能()   ,   #,才能返回上传页   return 才能;HttpResponseRedirect(& # 39;/上传/列表# 39;)   ,其他的:=,,form  UploadForm (), #, A 空,unbound 形式   ,return 渲染(请求,,& # 39;上传/upload.html& # 39;,,{& # 39;形式# 39;:,形式})   ,   ,   #,文件列表   def 清单(要求):=,,file_infos  FileInfo.objects.all ()   ,   ,return 渲染(请求,,& # 39;上传/list.html& # 39;,, {& # 39; file_infos& # 39;:, file_infos})   ,   ,   #,下载文件   def 下载(请求,,id):=,,file_info  FileInfo.objects.get (id=id)   ,打印(& # 39;下载的文件名:& # 39;,+,file_info.file_name)=,file 开放(file_info.file_path, & # 39; rb # 39;)=,,response  FileResponse(文件)   ,响应[& # 39;附加# 39;],=,& # 39;附件;文件名=? s" & # 39;, %, urlquote (file_info.file_name)   return 响应   ,   ,   #,删除文件   def 删除(请求,,id):=,,file_info  FileInfo.objects.get (id=id)   ,file_info.delete ()=,,file_infos  FileInfo.objects.all ()   ,   null

使用Django怎么实现文件上传下载功能