Django静态与用户上传的文件

Django静态与用户上传的文件,django,static,collectstatic,Django,Static,Collectstatic,在阅读了大量文档之后,我仍然没有很好地理解静态文件和用户上传文件的区别。。。或者静态文件到底是什么 1。静态文件 Django静态文件类似于“图像、javascript、css”。好的,有道理。但是所有那些.py文件和.html模板文件等等。。。它们不是静态的??当站点运行时,它们不会“更改”。什么是静态文件?“提供静态文件”是什么意思?这与提供“views.py”文件或“home.html”文件有何不同 最重要的是,为什么我甚至需要“collectstatic”呢?为什么我所有的静态文件都需要

在阅读了大量文档之后,我仍然没有很好地理解静态文件和用户上传文件的区别。。。或者静态文件到底是什么

1。静态文件

Django静态文件类似于“图像、javascript、css”。好的,有道理。但是所有那些.py文件和.html模板文件等等。。。它们不是静态的??当站点运行时,它们不会“更改”。什么是静态文件?“提供静态文件”是什么意思?这与提供“views.py”文件或“home.html”文件有何不同

最重要的是,为什么我甚至需要“collectstatic”呢?为什么我所有的静态文件都需要放在一个地方?我想如果你使用一个单独的web服务器来“服务”他们,这是有意义的。。。不过,我甚至不知道这到底意味着什么

另外,“collectstatic”在哪里可以找到所有假定的静态文件?它是否遍历了我所有的代码,并查看我在哪里访问图像/javascript文件

2。用户上传的文件

假设我只是从表面上看这个静态的东西,如果用户上传一个图像会发生什么?我是否需要一个在后台运行的程序不断运行“collectstatic”

Django媒体文件是管理用户上传内容的一种方式。老实说,我还没有尝试过(现在就这么做),但这仍然代表了一个问题:如果把所有“静态”文件放在一个地方是如此重要,为什么突然可以不对用户上传的文件这样做

“collectstatic”是否未收集此“MEDIA_ROOT”目录中的文件?如果我只是把我所有的图片/javascript/css放进这个媒体文件夹呢?那么什么也没有收集?有什么问题吗

谢谢大家对这件事的见解

1

静态文件是HTML模板正确显示所需的一切——CSS、JavaScript、图像、Flash文件等。它们的处理方式不同,因为Django与它们没有任何特殊关系。(对于your views.py,它必须在其中运行Python代码,对于模板,它需要呈现您使用过的任何模板标记等-对于静态资产,它们只需要“按原样”提供给用户)

collectstatic命令将查看每个应用程序的“static”子目录,以及您在STATICFILES\u DIRS设置中定义的任何其他目录。这意味着您的web服务器(Apache、Nginx等)只需要提供一个目录就可以让您的用户使用您的所有资产,而不是每个应用程序的“静态”目录

2

用户上传的文件不会被collectstatic命令收集,可以单独保存。你不想把你自己的CSS/JS/图像等和它们混在一起

它们已经存在于一个目录中,您的websever可以为其提供服务,并且根本不需要定期收集

什么是静态文件

静态文件是您在项目中创建的文件,需要直接提供给浏览器(通常是JavaScript、CSS和图像)。
Python文件(如views.py)不会直接发送到浏览器,它们会进行一些处理,以创建一个将发送到浏览器的HTML文件

“提供静态文件”是什么意思

服务静态文件是响应web请求发送文件,这是由web服务器完成的

为什么我甚至需要“静态”呢

collectstatic使用settings.py中的STATICFILES\u DIRS变量查找所有静态文件并将它们放在一个位置。您必须在生产服务器中执行此操作,因为该文件夹的安全设置应与项目文件不同。例如,您不希望用户能够下载您的model.py。
collectstatic还可以使用django管道之类的工具进行缩小和模糊处理

我是否需要一个在后台运行的程序不断运行“collectstatic”

不,媒体文件是另一回事。这些是用户上传到系统的文件(与您创建的静态文件相反)。这些文件通常保存到服务器上的文件系统中,并在数据库中创建一条记录,其中包含文件的地址以及模型中定义的一些元数据。models.FileField有一个upload_to属性,用于控制这些文件相对于settings.py中的MEDIA_根变量应存储在何处


这些文件应与服务器上甚至其他服务器上的项目文件分开,以便在您更新站点时它们保持不变。

大多数答案已在文档中给出:

  • -django如何查找静态文件等

  • -应如何在dev中提供静态文件

  • -如何在pro中提供静态文件+一些通过fabric自动收集静态文件的介绍

  • 简单地说:静态是那些对站点外观负责的文件,而不是它的结构和信息表示(css、js、img、视频等)

    在dev中,您将所有静态文件放在一个
    static
    中,并由dev服务器自动提供服务

    使用pro时,静态文件应存储在项目目录外的文件夹
    staticfiles/static
    staticfiles/Media
    中的介质(您可以为这些介质指定其他名称)。这样做有两个原因:安全性和所有静态数据都由单独的web服务器提供。您可能希望在每次更改时自动运行collectstatic,请尝试使用fabric。用户上载媒体文件夹中已存在的所有文件-因此您无需为其运行collectstatic