Django学习之文件上传与下载


Posted in Python onOctober 06, 2019

本文实例为大家分享了Django文件上传与下载的具体代码,供大家参考,具体内容如下

文件上传

1.新建django项目,创建应用stu: python manage.py startapp stu

2.在配置文件setting.py INSTALLED_APP 中添加新创建的应用stu

3.配置urls,分别在test\urls 和子路由stu\urls 中

#test\urls
urlpatterns = [
 url(r'^admin/', admin.site.urls),
 url(r'^student/',include('stu.urls'))
]

#stu\urls
from django.conf.urls import url
import views

urlpatterns=[
 url(r'^$',views.index_view)
]

4.创建视图文件index_view.py

def index_view(request):
 if request.method=='GET':
 return render(request,'index.html')
 elif request.method=='POST':
 uname = request.POST.get('uname','')
 photo = request.FILES.get('photo','')
 import os
 if not os.path.exists('media'): #判断是否存在文件media,不存在则创建一个
  os.makedirs('media')
 with open(os.path.join(os.getcwd(),'media',photo.name),'wb') as fw: #以读的方式打开目录为/media/photo.name 的文件 别名为fw
  fw.write(photo.read()) #读取photo文件并将其写入(一次性读取完)


 for chunk in fw.chunks:
  
fw.write(chunk)
 return HttpResponse('注册成功')
 else:
 return HttpResponse('页面跑丢了,稍后再试!')

5.创建模板文件

<!DOCTYPE html>
<html lang="en">
<head>
 <meta charset="UTF-8">
 <title>Title</title>
</head>
<body>
<form action="/student/" method="post" enctype="multipart/form-data">
 {% csrf_token %}
 <p>
 <lable>姓名:<input type="text" name ='uname'></lable>
 </p>
 <p>
 <lable>头像:<input type="file" name ='photo'></lable>
 </p>
 <p>
 <lable><input type="submit" value="注册"></lable>
 </p>
</form>
</body>
</html>

文件存在数据库中并查询所有信息

1.创建模型类

# -*- coding: utf-8 -*-
from __future__ import unicode_literals

from django.db import models

# Create your models here.
from django.db import models
class Student(models.Model):
 sid = models.AutoField(primary_key=True)
 sname = models.CharField(max_length=30)
 photo = models.ImageField(upload_to='img')
 class Meta:
 db_table='t_stu'

 def __unicode__(self):
 return u'Student:%s' %self.sname

2.修改配置文件setting.py 添加新内容

MEDIA_URL = '/media/'
MEDIA_ROOT = os.path.join(BASE_DIR,'media')

3.通过创建的模型类 来映射数据库表

python mange.py makemigrations stu

python mange.py migrate

4.添加新的子路由地址

urlpatterns=[
 url(r'^$',views.index_view),
 url(r'^upload/$',views.upload_view),
 url(r'^show/$',views.showall_view)
]

5.在views文件中添加新的函数 showall_view()

def upload_view(request):
 uname = request.POST.get('uname','')
 photo = request.FILES.get('photo','')
 #入库操作
 Student.objects.create(sname = uname,photo=photo)
 return HttpResponse('上传成功')

def showall_view(request):

 stus = Student.objects.all()
 return render(request,'show.html',{'stus':stus})

6.创建模板 显示查询到所有的信息

<!DOCTYPE html>
<html lang="en">
<head>
 <meta charset="UTF-8">
 <title>Title</title>
</head>
<body>
<table border="1" width="500px" cellspacing="0">
 <tr>
 <th>编号</th>
 <th>姓名</th>
 <th>图片</th>
 <th>操作</th>
 </tr>
 <tr>
 {% for stu in stus %}
  <td>{{ forloop.counter }}</td>
  <td>{{ stu.sname }}</td>
  <td><img src="{{ MEDIA_URL}}{{ stu.photo }}"/> </td>
  <td><a href="#" rel="external nofollow" >操作</a></td>
 {% endfor %}
 </tr>
</table>
</body>
</html>

7.配置根路由 test\urls.py 读取后台上传的文件

from django.views.static import serve

if DEBUG:
 urlpatterns+=url(r'^media/(?P<path>.*)/$', serve, {"document_root": MEDIA_ROOT}),

8.再次修改配置文件setting.py  在TEMPLATE中添加新的内容 可以获取到media中的内容

'django.template.context_processors.media'

9.访问127.0.0.1:8000/student/ 上传学生信息

访问127.0.0.1:8000/student/show/ 查看所有学生的信息

文件的下载

1.配置子路由 访问views.py 下的download_view()函数

