TIL - 0221

[ summary ]

  • 멜론 songs 과제 진행
  • 멜론 songs 에서 album_id 로 앨범정보 저장하는 것 까지 진행

이미지 넣는 꿀팁

upload_to - 문서

  • ContentFile클래스는 File클래스를 상속 받지만, 문자열 작동방식은 다르다.
  • 이전 코드에서 이미지를 저장하는 코드의 역할을 ContentFile 이 해주는 격
# artist/models.py
def dynamic_profile_img_path(instance, filename):
    # pk로 받으면 instance가 저장이 안되서 pk가없다.
    # pk 사용 로직
    # 저장 ->  pre_save -> save -> post_save -> 끝
    # 이 과정에서 pre_save때 이미지를 none으로 데이터베이스에 저장하고 post_save에서 원래 이미지 저장
    return f'artist/{instance.name}-{instance.melon_id}/profile_img.png'


class Artist(models.Model):
    img_profile = models.ImageField('프로필 이미지', upload_to=dynamic_profile_img_path, blank=True)


# views/add_from_melon.py
from django.core.files.base import ContentFile

    # 그림 파일 형태 가져오기
    binary_data = requests.get(url_img_cover).content

    # 파일 이름 지정
    from pathlib import Path
    file_name = Path(url_img_cover).name

    # Artist 저장
    artist, _ = Artist.objects.update_or_create(
              melon_id=artist_id,
              defaults={
            'name': db_name,
            'real_name': db_real_name,
            'nationality': db_nationality,
            'constellation': db_constellation,
            'birth_date': db_birth_date,
            'blood_type': db_blood_type,
            'img_profile': ContentFile(binary_data, name=file_name)
        } )

url 질의문자

? / &

에러 페이지

에러페이지 커스터마이징

  • Django 자체적으로 에러페이지를 제공해주고, 만약 403.htmlsetting.py설정후 template으로 사용가능
  • 새로운 template 파일이 추가됬을 경우엔 runserver 다시 실행
  • 500 Error: 일반적인 코드 오류도 포함
  • 모든 에러처리를 할 수 있는건 아닌 것 같다.
# config /seetings.py
# SECURITY WARNING: don't run with debug turned on in production!
DEBUG = False
ALLOWED_HOSTS = [*]


  • 브라우저 창에서 405상태라는 것을 확인 할 수 있음 작동이 잘되는 것에도 마음대로 status 를 주면 그렇게 받음.
return render(request, '405.html', status=405)

dictionary get()

  • 딕셔너리 안에 찾으려는 key 값이 없을 경우 미리 정해 둔 디폴트 값을 대신 가져오게 하고 싶을 때에는 get(x, ‘디폴트 값’)을 사용하면 편리하다.

blank와 null

null 인지 빈문자 검사때문에 blank = true는 하되 null =true 는 하지 않음

update_or_create

  • 내용 추가

정규표현식

# [ 문자 ] :  문자열로 인식
# [(] = \( 이거와 같음
p = re.compile(r'javascript:melon.link.goAlbumDetail[(]\'(\d+)\'[)]')

Branch 관련


git checkout -b test
git checkout master
git reset (commit번호) --hard

# master 브랜치에서 할것 - test 로 돌아올때.
git merge a9e2

# 전커밋으로 한단게 가는것
git reset HEAD~1
# 커밋과 코드 함께 변경
git reset HEAD~1 --hard
git checkout (11aa83717e)
# 브랜치삭제
git branch -d (삭제 브랜치)