我很好奇是否可以在django应用程序中隐藏sphinx文档,以便只有登录的人才能看到它.在我看来,由于sphinx创建了自己的结构,并且Django使用urlconf来定义用户可以看到的页面,因此无法将两者合并.虽然Django网站可能会使用django和sphinx,但必须有一些组合.我想知道是否有人有任何见解,或者他们是否可以指出我正确的方向.
先感谢您!
Sphinx将您的文档构建为HTML文件,因此在大多数情况下,这些文档应该由您的Web服务器而不是Django提供.然而,Django也能够提供静态文件.
您可以使用该django.views.static.serve
函数执行此操作并使用此函数包装login_required
.例如:
from django.views.static import serve from django.contrib.auth.decorators import login_required urlpatterns += patterns('', url(r'^docs/(?P<path>.*)', login_required(serve), {'document_root': '/path/to/sphinx/build/html'}, 'docs'), )
但是这种配置在生产环境中被认为是一种不好的做法,因为在这种情况下,Django将从你的sphinx主题提供html和css/js文件.
你可以在这里做的第一个改进是/path/to/sphinx/build/html/_static/
使用apache/nginx或你使用的任何东西.
更合适的方法是使用apache/nginx提供文档并使其处理auth本身.不幸的是我做了一个快速的谷歌搜索,但没有找到一种方法来使用Django的用户模型来处理apache或其他的http_auth.或者你可以使用类似的东西mod_sendfile
或X-Accel
模块 - http://www.wellfireinteractive.com/blog/nginx-django-x-accel-redirects/简而言之 - 如果用户可以查看文件并添加特殊标题,Django app会检查权限包含文件路径的响应.Web服务器将提供此文件,而不是来自django的原始消息