我正在写一个基于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不提供静态文件
是的,如果文件是纯文本(没有动态内容),它是正确的。 –