上传文件和提交textfield_0基础掌握Django框架(37)文件上传
为了更好的学习效果,请搭配视频教程一起学习:
Django零基础到项目实战 - 网易云课堂study.163.com
文件上传:
文件上传是网站开发中非常常见的功能。这里详细讲述如何在Django
中实现文件的上传功能。
前端HTML代码实现:
- 在前端中,我们需要填入一个
form
标签,然后在这个form
标签中指定enctype="multipart/form-data"
,不然就不能上传文件。 - 在
form
标签中添加一个input
标签,然后指定input
标签的name
,以及type="file"
。
以上两步的示例代码如下:
<form action="" method="post" enctype="multipart/form-data"><input type="file" name="myfile">
</form>
后端的代码实现:
后端的主要工作是接收文件。然后存储文件。接收文件的方式跟接收POST
的方式是一样的,只不过是通过FILES
来实现。示例代码如下:
def save_file(file):with open('somefile.txt','wb') as fp:for chunk in file.chunks():fp.write(chunk)def index(request):if request.method == 'GET':form = MyForm()return render(request,'index.html',{'form':form})else:myfile = request.FILES.get('myfile')save_file(myfile)return HttpResponse('success')
以上代码通过request.FILES
接收到文件后,再写入到指定的地方。这样就可以完成一个文件的上传功能了。
使用模型来处理上传的文件:
在定义模型的时候,我们可以给存储文件的字段指定为FileField
,这个Field
可以传递一个upload_to
参数,用来指定上传上来的文件保存到哪里。比如我们让他保存到项目的files
文件夹下,那么示例代码如下:
# models.py
class Article(models.Model):title = models.CharField(max_length=100)content = models.TextField()thumbnail = models.FileField(upload_to="files")# views.py
def index(request):if request.method == 'GET':return render(request,'index.html')else:title = request.POST.get('title')content = request.POST.get('content')thumbnail = request.FILES.get('thumbnail')article = Article(title=title, content=content, thumbnail=thumbnail)article.save()return HttpResponse('success')
调用完article.save()
方法,就会把文件保存到files
下面,并且会将这个文件的路径存储到数据库中。
指定MEDIA_ROOT
和MEDIA_URL
:
以上我们是使用了upload_to
来指定上传的文件的目录。我们也可以指定MEDIA_ROOT
,就不需要在FielField
中指定upload_to
,他会自动的将文件上传到MEDIA_ROOT
的目录下。
MEDIA_ROOT = os.path.join(BASE_DIR,'media')
MEDIA_URL = '/media/'
然后我们可以在urls.py
中添加MEDIA_ROOT
目录下的访问路径。示例代码如下:
from django.urls import path
from front import views
from django.conf.urls.static import static
from django.conf import settingsurlpatterns = [path('', views.index),
] + static(settings.MEDIA_URL,document_root=settings.MEDIA_ROOT)
如果我们同时指定MEDIA_ROOT
和upload_to
,那么会将文件上传到MEDIA_ROOT
下的upload_to
文件夹中。示例代码如下:
class Article(models.Model):title = models.CharField(max_length=100)content = models.TextField()thumbnail = models.FileField(upload_to="%Y/%m/%d/")
限制上传的文件拓展名:
如果想要限制上传的文件的拓展名,那么我们就需要用到表单来进行限制。我们可以使用普通的Form
表单,也可以使用ModelForm
,直接从模型中读取字段。示例代码如下:
# models.py
class Article(models.Model):title = models.CharField(max_length=100)content = models.TextField()thumbnial = models.FileField(upload_to='%Y/%m/%d/',validators=[validators.FileExtensionValidator(['txt','pdf'])])# forms.py
class ArticleForm(forms.ModelForm):class Meta:model = Articlefields = "__all__"
上传图片:
上传图片跟上传普通文件是一样的。只不过是上传图片的时候Django
会判断上传的文件是否是图片的格式(除了判断后缀名,还会判断是否是可用的图片)。如果不是,那么就会验证失败。我们首先先来定义一个包含ImageField
的模型。示例代码如下:
class Article(models.Model):title = models.CharField(max_length=100)content = models.TextField()thumbnail = models.ImageField(upload_to="%Y/%m/%d/")
因为要验证是否是合格的图片,因此我们还需要用一个表单来进行验证。表单我们直接就使用ModelForm
就可以了。示例代码如下:
class MyForm(forms.ModelForm):class Meta:model = Articlefields = "__all__"
注意:使用ImageField,必须要先安装Pillow库:pip install pillow
为了更好的学习效果,请搭配视频教程一起学习:
Django零基础到项目实战 - 网易云课堂study.163.com
上传文件和提交textfield_0基础掌握Django框架(37)文件上传相关推荐
- 第三百一十九节,Django框架,文件上传
第三百一十九节,Django框架,文件上传 1.自定义上传[推荐] 请求对象.FILES.get()获取上传文件的对象 上传对象.name获取上传文件名称 上传对象.chunks()获取上传数据包,字 ...
- Django框架实现图片上传,存储和显示功能
在django框架中,前端页面不能直接使用相对路径或绝对路径显示图片,需要通过urls.py来提供每个URL 对应的django的函数来显示在页面 . 思路:将form表单上传的文件,后台接受后创建文 ...
- django jsonresponse_0基础掌握Django框架(29)HttpResponse对象
为了更好的学习效果,请搭配视频教程一起学习: Django零基础到项目实战 - 网易云课堂study.163.com HttpResponse对象 Django服务器接收到客户端发送过来的请求后,会 ...
- vue - element <upload> 组件批量上传文档,可携带其他表单数据项一同与文件 “手动提交“ 服务器(类似百度文库系统批量上传前端界面与逻辑)超详细教程示例源码,提供界面与逻辑完整源码
效果图 本示例使用的是 element 组件库,其实什么组件库都行(逻辑是一样),只要你是 vue.js 项目就能使用本教程. 本文实现了 vue + element 使用 upload 组件批量上传 ...
- redis将散裂中某个值自增_0基础掌握Django框架(49)Redis
为了更好的学习效果,请搭配视频教程一起学习: Django零基础到项目实战 - 网易云课堂study.163.com redis教程: 概述 redis是一种nosql数据库,他的数据是保存在内存中 ...
- binarytreenode”使用 类 模板 需要 模板 参数列表_0基础掌握Django框架(7)Django模板介绍...
为了更好的学习效果,请搭配视频教程一起学习: [免费]Python全栈开发系列教程 - 网易云课堂study.163.com 模板 在之前的章节中,视图函数只是直接返回文本,而在实际生产环境中其实很 ...
- IOS开发基础之使用AFNetworking框架实现文件上传get和post请求
IOS开发基础之使用AFNetworking框架实现文件上传get和post请求 AFNetworking框架 请自行从github官网clone.命令为 git clone xxx.xxx是项目的地 ...
- ajax文件后台提交,有关文件上传 非ajax提交 得到后台数据问题
下文给大家介绍文件上传非ajax提交得到后台数据的操作方法,具体详情如下所示: .......... 根据id获得表单数据然后发送ajax请求,获得后台返回数据,处理数据,完美. 但是如果需要上传文件 ...
- 使用ajax提交form表单,包括ajax文件上传 转http://www.cnblogs.com/zhuxiaojie/p/4783939.html...
使用ajax提交form表单,包括ajax文件上传 前言 使用ajax请求数据,很多人都会,比如说: $.post(path,{data:data},function(data){... },&quo ...
最新文章
- .NET环境下有关打印页面设置、打印机设置、打印预览对话框的实现
- 条件选择结构:星期计划(switch)
- 初识OR Mapping
- Rake::TestTask 介绍
- C# 中使用面向切面编程(AOP)中实践代码整洁
- php页面 info,通过PATH_INFO方法实现页面伪静态_php
- svn上传报Authorization failed错误解决办法
- java不建议用全局变量吗_不要使用全局变量, ThreadLocal也不行
- python删除列表一段元素_Python基础--list列表删除元素
- 成毅高清电脑桌面壁纸
- KVM virtio bug整理
- python需要下载哪些软件-80%的人都不知道,全球Python库下载前10名
- 课后答案︻︼─一大收集
- Boxx:一个旨在提高 Python 代码开发和调试效率的工具库,尤其在计算机视觉领域...
- 数据结构试卷及答案(四)
- ip归属地是什么?ipv4和ipv6区别?
- java审计之XXE
- 软件项目管理(第二版 宁涛)问答题(个人背诵)
- 猿创征文|点亮JAVA技术之灯(线程篇)
- Microbiome:西农韦革宏团队简化合成菌群通过激活ISR防治黄芪根腐病
热门文章
- Extract Subclass(提炼子类)
- 生产者-消费者 BlockingQueue 运用示例
- mysql主从是同步还是异步_mysql主从同步异步场景的分析
- 如何查看mysql8.0的默认密码_MySQL8.0安装之后查找默认密码
- ThreadX应用开发笔记之二:移植ThreadX到STM32H7平台
- 搭建: canal部署与实例运行
- java是值调用_Java 只有值调用
- HA集群实现原理 切换 JAVA_HA(一)高可用集群原理
- 达梦数据库删除用户_达梦数据库的操作手册.docx
- JAVA入门级教学之(静态内部类)