Django 클래스 기반 View
2022. 1. 8. 20:40ㆍ강의 정리/Django Views
반응형
장고(Django)를 배우기 시작한 입문자이시거나, 또는 배우고 싶은 생각이 있으신 분은 위 출처의 강의를 적극 추천드립니다!!!
클래스 기반 뷰 (CBV)
- 공통 기능들은 상속 문법으로 적용
- View 함수를 만들어주는 클래스 # as_view() 클래스 함수를 통해, View 함수를 생성
- 상속을 통해, 여러 기능들을 믹스인
- https://docs.djangoproject.com/ko/4.0/topics/class-based-views/
CBV 컨셉 구현해보기
1. 함수 기반 뷰 (FBV)
- instagram/urls.py
urlpatterns = [
path('<int:pk>/', views.post_detail), # Post.DoesNotExist 오류
# 숫자 타입이 나오고, /로 끝날경우 뒤 함수를 호출하겠다는 의미
]
- instagram/views.py
def post_detail(request: HttpRequest, pk: int) -> HttpResponse:
post = get_object_or_404(Post, pk=pk) # 앞 pk는 필드 종류, 뒷 pk는 실제 pk 값을 의미
return render(request, 'instagram/post_detail.html', {
'post' : post,
})
# get_object_or_404는 이름 그래도, url 접근시 해당 글이나, 데이터가 없을 때 404를 출력하게 하는 문법이다.
- instagram/templates/instagram/post_detail.html
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<meta http-equiv="X-UA-Compatible" content="IE=edge">
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<title>Document</title>
</head>
<body>
<h2>Author : {{ post.author }}</h2>
{% if post.photo %}
<div>
<img src="{{ post.photo.url }}" />
</div>
{% endif %}
{{ post.message }}
</body>
</html>
2. 장고 기본 제공 클래스 기반 뷰 (CBV)
- instagram/urls.py
urlpatterns = [
path('<int:pk>/', views.post_detail), # Post.DoesNotExist 오류
# 숫자 타입이 나오고, /로 끝날경우 뒤 함수를 호출하겠다는 의미
]
- instagram/views.py
from django.views.generic import DetailView
# pk_url_kwarg 인자를 "pk"로 지정했다면
post_detail = DetailView.as_view(model = Post)
# pk_url_kwarg 인자를 "pk"로 지정하지않았다면
post_detail = DetailView.as_view(model = Post, pk_url_kwarg='id')
# 상속을 통한 CBV 속성 정의
from django.views.generic import DetailView
class PostDetailView(DetailView):
model = Post
pk_url_kwarg = 'id'
post_detail = PostDetailView.as.view()
CBV
CBV가 정한 관례대로 개발할 경우, 아주 적은 양의 코드로 구현
- 그 관례에 대한 이해가 필요 -> FBV를 통한 개발경험이 큰 도움
- 필요한 설정값을 제공하거나, 특정 함수를 재정의하는 방식으로 커스텀 가능
- 하지만, 그 관례를 잘 이해하지 못하고 사용하거나, 그 관례에서 벗어난 구현을 하고자 할 때에는 복잡해지는 경향이 있다.
CBV를 제대로 이해하려면
- 코드를 통한 이해가 지름길 # 파이썬 클래스에 대한 이해가 필요하다.
CBV 코드를 동일하게 동작하는 FBV로 구현해보는 연습 추천
반응형
'강의 정리 > Django Views' 카테고리의 다른 글
Django 뷰 장식자(Decorators) (0) | 2022.01.10 |
---|---|
Django 기본 CBV API (Generic display views) (0) | 2022.01.10 |
Django 기본 CBV API (Base views) (0) | 2022.01.09 |
Django URL Dispatcher와 정규 표현식 (0) | 2022.01.07 |
Django 다양한 응답의 함수 기반 뷰 (0) | 2022.01.06 |