[ summary ]
- 멜론 songs 과제 진행
- 멜론 songs 에서 album_id 로 앨범정보 저장하는 것 까지 진행
이미지 넣는 꿀팁
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.html
이setting.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 (삭제 브랜치)