为了更好的学习效果,请搭配视频教程一起学习:

Django零基础到项目实战 - 网易云课堂​study.163.com

文件上传:

文件上传是网站开发中非常常见的功能。这里详细讲述如何在Django中实现文件的上传功能。

前端HTML代码实现:

  1. 在前端中,我们需要填入一个form标签,然后在这个form标签中指定enctype="multipart/form-data",不然就不能上传文件。
  2. 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_ROOTMEDIA_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_ROOTupload_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)文件上传相关推荐

  1. 第三百一十九节,Django框架,文件上传

    第三百一十九节,Django框架,文件上传 1.自定义上传[推荐] 请求对象.FILES.get()获取上传文件的对象 上传对象.name获取上传文件名称 上传对象.chunks()获取上传数据包,字 ...

  2. Django框架实现图片上传,存储和显示功能

    在django框架中,前端页面不能直接使用相对路径或绝对路径显示图片,需要通过urls.py来提供每个URL 对应的django的函数来显示在页面 . 思路:将form表单上传的文件,后台接受后创建文 ...

  3. django jsonresponse_0基础掌握Django框架(29)HttpResponse对象

    为了更好的学习效果,请搭配视频教程一起学习: Django零基础到项目实战 - 网易云课堂​study.163.com HttpResponse对象 Django服务器接收到客户端发送过来的请求后,会 ...

  4. vue - element <upload> 组件批量上传文档,可携带其他表单数据项一同与文件 “手动提交“ 服务器(类似百度文库系统批量上传前端界面与逻辑)超详细教程示例源码,提供界面与逻辑完整源码

    效果图 本示例使用的是 element 组件库,其实什么组件库都行(逻辑是一样),只要你是 vue.js 项目就能使用本教程. 本文实现了 vue + element 使用 upload 组件批量上传 ...

  5. redis将散裂中某个值自增_0基础掌握Django框架(49)Redis

    为了更好的学习效果,请搭配视频教程一起学习: Django零基础到项目实战 - 网易云课堂​study.163.com redis教程: 概述 redis是一种nosql数据库,他的数据是保存在内存中 ...

  6. binarytreenode”使用 类 模板 需要 模板 参数列表_0基础掌握Django框架(7)Django模板介绍...

    为了更好的学习效果,请搭配视频教程一起学习: [免费]Python全栈开发系列教程 - 网易云课堂​study.163.com 模板 在之前的章节中,视图函数只是直接返回文本,而在实际生产环境中其实很 ...

  7. IOS开发基础之使用AFNetworking框架实现文件上传get和post请求

    IOS开发基础之使用AFNetworking框架实现文件上传get和post请求 AFNetworking框架 请自行从github官网clone.命令为 git clone xxx.xxx是项目的地 ...

  8. ajax文件后台提交,有关文件上传 非ajax提交 得到后台数据问题

    下文给大家介绍文件上传非ajax提交得到后台数据的操作方法,具体详情如下所示: .......... 根据id获得表单数据然后发送ajax请求,获得后台返回数据,处理数据,完美. 但是如果需要上传文件 ...

  9. 使用ajax提交form表单,包括ajax文件上传 转http://www.cnblogs.com/zhuxiaojie/p/4783939.html...

    使用ajax提交form表单,包括ajax文件上传 前言 使用ajax请求数据,很多人都会,比如说: $.post(path,{data:data},function(data){... },&quo ...

最新文章

  1. .NET环境下有关打印页面设置、打印机设置、打印预览对话框的实现
  2. 条件选择结构:星期计划(switch)
  3. 初识OR Mapping
  4. Rake::TestTask 介绍
  5. C# 中使用面向切面编程(AOP)中实践代码整洁
  6. php页面 info,通过PATH_INFO方法实现页面伪静态_php
  7. svn上传报Authorization failed错误解决办法
  8. java不建议用全局变量吗_不要使用全局变量, ThreadLocal也不行
  9. python删除列表一段元素_Python基础--list列表删除元素
  10. 成毅高清电脑桌面壁纸
  11. KVM virtio bug整理
  12. python需要下载哪些软件-80%的人都不知道,全球Python库下载前10名
  13. 课后答案︻︼─一大收集
  14. Boxx:一个旨在提高 Python 代码开发和调试效率的工具库,尤其在计算机视觉领域...
  15. 数据结构试卷及答案(四)
  16. ip归属地是什么?ipv4和ipv6区别?
  17. java审计之XXE
  18. 软件项目管理(第二版 宁涛)问答题(个人背诵)
  19. 猿创征文|点亮JAVA技术之灯(线程篇)
  20. Microbiome:西农韦革宏团队简化合成菌群通过激活ISR防治黄芪根腐病

热门文章

  1. Extract Subclass(提炼子类)
  2. 生产者-消费者 BlockingQueue 运用示例
  3. mysql主从是同步还是异步_mysql主从同步异步场景的分析
  4. 如何查看mysql8.0的默认密码_MySQL8.0安装之后查找默认密码
  5. ThreadX应用开发笔记之二:移植ThreadX到STM32H7平台
  6. 搭建: canal部署与实例运行
  7. java是值调用_Java 只有值调用
  8. HA集群实现原理 切换 JAVA_HA(一)高可用集群原理
  9. 达梦数据库删除用户_达梦数据库的操作手册.docx
  10. JAVA入门级教学之(静态内部类)