본문 바로가기

웹/Django

클래스형 뷰

A.진입메소드

진입메소드는 클래스를 선언하는 메소드이다.

예시

urls.py에서

urlpatterns=[

    path('about', MyView.as_view())

이때 as_view()가 진입메소드이다.

이런 진입메소드는 인스턴스를 생성하고 dispatch()메소드를 호출

dispatch()는 get, Post 형식을 구별하고 인스턴스 내에서 해당 이름의 메소드 요청을 한다.

메소드가 없으면 HttpResponseNotAllowed 예외를 띄운다.

as_view()와 dispatch() 는 django.Views.generic.View 클래스에 정의되어 있다.

django.Views.generic.View 를 상속받는 클래스 를 만들자.

 

B.클래스형 뷰는 함수형 클래스형이 있다.

함수형 예시

def my_view(request):

    if request.method== 'GET':

        return HttpResponse('result')

 

클래스형 예시

class MyView(View):

    def get(self, request):

        return HttpResponse('result')

 

C.뷰의 상속

클래스형 뷰의 대부분은 장고가 제공하는 제네릭 뷰를 상속한다.

제네릭 뷰: 공통적인 작업을 추상화 시켜 기본적으로 제공하는 클래스형 뷰

클래스형 뷰 예시

첫번째 방법

urls.py에서

urlpatterns=[

    path('about/', AboutView.as_view),

]

views.py에서

form django.view.generic import TemplateView

class AboutView(TemplateView):

    template_name="about.html"

 

두번째방법

urlpatterns=[

    path('about/', TemplateView.as_view(template_name="about.html")),

]

 

d.오버라이딩

template_name은  은 TemplateView 의 속성이다. 

하위 클래스의 메소드와 as_view() 메소드를 통해서 오버라이딩이 가능하다. 

' > Django' 카테고리의 다른 글

장고 프로젝트 순서 기본1 -모델  (0) 2020.12.14
제네릭 뷰  (0) 2020.12.11
폼 처리하기  (0) 2020.12.10
템플릿 활용법3 - 템플릿 상속  (0) 2020.12.10
템플릿 활용법2 -템플릿 태그  (0) 2020.12.09