Вы можете использовать @login_required
декоратор в представлении, которое показывает людям изображение, если они вводят URL-адрес, только если они вошли в систему. Раздел User Auth документации Django охватывает все это.
В качестве альтернативы, вы можете проверить, вошел ли пользователь через request.user в представлении, а затем не передавать подробности изображения в контексте в шаблон.
Или не отображать части шаблона, если пользователь не вошел в систему (я думаю, вероятно, самый уродливый метод)
{% if user.is_authenticated %}
# Do the template stuff
{% endif %}
Что касается ограничения доступа на s3, то оно немного сложнее. Вам нужно сделать ваши файлы закрытыми в корзине, а затем сгенерировать URL-адреса в Django, которые имеют строку запроса, позволяющую авторизованному пользователю получить доступ для загрузки конкретного объекта s3 с ограничением по времени. Подробности об этом можно найти в документации s3 . Подобный вопрос был задан ранее здесь на SO.