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通过socket查询whois的方法
Jul 18 Python
Python文件操作,open读写文件,追加文本内容实例
Dec 14 Python
Python实现邮件的批量发送的示例代码
Jan 23 Python
Django 中使用流响应处理视频的方法
Jul 20 Python
tensorflow实现简单逻辑回归
Sep 07 Python
对python 合并 累加两个dict的实例详解
Jan 21 Python
python定时按日期备份MySQL数据并压缩
Apr 19 Python
Python使用pycharm导入pymysql教程
Sep 16 Python
Python中使用aiohttp模拟服务器出现错误问题及解决方法
Oct 31 Python
python 对象真假值的实例(哪些视为False)
Dec 11 Python
浅谈matplotlib默认字体设置探索
Feb 03 Python
python语言中pandas字符串分割str.split()函数
Aug 05 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生成txt文件标题及内容的方法
2014/01/16 PHP
Codeigniter的dom类用法实例
2015/06/26 PHP
php根据命令行参数生成配置文件详解
2019/03/15 PHP
jQuery设置和获取HTML、文本和值示例
2014/07/08 Javascript
深入理解JavaScript系列(25):设计模式之单例模式详解
2015/03/03 Javascript
Jquery 1.9.1源码分析系列(十二)之筛选操作
2015/12/02 Javascript
jQuery插件Validation快速完成表单验证的方式
2016/07/28 Javascript
javascript 中设置window.location.href跳转无效问题解决办法
2017/02/09 Javascript
Vue响应式原理详解
2017/04/18 Javascript
BootStrap Select清除选中的状态恢复默认状态
2017/06/20 Javascript
JavaScript注册时密码强度校验代码
2017/06/30 Javascript
React中上传图片到七牛的示例代码
2017/10/10 Javascript
解决ng-repeat产生的ng-model中取不到值的问题
2018/10/02 Javascript
Vue实现验证码功能
2019/12/03 Javascript
vue学习笔记之过滤器的基本使用方法实例分析
2020/02/01 Javascript
jQuery事件模型默认行为执行顺序及trigger()与 triggerHandler()比较实例分析
2020/04/30 jQuery
解决VUE mounted 钩子函数执行时 img 未加载导致页面布局的问题
2020/07/27 Javascript
Ant Design的Table组件去除
2020/10/24 Javascript
Python将阿拉伯数字转换为罗马数字的方法
2015/07/10 Python
Python3学习笔记之列表方法示例详解
2017/10/06 Python
python实现合并两个排序的链表
2019/03/03 Python
Python基本数据结构与用法详解【列表、元组、集合、字典】
2019/03/23 Python
window7下的python2.7版本和python3.5版本的opencv-python安装过程
2019/10/24 Python
TensorFlow保存TensorBoard图像操作
2020/06/23 Python
Python常用类型转换实现代码实例
2020/07/28 Python
Python爬虫防封ip的一些技巧
2020/08/06 Python
大都会艺术博物馆商店:The Met Store
2018/06/22 全球购物
Tiqets英国:智能手机上的文化和娱乐门票
2019/07/10 全球购物
Etam俄罗斯:法国女士内衣和家居服网上商店
2019/10/30 全球购物
后勤部经理岗位职责
2014/02/23 职场文书
幼儿园师德演讲稿
2014/05/06 职场文书
反腐倡廉演讲稿
2014/05/22 职场文书
党员活动总结
2015/02/04 职场文书
幼儿教师年度个人总结
2015/02/05 职场文书
golang日志包logger的用法详解
2021/05/05 Golang
Java9新特性对HTTP2协议支持与非阻塞HTTP API
2022/03/16 Java/Android