[4th TeamProject] - 미디어 파일 저장 경로 설정

장현웅·2023년 10월 21일

이번 서비스는 사용자의 얼굴 사진을 업로드하여 다양한 표정으로 변환시켜주는 서비스입니다.

서비스를 이용하는 사용자가 많아질 수록 미디어 파일들을 사용자별로 관리해주기 위해 미디어 파일 경로 설정에 몇몇 작업들을 해줬습니다.

[ user/models.py ]

def image_upload_path(instance, filename):
    return f'user/{instance.owner.id}/profile_img/{filename}'

class ProfileImage(models.Model):
    """
    사용자의 프로필 이미지 모델을 정의하는 클래스입니다.

    - owner : 프로필 사진의 주인입니다.
    - profile_img : 사용자의 프로필 이미지입니다.
    """
    owner = models.ForeignKey(settings.AUTH_USER_MODEL, verbose_name='작성자', on_delete=models.CASCADE, related_name='profile_img')
    profile_img = models.ImageField('프로필 이미지', upload_to=image_upload_path)

    class Meta:
        db_table = 'profile_img'

[ post/models.py ]

def image_upload_path(instance, filename):
    timestamp = datetime.now().strftime("%Y%m%d%H%M%S%f")
    return f'user/{instance.owner.id}/converted_img/{filename}_{timestamp}'

class Image(models.Model):
    """
    - owner : 이미지 변환을 요청하는 사용자입니다.
    - image : 변환된 이미지의 url입니다.
    - created_at : 변환된 이미지가 생성된 일자 및 시간입니다.
        - 변환된 이미지가 생성된 시간을 자동으로 저장하도록 설정합니다.
    """
    owner = models.ForeignKey(settings.AUTH_USER_MODEL, verbose_name='작성자', on_delete=models.CASCADE)
    image = models.ImageField('변환 이미지', upload_to=image_upload_path)
    created_at = models.DateTimeField("생성 시각", auto_now_add=True)

    class Meta:
        db_table = 'image'

image_upload_path(instance, filename) 함수는 Django의 ImageField 혹은 FileField와 함께 사용되어 이미지 파일을 업로드할 경로를 지정하기 위해 사용되는 사용자 정의 함수입니다. 이 함수는 파일을 저장할 경로를 지정하고 해당 경로에 파일 이름을 설정합니다.

  • instance: 이미지가 연결될 모델 객체입니다.
  • filename: 업로드 될 파일의 이름입니다.

위와 같이, 사용자의 id별로 파일들을 관리할 수 있어서 유지보수 관리가 쉬워질 것이 기대됩니다.

0개의 댓글