Хорошо, я знаю , что передача медиа-файлов через Django не рекомендуется . Однако я нахожусь в ситуации, когда мне бы хотелось обслуживать «статические» файлы, используя детальный контроль доступа через модели Django.
Пример : Я хочу предоставить свою библиотеку фильмов себе через Интернет. Я часто путешествую, и я хотел бы иметь возможность просматривать любые мои фильмы, где бы я ни был, при условии, что у меня есть доступ в Интернет. Поэтому я копирую свои DVD, загружаю их на свой сервер и создаю это простое приложение Django в сочетании с встраиваемым видеопроигрывателем .
Чтобы избежать каких-либо правовых последствий, я хотел бы обеспечить, чтобы только зарегистрированные пользователи с соответствующими правами доступа (т.е. я и люди, живущие в одной семье, которые могут, как и я, имеют доступ к настоящим DVD-дискам в удобное для них время) , но отказывает в этом другим пользователям (т.е. людям, которые разместили комментарии в моем блоге) и возвращает HTTP 404.
Теперь, обслуживание этих файлов напрямую с использованием Apache и mod_wsgi
довольно проблематично, потому что, когда приходит HTTP-запрос для файлов мультимедиа (то есть http://video.mywebsite.com/my-favorite-movie/
), мне нужно проверить по моей пользовательской базе данных, что человек на другом Конец имеет соответствующие разрешения.
Вопрос : можно Я достигну этого эффекта без подачи медиафайлов непосредственно через представление Django? Какие у меня варианты?
Одна вещь, о которой я подумал, - это написать простой скрипт, который берет идентификатор сеанса и фрагмент видео и возвращает некоторое логическое значение, указывающее, может ли пользователь (или не может) получить доступ к видеофайлу. Затем каким-то образом попросите mod_wsgi
выполнить этот сценарий перед доступом к запрошенному URL-адресу и вернуть HTTP 404, если сценарий не выполнен. Тем не менее, я понятия не имею, возможно ли это.
Редактировать : публикация этого вопроса прояснила некоторые мои идеи для поиска, и я столкнулся с mod_python
расширением оболочки для файлов . У кого-нибудь есть достаточно опыта, чтобы подтвердить, что это жизнеспособное решение?