이번 서비스는 사용자의 얼굴 사진을 업로드하여 다양한 표정으로 변환시켜주는 서비스입니다.
서비스를 이용하는 사용자가 많아질 수록 미디어 파일들을 사용자별로 관리해주기 위해 미디어 파일 경로 설정에 몇몇 작업들을 해줬습니다.
[ 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별로 파일들을 관리할 수 있어서 유지보수 관리가 쉬워질 것이 기대됩니다.