- 내일배움캠프 38일차 목차
[오늘 한일]
- 팀프로젝트 진행
- JS 프론트엔드 구축 공부
[오늘 배운점]
장고
<모델에 여러개 pk키를 만들수 없다>
유저 기능을 맡으신 팀원분께서,
유저 모델을 계획하실때 id와 username을 둘다 pk키로 두셨다.
실제 오늘 모델을 작성하시고 테스트 해보셨는데,
결론적으로 여러개 필드를 pk로 설정할수 없었다.
class User(AbstractBaseUser):
(중략)
username = models.CharField(max_length=32, unique=True, primary_key=True)
작성하신 User모델에 해당 부분이다.
username에 primary_key 속성을 True로 부여하여, pk로 삼을 수 있다.
이럴 경우 원래 기본 pk인 id는 필드가 생성되지 않는다.
id는 사용처가 많기 때문에 꼭 필요하다.
username에 해당 속성을 주면서 pk_id도 제대로 생성되게 할수는 없는지 확인해봤다.
장고 문서에 보니 장고는 오직 하나의 pk키를 지원한다고 한다.
https://django.readthedocs.io/en/stable/faq/models.html
해당 안내에는 pk키가 하나인것이 문제가 되지 않을 것이라고도 적혀있다.
결국 우리는 id를 pk로 두고,
username은 unique한 속성을 가진 한 필드로 두기로 했다.
결론, 장고에서는 여러개 pk키를 지원하지 않는다.
<마이그레이션 파일도 커밋의 대상>
장고 각 앱 폴더 아래에는 마이그레이션 폴더와 그 파일들이 있다.
이 부분은 gitignore.io에서 추출한 gitignore에서는 제외 대상이 아니다.
즉, 공유해도 되는 파일이라는 뜻인데,
그동안 나는 db가 각자 따로이다보니, 이것도 따로라고 생각해 커밋의 대상으로 삼지 않았었다.
그런데 오늘 프로젝트를 진행하며 이 문제를 다시 마주하게 되었고,
팀원분과 얘기해본 결과, 마이그레이션 파일들은 커밋의 대상이 되는게 적합하다고 배우게 되었다.
앱 기능 작성자가, 작성한 모델을 makemigrations 시킨다.
그럼 migration 폴더와 파일들이 생기게 된다.
이 파일들을 커밋하게 되면 내려받은 다른 팀원은 migrate만 시키면 된다.
해당 파일들 덕분에 migration이 잡혀있는 셈이 된다.
다만 유저모델에 관해서는 아래와 같은 에러가 날수 있다.
django.db.migrations.exceptions.InconsistentMigrationHistory: Migration admin.0001_initial is applied before its dependency user.0001_initial on database 'default'.
이런 경우 sqlite3파일을 제거하고 migrate하면 된다.
(초기 상태로 migrate를 한차례 했었을때 위 에러가 나온다.)
기존 모델에서 변경점이 생겼을때 위와 같이 해줘야 한다.
깃
<커밋 메세지는 수정가능>
내 마지막 커밋은 커밋메세지를 수정할수 있다.
명령어는 git commit --amend이다.
vscode의 소스제어에서도 해당 기능버튼이 있다.
<pull request title도 수정가능>
pull request의 제목은 별도로 적어주는 부분이다.
만약 고치고 싶다면 pull request로 들어가면 Title 옆에 edit 버튼으로 수정할 수 있다.
JS
<JS 프론트엔드 알게된 포인트들>
- java script에 변수 선언, const는 변하지 않을, let은 변할수 있는 변수를 선언할때 사용한다.
- script에서 html본문에서 태그등 본문을 가져올때,
html파일에서 script태그(임포트하는)는 바디의 맨밑에 적는다.
그래야 처리 속도차이로 못가져오는 일 없이 잘 불러올수 있다.
- classlist.toggle 없으면 넣고, 있으면 뺀다. 좋아요 버튼을 만드는데 적합하다.
- Array.from(listItem).forEach() 클래스명을 이용한 엘리먼트와 짝으로 사용된다.
리스트를 배열로 바꿔주는데, 불필요한 부분도 빼준다.
- 엘리먼트에 .id, .innerText, .innerHTML등으로 태그에서 필요한 부분을 골라낸다.
- 가공된 엘리먼트를 다시 html로 넣을때는 append()를 쓴다.
appendchild()로 가공중인 엘리먼트에 자식 태그를 붙일수 있다.
- .previousSibling 같은 형제태그중 바로 앞태그를 가져온다.
다른 함수도 있을것 같지만 우선 이것만 익혀봤다.
html
- onclick(this) 해당 태그를 인자로 실어보낸다. 이는 JS에서 엘리먼트로 바로 활용가능.
- ul. unordered list 점자를 찍는 리스트이다.
- ol. ordered list 숫자로 나열하는 리스트이다.
- 부트스트랩을 쓸때는 구역을 컨테이너로 잡는 것부터 시작한다.