Django静态与用户上传的文件

时间:2015-09-27 06:39:19

标签: django static collectstatic

在阅读了大量文档之后,我仍然没有很好地掌握静态与用户上传文件的确切内容......或者静态文件究竟是什么。

1。静态文件

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

最重要的是,为什么我甚至还需要“收藏”呢?为什么我的所有静态文件都需要在一个地方?我想如果你使用一个单独的网络服务器“服务”它们是有意义的......仍然,不确定究竟是什么意思。

此外,“collectstatic”去哪里找到所有假定的静态文件?它是否通过我的所有代码,看看我在哪里访问图像/ javascript文件?

2。用户上传的文件

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

Django describes媒体文件,作为管理用户上传内容的一种方式。老实说,我没有尝试过这个(现在也会这样做),但这仍然是一个问题:如果将所有“静态”文件放在一个地方是如此重要,为什么突然之间没有为用户做到这一点 - 上传文件?

此“MEDIA_ROOT”目录中的文件是否未被“collectstatic”收集?如果我将所有图像/ javascript / css放入此媒体文件夹怎么办?然后什么都没收?那有什么不对吗?

感谢任何人都可以了解这一点。

3 个答案:

答案 0 :(得分:2)

<强> 1

静态文件是HTML模板为了正确显示所需的一切 - CSS,JavaScript,图像,Flash文件等。它们的区别对待,因为Django与它们没有任何特殊之处。 (使用您的views.py,它必须在其中运行Python代码,使用模板,它需要呈现您已经使用的任何模板标签等 - 使用静态资产,它们只需要提供服务&#34; as是&#34;对用户来说)

collectstatic命令将查看&#34;静态&#34;每个应用程序的子目录,以及您在STATICFILES_DIRS设置中定义的任何其他目录。这意味着您的Web服务器(Apache,Nginx等)只需要提供一个目录,以使您的所有资产可供您的用户使用,而不是每个应用程序的静态&#34; 。目录

<强> 2

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

他们已经进入了一个可以由您的网络服务器提供服务的目录,并且根本不需要定期收集。

答案 1 :(得分:2)

  

什么是静态文件?

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

  

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

提供静态文件正在发送文件以响应Web请求,这是由Web服务器完成的。

  

为什么我甚至还需要“collectstatic”?

collectstatic使用settings.py中的STATICFILES_DIRS变量来查找所有静态文件并将它们放在一个位置。您必须在生产服务器中执行此操作,因为该文件夹应具有与项目文件不同的安全设置。您不希望用户能够下载您的model.py。例如 collectstatic还可以使用像django-pipeline这样的东西进行缩小和混淆。

  

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

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

这些文件应与服务器上的项目文件或其他服务器上的项目文件分开,以便在您更新站点时保留这些文件。

答案 2 :(得分:1)

大部分答案已在文档中给出:

  1. https://docs.djangoproject.com/en/1.8/ref/contrib/staticfiles/ - django如何找到静态文件等等

  2. https://docs.djangoproject.com/en/1.8/howto/static-files/ - 如何在dev

  3. 中提供静态文件
  4. https://docs.djangoproject.com/en/1.8/howto/static-files/deployment/ - 如何在pro +中通过面料自动收集静态文件。

  5. 简而言之:静态是那些负责网站外观的文件,而不是其结构和信息表示(css,js,img,videos&amp;等)。

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

    当您使用专业版时,静态文件应存储在项目目录之外的文件夹staticfiles/static中。 staticfiles/media中的媒体(您可以为这些目录提供其他名称)。这应该有两个原因:安全性和所有静态服务由单独的Web服务器提供。您可能希望在每次更改时自动运行collectstatic - 尝试使用fabric。用户上传媒体文件夹中已有的所有文件 - 因此您无需为其运行collectstatic。

相关问题