Получение предписанных S3 url для медиа в Django
Мы используем django rest framework для проекта и здесь мы пытаемся избежать использования сериализаторов. Наш AWS S3 является частным, поэтому нам необходимо предоставить пользователю ключ с предварительной подписью, чтобы он мог видеть изображение. Изначально наш S3 был публичным, поэтому мы использовали функцию annotate для преобразования пути к изображению в ссылку на изображение следующим образом :
def getImageFormatter(key:str)->Func:
"""Function to Get Formatted URL"""
return Case(
When(
**{f'{key}__exact':''},
then=Value(None)
),
When(
**{f'{key}__isnull':False},
then=Concat(
Value(settings.MEDIA_ROOT),
F(key),output_field=CharField()
)
),
default=Value(None),
output_field=CharField(null=True)
)
Проблема в том, что это работает только для публичного S3. Как сделать так, чтобы мы могли получить изображение на аннотации? Например, использовать пользовательскую функцию django db или что-то еще? Любая подсказка будет оценена по достоинству .
Используемая нами база данных - PostgreSQL
.
Мы используем boto3
и django-storages
для подключения к нашему s3 bucket.
На самом деле мы не пытаемся прогнать его через сериализатор, а получаем данные напрямую, используя annotate и values.