본문 바로가기

Python/Django

이미지 수정하기 # 로직 # Django

728x90
반응형

image 수정하는 로직

  * 아무것도 넣지 않거나, 기존 이미지 삭제하는 경우 default 이미지 있어야 함
  * 변경하지 않고 저장하면 기존 이미지가 유지되어야 함 (수정 X, 삭제 X 인 경우)

  javascript로 프리뷰로 이미지 변경
    - 업로드하면 업로드 된 이미지
    - 삭제하면 default 이미지
   
    -> front에서 프리뷰 이미지 src가 default 이미지 경로로 잡혀 있으면 (.includes 등으로 확인)
       is_default_image 속성을 true 로 건네기
      - back에서는 is_default_image 값이 true로 들어오면 이미지 삭제 (또는 default 이미지 넣어주기)

    -> 프리뷰 이미지 src가 default 이미지 경로가 아닌 경우! 수정을 한 경우와, 업로드 후에 수정을 하지 않은 경우로 나뉨
      - backend에서 request.FILES.get("image") 가 None인지 아닌지 체크
      1) 수정을 한 경우
        값이 들어온다. 들어온 값으로 변경
      2) 수정을 안한 경우
        값이 None으로 들어온다. None일때는 아무런 동작 X (수정X, 삭제X)

 

* backend에서 실제로 파일을 저장할 때, file명이 고유해야 한다. 안 그러면 엄한 파일이 수정되고 삭제되는 경우가 생김

        company_logo = request.FILES.get("company_logo")     # 파일 받기
        company.logo.delete()                                # 기존 파일 삭제
        ext = str(company_logo).split(".")[-1]               # 확장자 별도 분리
        image_name = f'{company.id}.{ext}'                   # 고유한 값으로 변경
        company.logo = company_logo                          # DB 저장 (파일도 같이 저장됨)
        company.logo.name = image_name                       # 저장된 파일의을 변경해준 이름으로 바꿔줌
728x90
반응형