지금까진 장고의 함수형 뷰만 사용했는데, 오늘은 클래스형 뷰를 배웠다.
상속(inheritance..맞나?)을 통해 코드를 간단하게 작성할 수 있는 이점이 있다. 하지만 이는 곧 단점이 되기도 하는데, 부모객체에서 받아오기 때문에, 부모 객체를 쉽게 수정할 수 없다는 점이다.
부모의 속성을 조금 다르게 상속받고 싶을 땐, '오버라이딩'을 해준다.
쉽게 생각해 오버라이딩은 덧씌우기인데, 부모 속성의 a를 자식 객체에서 바꿔주는 것이다.
ex 부모 클래스: a = '에이'
-> 자식 클래스(부모 클래스 상속 후): a = 'a'
클래스형 뷰를 사용하는 이유는 후에 DRF를 배울 때 더 적합하기 때문이라고 한다.
QuerySet : 데이터를 뜻한다.
class Letter(models.Model): # class는 모델을 만들 때 쓴다.
title = models.CharField('제목', max_length=100)
sender = models.CharField('보낸 이', max_length=100)
content = models.TextField('편지 내용')
class Meta: # 클래스 내부의 속성을 정해줄 수 있다.
verbose_name = '편지'
# 이 함수의 이름 마저도 약속이 돼있는 것
# 클래스 내부에 약속 돼있다.
def __str__(self):
return self.title
# makemigrations => migrate : db에 등록한다 모델을.
우선 싹다 가져오자
ListView는 보여주고자 하는 모델을 리스트로 쪼로록 보여주는 속성이다.
class LetterListView라는 클래스를 선언해서 보여주겠다.
fields = ['title','sender','content'] 모든 필드를 다 쓰고 싶다면 간단히 fields = '__all__'
🔽 create.html
1) 자 일단 form태그를 선언하자. 그래야 submit button을 누르면 이 form이 전송되기 때문이다.
2) 어디로 전송되느냐, index page로 넘어간다!
3) 왜 index page로 넘어가느냐, 바로바로 class LetterCreateView에서 success_url을 index로 지정했기 때문이다!
4) index.html이 아닌 index로 지정한 이유는 urls.py에서 path(blahblah, name ='index')로 이미 지정해놨기 때문이다!
5) 그럼 form 태그 내부에 뭔가를 입력해야하지 않겠는가, 기본적으로 input 태그를 사용하여 내용을 입력할 수 있지만, 간단하게 {{form}}을 사용하면 model의 fields를 그대로 입력할 수 있게 된다.
6) 왜냐?! 바로 LetterCreateView가 CreateView(from 공식문서)를 상속받았기 때문에 {{form}}만 쓰더라도 Letter model의 필드값을 받아올 수 있는 것이다.
7) 장황했던 CreateView 구구절절 끝-