일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | 3 | 4 | |||
5 | 6 | 7 | 8 | 9 | 10 | 11 |
12 | 13 | 14 | 15 | 16 | 17 | 18 |
19 | 20 | 21 | 22 | 23 | 24 | 25 |
26 | 27 | 28 | 29 | 30 | 31 |
- merge
- Class
- socket io
- SSA
- NeXT
- RDS
- Vue
- 카톡
- docker
- wetube
- 중급파이썬
- MongoDB
- react
- 채팅
- async
- node
- lambda
- git
- Props
- TypeScript
- flask
- pandas
- 튜플
- dict
- S3
- SAA
- EC2
- crud
- AWS
- 파이썬
- Today
- Total
초보 개발자
Http404, FBV detail -> CBV detail 본문
Http404
pk값을 받아와서 그에 해당하는 방을 보여주는 기능이다. 다만 여기서 url에 213123과 같은 숫자를 적으면
우리의 db에 값이 없기때문에 오류가 날 것이다.
따라서 try, except문을 사용하여 제어해주려고 한다. 먼저 DoesNotExist가 일어났을 때
raise Http404()를 에러를 일으킨다. 이는 자동으로 templates에 404.html이 있는지 확인하고 있다면 그 html을 자동으로 render해준다. 이를 사용하기 위해선 from django.http import Http404 를해와야 한다.
이렇게 하지않고 단순히 return redirect(reverse('core:home')) 처럼 해주어도 된다.
FBV detail -> CBV detail
위의 코드를 단 한줄로 끝내버렸다.
심지어 db에 없는 방에 접근하면 http404까지 raise시킨다.
기본적으로 DetailView는 model을 정의해야한다. 우리는 Room모델을 자세히 보기위해서 만든 것이므로 당연히 Room모델을 모델로 설정해야한다. 이렇게 설정하면 기본적으로 context에 object 혹은 room이라는 이름으로 전달된다. 둘다 사용가능하다.
저 단 두줄만으로도 아래와 같은 정보가 출력이 되는 이유는 아래와 같이 room을 사용했기 때문이다.
그럼 어떻게 저 방의 id를 얻었는지도 궁금하다. 그 이유는 DetailView는 기본적으로 argument로 pk를 기본적으로 찾는다.
자동으로 pk argument를 가져와서 해당하는 방을 찾아서 render해주는 것이다. 자동으로 room_detail.html을 렌더해주기 때문에 전에 detail.html 이었던 것을 room_detail.html로 바꿔주기만 하면 되는 것이다.
사실 너무 간단해서 더 어렵다.
모든 기능이 숨겨져 있어서 직관적으로 알기쉽지않기때문이다.
하지만 확실히 그 기능을 다 이해한다면 FBV 보다 CBV가 더 편할 것 같다.
'Python > airbnb 클론' 카테고리의 다른 글
django Filtering Form API (0) | 2022.02.09 |
---|---|
django Filtering (0) | 2022.02.08 |
url 'namespace : name', reverse, get_absolute_url (0) | 2022.02.07 |
listview (0) | 2022.02.06 |
pagenation 2 (0) | 2022.02.06 |