繁体   English   中英

Django-如何在生产中为用户上传的内容提供服务

[英]Django - How to serve user uploaded content in production

我用Django编写了一个小型电子商务应用程序。 管理员用户将上传产品照片。 我通过在urls.py中指定以下处理程序在我的开发机上工作

if settings.DEBUG:
urlpatterns += patterns('django.views.static',
    (r'media/(?P<path>.*)', 'serve', {'document_root': settings.MEDIA_ROOT}),
)

在我的产品模型中,我可以通过以下方法返回图片网址:

def detail_thumbnail_url(self) : return  self.detail_thumbnail.url

从我的模板:

<img src="{{ product.detail_thumbnail_url }}">

到处都有关于不让Django在生产环境中处理此问题的警告,但我无处可寻到如何在生产环境中处理此问题。 当然一定有人这样做!

我想从运行Web应用程序的同一台服务器提供图像。

您可能已经读过,不建议采用这种方法。 您必须将Web服务器与django应用程序一起使用,并通过WSGI将它们连接起来。 您基本上有三个选择……。


配置和使用您的Web服务器

这意味着你需要安装一个网络服务器(Nginx的推荐),并与像WSGI接口配置它沿着GunicornuWSGI 此选项为您提供最大的自由度,并且将帮助您了解事物在幕后的工作方式。

如果您想使用所有此配置在本地进行开发,而无需承担安装和配置的负担,则可以使用预烘焙的Vagrant VM进行开发。


使用PaaS解决方案

部署你的应用程序的HerokuElasticBeanstalk用,GAE等或者你自己的PaaS(Heroku的风格git的部署) 泊坞窗/ dokku 该解决方案将为您处理大多数配置。 这将节省您的时间和金钱)。


从CDN提供服务

如果从CDN服务于静,不管你这将是更好的 部署到PaaS的或您的机器。 例如,您可以在django-s3direct之类的django应用程序的帮助下以编程方式将用户图片和媒体直接上传到AWS S3,或者使用boto自己制作……(无需重新发明轮子)。

此选项将减轻服务器的负载并加快网站速度。

您可以通过配置实际的服务器-Apache或其他服务器来实现,以便从MEDIA_ROOT所在的任何位置(无论MEDIA_URL所在的位置)提供文件。 Django应该与它无关。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM