User 모델을 커스텀 하는 방법만 배웠는데 다시 복습하니 AbstractUser와 AbstractBaseUser 둘 중 하나 선택하여 커스텀 할 수 있다.
(AbstractBaseUser가 좀 더 원시적으로 기능의 거의 없으며 커스텀 하기 좋다.)
로그인을 하면 db의 session 테이블에 session이 생성되고 브라우저에 session_key를 전달하여 쿠키에 저장한다.
그리고 서버에 요청을 보내면 session의 key값과 db에 있는 session_key와 비교하여 사용자를 인증한다.
로그인을 할 때 마다 session이 생기는데 쿠키는 매번 전달하여 번거롭다.
이제서야 토큰 방식으로 로컬스토리지에 저장하는 것이 더욱 좋다는 것을 이해하게 되었다.
content = models.TextField() 해당 필드로 생성된 object의 내용이 보이지 않는다.
다른 필드들은 html로 전달해주었을 때 잘 보이고, 똑같은 방식으로 전달했지만 해당 필드만 내용이 보이지가 않는다.
구글링을 해보니 대부분 null=True를 추가하면 된다고 하는데 db를 날리고 추가해서 migrate해도 해당 필드만 보이지가 않는다.
아 오타...장고 탬플릿에서 해당 필드만 object name을 오타낸거였다..
ForeignKey로 특정 모델을 참조한 필드에서 역으로 참조하고 싶을때는 related name이 설정되지 않았을 경우 orm을 할 때 필드name.역참조할 모델_set으로 역참조가 가능하고, 생성된 객체를 모두 가져오고 싶을 경우 필드name.역참조할 모델_set.all로 모두 가져올 수 있다.
django rest framework를 배우고 다시 pure django를 복습해보니 훨씬 이해가 쉬웠다.
하지만 pure django에서도 확실하게 이해가 되지 않고 넘어갔던 부분들이 있어 이번 기회에 복습하면서 다시 개념을 정립할 수 있었다.
특히 ForeignKey로 모델을 참조하는 것은 orm이 괜찮았지만 역참조하는 경우 많이 헷갈렸었는데
related name과 역참조한 필드를 orm을 할 수 있게 되었다.
이번 복습에서는 ForeignKey만 다루었지만 one-to-one, one-to-many many-to-one many-to-many 등 여러 관계에 대한 필드도 복습해서 개념 정리가 필요할 것 같다.