上传文件和提交textfield_0基础掌握Django框架(37)文件上传

d99b4defa6787697a6a2d4e1e4ec9906.png

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

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

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/507651.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

2021年第3周LDL方向的周报

LDL小组&#xff1a; 如何快速进入研究状态 &#xff08;1&#xff09;系列性的工作&#xff0c;papermaker&#xff1a;读文献&#xff0c;顶刊顶会&#xff0c;综述性文章–》进行扩展&#xff0c;研究主线 &#xff08;2&#xff09;接手师兄师姐的工作–》并且对已有的工作…

2021年第3周人工智能方向的周报

快速进入研究&#xff1a; &#xff08;1&#xff09;读文献–》综述性的文献–》你自己去综述性文献 &#xff08;2&#xff09;已有的工作 &#xff08;3&#xff09;有没有相关的数据&#xff1f; 下一步事情&#xff1a; &#xff08;1&#xff09;想一想自己的横向做什么…

华为p10刷原生android,华为p10怎么刷机 华为p10刷机方法【详细介绍】

喜欢折腾手机的用户一定对于手机root权限获取不陌生&#xff0c;root后虽然不能享受官方联保服务但同时带来的好处不用小编多说。前面给大家介绍了 华为p10 刷入第三方recovery教程&#xff0c;现在华为p10刷机包已经放出来&#xff0c;小编给大家带来华为p10刷机权限获取教程。…

pythoncookie自动模拟登录_用Python模拟技巧带你实现自动抽屉登录自动点赞

原标题&#xff1a;用Python模拟技巧带你实现自动抽屉登录&自动点赞/1 前言/嘿&#xff0c;各位小伙伴们晚上好呀&#xff0c;今天小编又给大家带来干货内容啦,今天带来的是,如何自动登录抽屉&#xff0c;并且点赞&#xff01;原计划是不打算使用selenium的&#xff0c;但是…

同学之间互相出的一些有趣题目

题目1&#xff1a;过隧道时间最短问题 四个人&#xff08;A、B、C、D&#xff09;晚上过隧道,并且只有一个手电筒,每次只能过两个人,并且还需要有一个人回来传递手电筒,四个人过隧道的速度不一样,分别是1、2、5、10分钟,问怎么过隧道最快?总共用多长时间? 问题扩展&#xf…

android studio sqlitedatabase,在SQLite数据库Android Studio上使用预填充数据库

本问题已经有最佳答案&#xff0c;请猛点这里访问。在这里&#xff0c;我想使用我预先填充的SQLite数据库到我的Android应用程序。 因此&#xff0c;首次运行时&#xff0c;它会自动从assets文件夹中复制数据库&#xff0c;并在我的Android应用程序中将其用作数据库。到目前为止…

使用container的嵌套_ElementUI 技术揭秘(4)— Container 布局容器组件的设计与实现。...

前言上一篇文章我们分析了 Layout 布局组件的设计和实现&#xff0c;它的应用场景通常是局部布局。对于整个页面的布局&#xff0c;element-ui 提供了 Container 布局容器组件&#xff0c;专门用于 PC 管理后台页面的整体布局。需求分析我们先通过几幅图看一下页面的常见布局。…

推荐系统最新研究进展

算法相关的综述 从200多篇顶会论文看推荐系统前沿方向与最新进展 基于强化学习的推荐系统相关研究进展、经典论文整理分享 推荐系统去偏&#xff08;Debiased Recommendation&#xff09;研究进展概述 Deep Learning Based Recommender System: A Survey and New Perspectives…

html自动生成在线试题,HTML5测试题整理Ⅰ

1.在 HTML5 中&#xff0c;哪个元素用于组合标题元素&#xff1f;答案&#xff1a;2.HTML5 中不再支持哪个元素&#xff1f;答案&#xff1a;&#xff0c;,,,,,,,,,,3.在 HTML5 中&#xff0c;onblur 和 onfocus 是?答案&#xff1a;事件属性4.在 HTML5 中&#xff0c;新多媒体…

2021年第3周推荐系统方向的周报

1、如何快速进入研究状态 &#xff08;1&#xff09;研究方向对应的研究内容 综述性文献 &#xff08;2&#xff09;熟悉写文章的规范 表达能力、创新、编码、写作的规范&#xff08;Latex、如何写标题、如何写摘要、如何画图。。。。&#xff09;&#xff0c;最好是接手师兄师…

