Django: Как обслуживать мультимедиа для аутентифицированных пользователей из частных пространств цифрового океана?

Я создал частное пространство на DigitalOcean и могу успешно загружать на него файлы изображений с помощью django-storages, согласно методу подклассификации S3Boto3Storage показанному здесь Витором Фрейтасом. Я опущу все настройки S3 из settings.py, если только кто-нибудь не попросит об этом.

Большинство документации, которую я нашел, похоже, сосредоточено на генерации временных ссылок общего доступа к файлам с помощью предварительно подписанных ссылок, что не является обязательным требованием для меня и порождает больше вопросов, чем ответов. Должны ли все предварительно подписанные ссылки истекать? Чтобы показать медиа в частном пространстве в моем шаблоне, нужно ли мне генерировать заранее подписанные урлы через параметр поля django "upload_to=", с чем-то вроде:

def url_generator(instance, filename):
    new_file_path = # using some pre-signed url generator function using boto3?
    return new_file_path


class Photo(models.Model):
    image_file = models.ImageField(storage=PrivateMediaStorage(), upload_to=url_generator)

    def __str__(self):
        return str(self.image_file.name)

... или это своего рода антипаттерн? Нужно ли генерировать предварительно подписанные урлы в моей логике представления?

def view_photo_grid(request):
    images = Photo.objects.all()
    for i in images:
        # create some presigned url for each and render it to the template
    return render (request, 'pages/gallery.html', {'images':images_with_url})

...или это вопрос написания пользовательской функции генератора url для использования в шаблоне, что-то вроде:

{% for image in images %}
{{image.image_file.get_custom_presigned_url}}
{% endfor %}

Спасибо за любой взгляд на проблему.

Вернуться на верх