22. Django进阶:文件上传
一、定义
用户可以通过浏览器将图片等文件传至网站
二、场景
- 用户上传头像
- 上传流程性的文档[pdf,txt等]
三、上传规范 - 前端【HTML】
- 文件上传必须为POST提交方式
- 表单
<form>
中文件上传时必须有带有enctype = "multipart/formdata"
时才会包含文件内容数据 - 表单中用
<input type="file" name="xxx">
标签上传文件
<!DOCTYPE html>
<html lang="en">
<head><meta charset="UTF-8"><title>上传文件</title>
</head>
<body>
<form action="/test_upload" method="post" enctype="multipart/form-data"><p><input type="text" name="title"></p><p><input type="file" name="file"></p><p><input type="submit" value="上传"></p>
</form>
</body>
</html>
四、上传规范 - 后端【Django】
4.1. 获取内容
视图函数中,用request.FILES
取文件框的内容
file = request.FILES['xxx']
说明:
- FILES的key对应页面中file框的name值
- file绑定文件流对象
- file.name文件名
- file.file文件的字节流数据
4.2. 配置路径
配置文件的访问路径和存储路径
在setting.py中设置MEDIA相关配置
Django把用户上传的文件,统称为media资源
# file : setting.py
MEDIA_URL = '/media/'
MEDIA_ROOT = os.path.join(BASE_DIR, 'media')
4.3. 绑定路径
MEDIA_URL和MEDIA_ROOT需要手动绑定
步骤:主路由中添加路由
from django.conf import settings
from django.conf.urls.static import staticurlpatterns += static(settings.MEDIA_URL,document_root=settings.MEDIA_ROOT)
说明:等价于做了MEDIA_URL开头的路由,Django接到该特征请求后去MEDIA_ROOT路径查找资源
五、文件写入方案
5.1. 传统的open方式
@csrf_exempt
def upload_view(request):if request.method == 'GET':return render(request, 'test_upload.html')elif request.method == 'POST':# 取文件数据a_file = request.FILES['file']print("上传文件名是:", a_file.name)# 拼接存储绝对路径filename = os.path.join(settings.MEDIA_ROOT, a_file.name)with open(filename, 'wb') as f:# a_file.file 文件数据# a_file.file.read() 读出来data = a_file.file.read()f.write(data)return HttpResponse("接收文件:" + a_file.name + "成功")
5.2. 优化 - 借助ORM
借助M层,在数据库中搞一个字段,字段不存储文件本身,字段用来存储文件相对路径,
字段:FileFieId(upload = '子目录名')
def test_upload(request):if request.method == 'GET':return render(request, 'test_upload.html')elif request.method == 'POST':title = request.POST['title']file = request.FILES['file']Content.objects.create(title=title, file=file)return HttpResponse("upload is ok")
测试:
创建应用
$ python3 manage.py startapp upload_app
注册应用
数据模型
迁移
视图函数
def test_upload(request):if request.method == 'GET':return render(request, 'test_upload.html')elif request.method == 'POST':title = request.POST['title']file = request.FILES['file']Content.objects.create(title=title, picture=file)return HttpResponse("upload is ok")
界面
<!DOCTYPE html> <html lang="en"> <head><meta charset="UTF-8"><title>上传文件</title> </head> <body> <form action="/test_upload" method="post" enctype="multipart/form-data">{% csrf_token %}<p><input type="text" name="title"></p><p><input type="file" name="file"></p><p><input type="submit" value="上传"></p> </form> </body> </html>
路由
path('test_upload', views.test_upload),
上传后,media目录下生成picture文件夹,上传的文件在内部
且数据库字段也保存路径
如果上传同一名称的图片,会自动添加后缀保存
22. Django进阶:文件上传相关推荐
- Django(part47)--文件上传
学习笔记,仅供参考 文件上传 上传须知 文件上传必须为POST提交方式,在文件上传时,表单<form>中必须有带有enctype="multipart/form-data&quo ...
- django媒体文件上传设置
setting.py STATIC_URL = '/static/' STATICFILES_DIRS=(os.path.join(BASE_DIR,"static"), ) ME ...
- 22.WEB漏洞-文件上传之内容逻辑数组绕过与解析漏洞
本文参考: https://www.cnblogs.com/zhengna/p/15624867.html 加上自己的实验笔记 知识点 文件头检测 图像文件信息判断 逻辑安全-二次渲染 逻辑安全-条件 ...
- 【Django】文件上传以及celery的使用
上传文件.异步.初始化脚本 面试题: 项目中的静态文件处理(JS/CSS/image) 自己在机房内优化的方法:1. Nginx/lighttpd(lighty-douban):Nginx 处理静态资 ...
- 基于Django的文件上传下载删除管理器
这是一个基于Django的文件下载,上传,删除的任务管理器 先看看效果展示 1.运行完Django后,直接输入网址http://127.0.0.1:8000 就可以直接进去该网站 2.这是一个主图 上 ...
- django ajax文件上传,django 之 ajax 篇 上传文件
前段: Title {% csrf_token %} 输入正确 ajax上传文件(前段): {% load static %} Title {% csrf_token %} {# #} 输入正确 头像 ...
- django上传文件到服务器,如何用django将文件上传到服务器?
我已经为我的问题找到了this very simple code,但我试图在我的项目中重复它,但没有结果. 我认为我做的每件事都是正确的,但结果很糟糕.在 我这样做: 在表单.py在class Upl ...
- Django实现任意文件上传(最简单的方法)
利用Django实现文件上传并且保存到指定路径下,其实并不困难,完全不需要用到django的forms,也不需要django的models,就可以实现,下面开始实现. 第一步:在模板文件中,创建一个f ...
- django 1.8 官方文档翻译: 3-3-1 文件上传
文件上传 当Django在处理文件上传的时候,文件数据被保存在request. FILES (更多关于 request 对象的信息 请查看 请求和响应对象).这篇文档阐述了文件如何上传到内存和硬盘,以 ...
- Django的边边角角(一):模型继承、静态资源、文件上传
文章目录 一.模型继承 1.概述 2.模型创建 二.静态资源 1.静态资源和模板的区别 2.注意 三.文件上传 1.源码实现 2.Django文件上传 3.显示图片 一.模型继承 1.概述 默认一个模 ...
最新文章
- 前端项目课程3 jquery1.8.3到1.11.1有了哪些新改变
- yii2.0错误:Exception yii\base\InvalidConfigException with message
- Splunk高管:中国才有真正意义的大数据
- 反射机制2,Class类的使用
- python病毒usb文件自动安装_win7禁USB自动安装驱动功能避免木马病毒入侵
- python 数据库驱动开发实例_Python驱动概述
- JDK 1.8 - 1.7
- 晶振为什么不封装进芯片内部?
- Java 爱的循环_郁金花海 Tulip Sea in Love Loop
- android画板的实验报告,几何画板实验报告
- centOS安装yasm
- 浏览器在线视频播放加速方法——直接修改网页代码实现加速
- python引入视频_django 实现简单的插入视频
- Matlab下地形图绘图包m_map绘制晕渲(shaded relief)地形图
- PDF时间戳数字签名
- 2019下半年的教师资格考试~学霸大佬们总结的记忆口诀涨分必备
- Hive中的in、exists和left semi join
- web-sso 系统集成 单点登录
- C语言--“.”与“-”有什么区别?
- 第三方微信+支付宝个人免签支付源码
热门文章
- 12.RabbitMQ实战 --- 聪明的Rabbit:扩展RabbitMQ
- 25.Yii2 自动加载
- 40. MySQL的权限与安全
- css中属性选择器用法总结c
- php中字符串与数组的相互转化explode(separator,$str)与implode(separator,$arr)
- 这是一个定时器,定时执行一次,用在定时发送邮件
- Hibdernate入门
- matlab sparse()
- HDU2066--一个人的旅行(Dijkstra)
- 网页编辑器粘贴word格式的处理