urlpatterns=[
 url(r'^$',views.index_view),
 url(r'^upload/$',views.upload_view),
 url(r'^show/$',views.showall_view),
 url(r'^download/$',views.download_view)
]
import os
def download_view(request):
 #获取文件存放的位置
 filepath = request.GET.get('photo','')
 print filepath
 #获取文件的名字
 filename = filepath[filepath.rindex('/')+1:]
 print filename
 path = os.path.join(os.getcwd(),'media',filepath.replace('/','\\'))
 with open(path,'rb') as fr:
 response = HttpResponse(fr.read())
 response['Content-Type'] = 'image/png'
 # 预览模式
 response['Content-Disposition'] = 'inline;filename=' + filename
 # 附件模式
 response['Content-Disposition']='attachment;filename='+filename
 return response

2.修改show.html 文件中下载栏的超链接地址

<tr>
 {% for stu in stus %}
  <td>{{ forloop.counter }}</td>
  <td>{{ stu.sname }}</td>
  <td><img src="{{ MEDIA_URL}}{{ stu.photo }}"/> </td>
  <td><a href="/student/download/?photo={{ stu.photo }}" rel="external nofollow" >下载</a></td>
 {% endfor %}
</tr>

3.访问127.0.0.1:8000/studnet/show/ 查看学生信息

点击操作栏中的下载 即可将学生照片下载到本地

以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持三水点靠木。

Python 相关文章推荐
Python中实现两个字典(dict)合并的方法
Sep 23 Python
python 垃圾收集机制的实例详解
Aug 20 Python
Python实现Logger打印功能的方法详解
Sep 01 Python
将Dataframe数据转化为ndarry数据的方法
Jun 28 Python
Python魔法方法功能与用法简介
Apr 04 Python
解决Python内层for循环如何break出外层的循环的问题
Jun 24 Python
Python 中的pygame安装与配置教程详解
Feb 10 Python
Python操作Excel工作簿的示例代码(\*.xlsx)
Mar 23 Python
python 实现rolling和apply函数的向下取值操作
Jun 08 Python
最新PyCharm 2020.2.3永久激活码(亲测有效)
Nov 26 Python
Numpy中np.max的用法及np.maximum区别
Nov 27 Python
详解Python爬虫爬取博客园问题列表所有的问题
Jan 18 Python
Django实现文件上传和下载功能
Oct 06 #Python
Django文件上传与下载(FileFlid)
Oct 06 #Python
Django实现文件上传下载
Oct 06 #Python
python编写猜数字小游戏
Oct 06 #Python
python实现猜数字游戏
Mar 25 #Python
python实现机器人卡牌
Oct 06 #Python
Django实现文件上传下载功能
Oct 06 #Python
You might like
PHP clearstatcache()函数详解
2010/03/02 PHP
php微信公众平台示例代码分析(二)
2016/12/06 PHP
thinkPHP+mysql+ajax实现的仿百度一下即时搜索效果详解
2019/07/15 PHP
Laravel实现搜索的时候分页并携带参数
2019/10/15 PHP
20个最新的jQuery插件
2012/01/13 Javascript
实用的Jquery选项卡TAB示例代码
2013/08/28 Javascript
解析JSON对象与字符串之间的相互转换
2013/12/18 Javascript
推荐 21 款优秀的高性能 Node.js 开发框架
2014/08/18 Javascript
JS中使用apply方法通过不同数量的参数调用函数的方法
2016/05/31 Javascript
jQuery图片渐变特效的简单实现
2016/06/25 Javascript
javascript数据类型详解
2017/02/07 Javascript
源码分析Vue.js的监听实现教程
2017/04/23 Javascript
浅谈Angular文字折叠展开组件的原理分析
2017/11/24 Javascript
vue组件之间通信实例总结(点赞功能)
2018/12/05 Javascript
react同构实践之实现自己的同构模板
2019/03/13 Javascript
详解vue 命名视图
2019/08/14 Javascript
angular组件间传值测试的方法详解
2020/05/07 Javascript
vue项目接口域名动态获取操作
2020/08/13 Javascript
解决VueCil代理本地proxytable无效报错404的问题
2020/11/07 Javascript
python操作xml文件详细介绍
2014/06/09 Python
python3.x上post发送json数据
2018/03/04 Python
python 协程中的迭代器,生成器原理及应用实例详解
2019/10/28 Python
使用Python画出小人发射爱心的代码
2019/11/23 Python
Python 实现顺序高斯消元法示例
2019/12/09 Python
浅谈tensorflow模型保存为pb的各种姿势
2020/05/25 Python
深入理解HTML5定时器requestAnimationFrame的使用
2018/12/12 HTML / CSS
IFCHIC台湾:欧美国际设计师品牌
2019/05/18 全球购物
简历自我评价模版
2014/01/31 职场文书
最美孝心少年事迹材料
2014/08/15 职场文书
一份教室追逐打闹的检讨书
2014/09/27 职场文书
小学教师年度个人总结
2015/02/05 职场文书
销售助理岗位职责
2015/02/11 职场文书
捐书仪式主持词
2015/07/04 职场文书
K8s部署发布Golang应用程序的实现方法
2021/07/16 Golang
win10更新失败无限重启解决方法
2022/04/19 数码科技
css清除浮动clearfix:after的用法详解(附完整代码)
2023/05/21 HTML / CSS