Django 클래스 기반 View

2022. 1. 8. 20:40강의 정리/Django Views

반응형

출처 : https://www.inflearn.com/course/%ED%8C%8C%EC%9D%B4%EC%8D%AC-%EC%9E%A5%EA%B3%A0-%EC%9B%B9%EC%84%9C%EB%B9%84%EC%8A%A4/dashboard

 

장고(Django)를 배우기 시작한 입문자이시거나, 또는 배우고 싶은 생각이 있으신 분은 위 출처의 강의를 적극 추천드립니다!!!

 

 


 

 

클래스 기반 뷰 (CBV)

 

Class-based views | Django 문서 | Django

Django The web framework for perfectionists with deadlines. Overview Download Documentation News Community Code Issues About ♥ Donate

docs.djangoproject.com

 


 

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로 구현해보는 연습 추천

 

 

반응형