使用模型来处理上传的文件:

在定义模型的时候,我们可以给存储的文件的字段指定为FileField,这个field可以传递一个upload_to参数,用来指定上传上来的文件保存到哪里,比如我们让它保存到项目的myfiles文件夹下,示例代码如下:
from django.db import models

class Article(models.Model):
title = models.CharField(max_length=100)
content = models.CharField(max_length=100)
# 指定字段类型为FileField,就可以定义上传文件的字段,并且指定参数upload_to就可以指定上传的文件存储的文件夹
# 此处指定存储在项目文件下的files下。
# 指定了该字段之后就不用再在views.py文件中定义打开,写入,保存文件的函数了。非常简单
thumbnail = models.FileField(upload_to="myfiles")
调用完,就会把文件保存到files文件夹下面,并且会将这个文件的路径存储到数据库中。
from django.shortcuts import render
from django.http import HttpResponse
from django.views import View
from .models import Article class IndexView(View): def get(self,request):
return render(request, 'uploadfile/index.html') def post(self, request):
title = request.POST.get('title')
content = request.POST.get('content')
<!--获取文件并且保存到models.py文件中FileField字段中upload_to参数指定的文件夹下-->
thumbnail = request.FILES.get('thumbnail')
Article.objects.create(title=title, content=content, thumbnail=thumbnail)
return HttpResponse('success!')
但是此时如果在浏览器中输入url:htp://127.0.0.1:8000/uploadfile/3D.txt,会返回404的页面,该页面找不到,这是怎么回事呢?命名我们的文件下有这个文件啊!为甚找不到呢?这是因为我们的urls.py文件中并没有添加我们上传的文件的url。所以才会出现404的错误,解决办法就是:
(1)在settings.py文件中配置上传的文件的url,在STATIC_URL = '/static/'文件下,添加两行:MEDIA_URL代表的是在浏览器中输入的url名,而MEDIA_ROOT代表的是上传的文件的存放目录,并且在浏览器中输入url进行查找的时候也是从该目录下进行查找的。如果配置了这两个变量在models.py文件中的接收上传文件的字段就可以不用指定upload_to参数了,它就会自动存放到MEDIA_ROOT配置的目录下。
STATIC_URL = '/static/'

MEDIA_ROOT = os.path.join(BASE_DIR,'media')

MEDIA_URL = '/media/'
(2)在项目的urls.py文件中的urlpatterns列表后面添加 + static(settings.MEDIA_URL,document_root=settings.MEDIA_ROOT),将上传文件的url进行拼接:
from django.conf import settings
from django.conf.urls.static import static urlpatterns = [
path('front/', include('front.urls')),
path('validator/', include('validator.urls')),
path('modelform/', include('Modelform.urls')),
path('uploadfile/', include('uploadfile.urls')),
] + static(settings.MEDIA_URL,document_root=settings.MEDIA_ROOT)

之后在浏览器中输入http://127.0.0.1:8000/media/3D.txt,就可以查看我们上传的文件的内容了。

考虑到网站在运行一段时间之后,用户上传的文件如果都上传到一个文件夹下的话,就会非常难以管理,因此我们可以再在media文件夹下指定一个文件夹,比如我们指定存储到media/files/文件夹下,注意因为我们在settings.py文件中配置了上传文件到哪个目录下,因此这里我们只需要配置子目录就行了。


thumbnail = models.FileField(upload_to='files')
同样可以按上传文件的年月日进行分类存储,配置为:
thumbnail = models.FileField(upload_to="%Y%m%d")

最新文章

  1. Unity 处理IOC AOP
  2. 《IT蓝豹》吹雪花demo,学习android传感器
  3. jq对象转为dom对象:$(&quot;.div1&quot;)[0] dom对象转为jq对象:$(dom对象)
  4. 使用裸设备配置Oracle ASM实例一例
  5. 取url的键值对,location的search:从?开始的字符串
  6. 从源码的角度解析View的事件分发
  7. udp开发-dtd验证,dom解析
  8. 让程序在崩溃时体面的退出之Dump文件
  9. [转载] HTTP协议状态码详解(HTTP Status Code)
  10. 【HNOI2016】序列 莫队+单调栈+RMQ
  11. Oracle中的substr()函数 详解及应用
  12. 前端开发常用 Linux 命令
  13. HDU-2177 取(2堆)石子游戏 (威佐夫博奕)
  14. Redis 教程 Java工程师学习知识点
  15. 11.翻译系列:在EF 6中配置一对零或者一对一的关系【EF 6 Code-First系列】
  16. 20155231 2016-2017-2 《Java程序设计》第6周学习总结
  17. [IR] Bigtable: A Distributed Storage System for Semi-Structured Data
  18. oracle一个listener侦听多个实例的配置
  19. 软工网络15团队作业8——Beta阶段敏捷冲刺(Day6)
  20. sitecore 缓存管理器

热门文章

  1. 动态获取bind dns日志IP脚本
  2. mysql中大数据表alter增加字段报错:&quot;1034 Incorrect key file for table &#39;table_name&#39;; try to repair it&quot;
  3. win10配置CUDA+Tensorflow2.0的一些经验
  4. node准备
  5. 第二篇 Springboot mybatis generate根据数据库表自动生成实体类、Mapper和Mapper.xml
  6. 进阶之路 | 奇妙的Activity之旅
  7. linux传输文件-sftp
  8. mitmproxy--Cannot establish TLS with client (sni: e.crashlytics.com): TlsException(&quot;(-1, &#39;Unexpected EOF&#39;)&quot;,) 解决办法
  9. Hash存储模型、B-Tree存储模型、LSM存储模型介绍
  10. View Binding初探