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装饰器用法
Jul 28 Python
python学习教程之Numpy和Pandas的使用
Sep 11 Python
快速解决安装python没有scripts文件夹的问题
Apr 03 Python
关于python写入文件自动换行的问题
Jun 23 Python
pycharm重置设置,恢复默认设置的方法
Oct 22 Python
Ubuntu18.04下python版本完美切换的解决方法
Jun 14 Python
解决Django连接db遇到的问题
Aug 29 Python
python实现发送form-data数据的方法详解
Sep 27 Python
关于ResNeXt网络的pytorch实现
Jan 14 Python
使用wxpy实现自动发送微信消息功能
Feb 28 Python
python函数map()和partial()的知识点总结
May 26 Python
keras在构建LSTM模型时对变长序列的处理操作
Jun 29 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中的事务使用实例
2015/05/26 PHP
基于jquery的一个浮动框(扩展性比较好 )
2010/08/27 Javascript
jQuery(1.6.3) 中css方法对浮动的实现缺陷分析
2011/09/09 Javascript
jQuery使用动态渲染表单功能完成ajax文件下载
2013/01/15 Javascript
Javascript模块化编程详解
2014/12/01 Javascript
15个jquery常用方法、小技巧分享
2015/01/13 Javascript
js实现商城星星评分的效果
2015/12/29 Javascript
jQuery调用Webservice传递json数组的方法
2016/08/06 Javascript
通过BootStrap实现轮播图的实际应用
2016/09/26 Javascript
js实现仿购物车加减效果
2017/03/01 Javascript
es7学习教程之Decorators(修饰器)详解
2017/07/21 Javascript
解决vue同一slot在组件中渲染多次的问题
2018/09/06 Javascript
vue实现随机验证码功能的实例代码
2019/04/30 Javascript
解决vue项目中某一页面不想引用公共组件app.vue的问题
2020/08/14 Javascript
解决vue中使用less/sass及使用中遇到无效的问题
2020/10/24 Javascript
理解Python中的类与实例
2015/04/27 Python
Python实现的爬虫功能代码
2017/06/24 Python
Python实现批量读取图片并存入mongodb数据库的方法示例
2018/04/02 Python
Python 爬虫之Beautiful Soup模块使用指南
2018/07/05 Python
Django压缩静态文件的实现方法详析
2018/08/26 Python
selenium+python自动化测试之使用webdriver操作浏览器的方法
2019/01/23 Python
python中的TCP(传输控制协议)用法实例分析
2019/11/15 Python
Numpy 多维数据数组的实现
2020/06/18 Python
python 判断一组数据是否符合正态分布
2020/09/23 Python
Python脚本打包成可执行文件过程解析
2020/10/20 Python
python上下文管理器异常问题解决方法
2021/02/07 Python
Python爬虫+tkinter界面实现历史天气查询的思路详解
2021/02/22 Python
浅谈html5之sse服务器发送事件EventSource介绍
2017/08/28 HTML / CSS
意大利香水和化妆品购物网站:Parfimo.it
2019/10/06 全球购物
您的时尚,您的生活方式:DTLR Villa
2019/12/25 全球购物
Tommy Hilfiger澳洲官网:美国高端休闲领导品牌
2020/12/16 全球购物
入党自我鉴定范文
2013/10/04 职场文书
网络维护管理员的自我评价分享
2013/11/11 职场文书
财务工作者先进事迹材料
2014/01/17 职场文书
计算机售后服务承诺书
2014/05/30 职场文书
工伤私了协议书范本
2014/11/24 职场文书