在部署时在Django中显示图像的简单方法(DEBUG = false)

时间:2016-08-11 01:03:28

标签: python django image

我正在使用DJango 1.8和python 3.4.3,我一直在调试模式下运行我的应用程序,并找到了在MEDIA_ROOT上配置的目录中显示图像的方法,这是我的第一个问题,我发现的解决方案:How to upload and show images in DJango。但是阅读文档我发现该解决方案不适合所服务的应用程序,因此,如果我停止使用“Debug = True”,则不会显示图像,我必须使用此链接上公开的选项之一:{ {3}}但我没有钱支付另一台服务器,我只能在pythonanywhere支付我的托管,并且对于图像使用相同服务器的选项,我不知道如何自动化{{ 1}}并且在用户上传新图像时也不知道如何触发它。

我使用过ASP.NET和PHP5,但我没有遇到任何问题,所以,我有两个问题:

  1. 是否有一种简单的方法来显示图片网址?
  2. 如果我使用DEBUG = True?
  3. 部署我的应用程序,是否存在高风险安全问题?

    我希望你能帮助我,因为我觉得这很荒谬,可能是为了更好的安全性,但它对框架没有意义,而不是让工作变得更容易使它变得更加困难和紧张。

2 个答案:

答案 0 :(得分:4)

Django runserver不用于在生产环境中提供静态文件。它应该仅限于开发和测试环境。

如果您打算使用django的runserver来提供DEBUG = False的静态文件,请使用--insecure flag

由于安全隐患,您不应该部署DEBUG = True的站点。


静态文件和媒体资产有两种不同的东西。

静态文件

静态文件就像您创建的图像和已安装的第三方应用程序附带的文件(例如django-cms)。这些文件包括图像,CSS和JavaScript文件等。所以你需要有一个settings.STATIC_ROOT。

python manage.py collectstatic从不同位置收集静态文件,并将它们全部放在一个文件夹中。

媒体档案

媒体文件是用户上传的内容(例如照片,文档等)。所以你有一个settings.MEDIA_ROOT。 collecstatic对媒体文件不做任何操作,只要用户上传媒体文件就会存在。

在生产中提供静态和媒体文件

像Django这样的框架不会涵盖自动生产服务器配置 - 不幸的是,这是你不得不学习的其他内容。

有许多好的指南,例如this one可帮助您开始在生产中提供媒体和静态文件。

关于服务器费用,我确信您可以找到主机为您提供一些免费信用,或者在某处为服务器每月支付5美元...尝试lowendbox


以下是pythonanywhere关于媒体和静态文件的指南:https://help.pythonanywhere.com/pages/DjangoStaticFiles/

答案 1 :(得分:1)

1)在urls.py中添加:

(r'^media/(?P<path>.*)$', 'django.views.static.serve',
                        {'document_root': settings.MEDIA_ROOT, 'show_indexes': True}),

并打开网址http://myhost.com/media/

2)在DEBUG打开的情况下,永远不要将网站部署到生产环境中,DEBUG = True是一个安全问题,