Интеграция Sphinx и Django для того, чтобы пользователи могли войти в систему для просмотра документации



Мне интересно, можно ли спрятать документацию sphinx внутри приложения django, чтобы ее могли видеть только те, кто вошел в систему. Мне кажется, что поскольку sphinx создает свою собственную структуру и что Django использует urlconf для определения того, какие страницы пользователь может видеть, то объединить их невозможно. Хотя должно быть какое-то сочетание, так как сайт Django, вероятно, использует django и sphinx. Мне интересно, есть ли у кого-нибудь какое-то озарение или они могут указать мне правильный путь. направление.



Заранее спасибо!

714   1  

1 ответ:

Sphinx собирает ваши документы в HTML-файлы, поэтому в большинстве случаев эти документы должны обслуживаться вашим веб-сервером, а не 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 будет обслуживать как html, так и css/js файлы из вашей темы sphinx.

Первый улучшение, которое вы можете сделать здесь, состоит в том, чтобы служить /path/to/sphinx/build/html/_static/ с apache/nginx или тем, что вы используете.

Более правильный способ-подавать документы с помощью apache/nginx и заставить его обрабатывать сам auth. К сожалению, я сделал быстрый поиск в Google, но не нашел способа использовать пользовательскую модель Django для обработки http_auth в apache или другом. В качестве альтернативы вы можете использовать что-то вроде mod_sendfile или X-Accel модулей - http://www.wellfireinteractive.com/blog/nginx-django-x-accel-redirects/ в двух словах-приложение Django проверяет разрешение, если пользователь может просмотреть файл и добавить специальный заголовок к ответу, содержащему путь к файлу. Веб-сервер будет обслуживать этот файл вместо оригинального сообщения от django

Comments

    Ничего не найдено.