python唯一映射类型_Python基础:04映射类型

字典是Python语言中唯一的映射类型。一个字典对象是可变的&#xff0c;它是一个容器类型&#xff0c;能存储任意个数的Python对象。字典中的数据是无序排列的。映射类型也可被称做哈希表&#xff0c;哈希表的算法是获取键&#xff0c;对键执行一个叫做哈希函数的操作&#xff0…

宝马屏幕共享android,宝马屏幕共享功能怎么用

【太平洋汽车网】使用宝马屏幕共享要先打开车载电脑多媒体功能&#xff0c;再选择屏幕共享手机投屏&#xff0c;勾掉宝马互联选项&#xff0c;然后再打开手机wifi&#xff0c;选择BMW输入密码即可使用屏幕共享。车手机互联映射即车机互联&#xff0c;就是将手机投屏到车载显示器…

“用于无监督图像生成解耦的正交雅可比正则化”论文解读

Tikhonov regularization terms https://blog.csdn.net/jiejinquanil/article/details/50411617 本文是对博客https://baijiahao.baidu.com/s?id1710942953471566583&wfrspider&forpc的重写。 1 简介 本文是对发表于计算机视觉和模式识别领域的顶级会议 ICCV 2021 的…

html带正方形项目列表,5种简单实用的css列表样式实例,可以直接用到项目中。...

谁不希望有一个好看而又干净的列表&#xff1f;这篇文章中我们给出几个实用的例子&#xff0c;你可以把他们直接用到自己的工作中。我们从一个带有动画效果的垂直列表开始&#xff0c;接着是一个图文混排的例子&#xff0c;然后是一个只有图片的list例子跟一个水平菜单的例子&a…

python变量和常量_python 变量与常量 - 刘江的python教程

变量与常量阅读: 17356评论&#xff1a;7变量&#xff1a;在程序运行过程中&#xff0c;值会发生变化的量常量&#xff1a;在程序运行过程中&#xff0c;值不会发生变化的量无论是变量还是常量&#xff0c;在创建时都会在内存中开辟一块空间&#xff0c;用于保存它的值。Python…

代价敏感多标签主动学习的代码开发跟踪

1 简介 代价敏感多标签主动学习目前是闵老师小组正在进行的一个开发项目&#xff0c;目的是将代价敏感和主动学习思想应用到多标签学习中。整个Java代码涵盖了很多技术&#xff1a;并行计算、batch处理。本文就是在学习这个代码后的一些总结。学习方法采用的至顶向下。 2 Cma…

pb 打印html页面,用PB开发WEB应用

用PB开发WEB应用用PB开发WEB应用烟台教育学院网络中心 孙连三一、PB Window plug &#xff0d;in 的用途PowerBuilder Window plug &#xff0d;in 的用途是在HTML 页面中插入PowerBuilder 中定义的窗口对象&#xff0c;此窗口对象上定义的功能在浏览器中一样被执行&#xff0…

python上传文件接口_python程序的web接口:上传和下载文件

我正在尝试制作一个简单的web应用程序&#xff0c;其中可以上载一个文件并将该文件提供给python脚本。烧瓶似乎适合这种用途。然后&#xff0c;用户可以从脚本下载文件输出。请告诉我如何解析python脚本中的文件并获得输出。到目前为止&#xff0c;我成功地完成了以下上载文件的…

两列布局 html5,CSS两列布局的N种实现

原理&#xff1a;两个元素都设置dislpay:inline-block&#xff0c;为了消除html空格的影响&#xff0c;父元素的font-size需要设置为0&#xff0c;右侧自适应元素的宽度使用calc函数计算。如果两个元素的高度不一样&#xff0c;可以给元素设置vertical-align:top调整。缺点&…

python如何提取图片特征向量_在python中计算图像的特征向量

我正在尝试将二维高斯拟合到图像中。噪声很低&#xff0c;所以我试图旋转图像&#xff0c;使两个主轴不同时变化&#xff0c;算出最大值&#xff0c;然后计算两个维度的标准偏差。选择的武器是Python。。然而&#xff0c;我一直在寻找图像的特征向量——numpy.linalg.py假设离散…