Сделайте файлы общедоступными при загрузке в корзину AWS S3 из Django

#django #amazon-s3 #django-models #django-rest-framework

Вопрос:

В данный момент я работаю с базовым приложением для потоковой передачи музыки и хотел бы, чтобы все файлы, загруженные в мою корзину S3, имели общедоступный доступ для чтения. Прямо сейчас, когда они загружаются с помощью «upload_to» в поле файла, они не являются общедоступными. Как бы я изменил свой код, чтобы сделать этот процесс автоматическим?

концерт.модели

 from django.db import models
from django.db.models import (
    CharField,
    TextField,
    ForeignKey,
    BooleanField,
    DateField,
    FileField,
    IntegerField,
    CASCADE
)
import uuid
import pdb
from django.contrib.auth.models import User
from django.utils import timezone
from django.utils.timezone import now


def user_directory_path(instance, filename):
    random_file_name = "".join([str(uuid.uuid4().hex[:6]), filename])
    return "concerts/{0}/{1}/{2}/{3}/{4}/{5}".format(instance.concert.date.year, instance.concert.date.month, instance.concert.date.day, instance.concert.venue, instance.concert.pk, random_file_name)


class Band(models.Model):
    name = TextField()

    def __str__(self):
        return self.name

class Concert(models.Model):
    venue = TextField()
    date = DateField()
    city = CharField(null=True, blank=True, max_length=100)
    state = CharField(null=True, blank=True, max_length=100)
    country = TextField()
    band = ForeignKey(Band, on_delete=CASCADE, related_name='concert')
    user = ForeignKey(User, on_delete=CASCADE, related_name='concert')
    date_created = DateField(default=now)

    def save(self, *args, **kwargs):
        '''On save, update timestamps '''
        if not self.id:
            self.date_created = timezone.now()
        return super(Concert, self).save(*args, **kwargs)

    def __str__(self):
        return self.venue

class Song(models.Model):
    title = TextField()
    concert = ForeignKey(Concert, on_delete=CASCADE, related_name='song')
    user = ForeignKey(User, on_delete=CASCADE, related_name='song', null=True, blank=True)
    concert_order = IntegerField(null=True, blank=True)
    audio_file = models.FileField("Song", upload_to=user_directory_path, null=True)
    date_created = DateField(default=now)

    def save(self, *args, **kwargs):
        '''On save, update timestamps '''
        if not self.id:
            self.date_created = timezone.now()
        return super(Song, self).save(*args, **kwargs)

    def __str__(self):
        return self.title