我正在寫一個基於Django的網站,但需要提供一個簡單的文本文件。把它放在靜態目錄並繞過Django是否正確的方法?如何從Django提供文本文件?
回答
如果文件是靜態的(不是由django應用程序生成的),那麼你可以把它放在靜態目錄中。
如果此文件的內容由Django生成,那麼您可以將它作爲mimetype與text/plain
一起在HttpResponse中返回。
content = 'any string generated by django'
return HttpResponse(content, content_type='text/plain')
您還可以通過設置響應的Content-Disposition
來爲文件命名。
filename = "my-file.txt"
content = 'any string generated by django'
response = HttpResponse(content, content_type='text/plain')
response['Content-Disposition'] = 'attachment; filename={0}'.format(filename)
return response
我同意@luc然而另一種選擇是使用X-Accel-Redirect
報頭。
想象一下,你必須服務大受保護(必須登錄查看它)靜態文件。如果你把文件放在靜態目錄中,那麼它的訪問是開放的,任何人都可以查看它。如果你通過打開文件然後提供服務來在Django中提供它,那麼IO的數量太多,Django將使用更多的RAM,因爲它必須將文件加載到RAM中。解決方案是有一個視圖,它將根據數據庫對用戶進行身份驗證,但不是返回文件,Django會將X-Accel-Redirect
標頭添加到其響應中。現在,由於Django在nginx的後面,nginx會看到這個頭文件,然後它會提供受保護的靜態文件。這要好得多,因爲與Django相比,nginx更好,更緊張地服務於靜態文件。 Here是關於如何做到這一點的nginx文檔。你也可以在Apache中做類似的事情,但是我不記得頭文件。
有趣的答案。謝謝 – luc
我有類似的要求,通過AJAX獲取表單的文本模板。我選擇使用基於模型視圖(Django的1.6.1)這樣實現它:
from django.http import HttpResponse
from django.views.generic import View
from django.views.generic.detail import SingleObjectMixin
from .models import MyModel
class TextFieldView(SingleObjectMixin, View):
model = MyModel
def get(self, request, *args, **kwargs):
myinstance = self.get_object()
content = myinstance.render_text_content()
return HttpResponse(content, content_type='text/plain; charset=utf8')
呈現的文本是相當小的,從模型中的其他領域動態生成。
- 1. Django如何提供媒體文件?
- 2. 從Django提供媒體文件
- 3. 嘗試從Django提供csv文件
- 4. Django提供下載文件
- 5. Django,提供靜態文件
- 6. Django提供靜態文件
- 7. Django提供動態文件
- 8. Django - 提供文件供下載
- 9. 如何在本地提供文件?
- 10. 如何在django開發環境中從gridfs提供文件?
- 11. 從CDN和本地目錄中用Django提供靜態文件
- 12. 如何從HttpListener提供相關文件
- 13. 如何提供sourceMappingURL文件?
- 14. 從war文件中提供文件
- 15. 從cherrypy提供mp3文件
- 16. 如何提供本地化文本?
- 17. 在Django服務器上以文本/純文本格式提供原始文件
- 18. 如何從文本文件中向交互式bash腳本提供輸入
- 19. 用Django和lighttpd提供服務文件
- 20. 無法提供靜態文件,Django 1.6
- 21. Django:提供管理媒體文件
- 22. django用nginx提供靜態文件
- 23. NGinx&Django,提供大文件(3GB +)
- 24. Django和提供靜態文件
- 25. Django:提供ADMIN媒體文件
- 26. Apache不會提供Django靜態文件
- 27. Django升級:不提供靜態文件
- 28. 在OpenShift中提供Django靜態文件
- 29. Django未提供靜態文件
- 30. Django和Apache不提供靜態文件
是的,如果文件是純文本(沒有動態內容),它是正確的。 –