[英]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將它們連接起來。 您基本上有三個選擇……。
這意味着你需要安裝一個網絡服務器(Nginx的推薦),並與像WSGI接口配置它沿着Gunicorn或uWSGI 。 此選項為您提供最大的自由度,並且將幫助您了解事物在幕后的工作方式。
如果您想使用所有此配置在本地進行開發,而無需承擔安裝和配置的負擔,則可以使用預烘焙的Vagrant VM進行開發。
部署你的應用程序的Heroku , ElasticBeanstalk用,GAE等或者你自己的PaaS(Heroku的風格git的部署) 泊塢窗/ dokku 。 該解決方案將為您處理大多數配置。 這將節省您的時間和金錢)。
如果從CDN服務於靜,不管你這將是更好的 部署到PaaS的或您的機器。 例如,您可以在django-s3direct之類的django應用程序的幫助下以編程方式將用戶圖片和媒體直接上傳到AWS S3,或者使用boto自己制作……(無需重新發明輪子)。
此選項將減輕服務器的負載並加快網站速度。
您可以通過配置實際的服務器-Apache或其他服務器來實現,以便從MEDIA_ROOT所在的任何位置(無論MEDIA_URL所在的位置)提供文件。 Django應該與它無關。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.