簡體   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