[Django] 제네릭 뷰 (Generic View)

cdwde·2021년 3월 30일
0

Django

목록 보기
6/13

❗ View

  • 한 개의 HTTP 요청에 대해 1개의 뷰가 호출

  • urls.py/urlpatterns 리스트에 매핑된 호출 가능한 객체

  • view 호출 시

    • 첫 번째 인자: HttpRequest 객체
    • 두 번째 인자: url captured values (현재 요청의 URL로부터 Capture된 문자열들)
  • view 호출에 대한 return값

    • HttpResponse 객체 리턴

🎈 클래스 기반 뷰 (CBV)

  • view 함수를 만들어주는 클래스

  • 상속과 믹스인 기능을 이용해서 코드 재사용하고 뷰를 체계적으로 구성

  • HTTP 메소드에 따른 처리 코드를 작성할 때 if 함수 대신 메소드 명으로 코드의 구조가 깔끔

  • 다중 상속 같은 객체지향 기법을 활용해 제네릭 뷰, 믹스인 클래스 등을 사용해 코드의 재사용과 개발 생산성을 높여줌

  • urls.py에 .as_view()메서드와 함께 사용


🎈 제네릭 뷰 (Generic View) 란?

장고에서 자주 쓰는 뷰를 미리 만들어 제공

클래스 형으로 구현되어 있기 때문에 상속받아 사용

Base View

뷰 클래스를 생성하고 다른 제네릭 뷰의 부모 클래스가 되는 기본 제네릭 뷰

  • View: 최상위 부모 제네릭 뷰 클래스

  • TemplateView: 주어진 템플릿으로 렌더링

  • RedirectView: 주어진 URL로 리다이렉트

Generic Display View

객체의 목록 또는 하나의 객체 상세 정보를 보여주는 뷰

  • DetailView: 조건에 맞는 하나의 객체 출력

  • ListView: 조건에 맞는 객체 목록 출력

Generic Edit View

폼을 통해 객체를 생성, 수정, 삭제하는 기능을 제공하는 뷰

  • FormView: 폼이 주어지면 해당 폼을 출력

  • CreateView: 객체를 생성하는 폼 출력

  • UpdateView: 기존 객체를 수정하는 폼을 출력

  • DeleteView: 기존 객체를 삭제하는 폼을 출력

Generic Date View

날짜 기반 객체의 연/월/일 페이지로 구분해 보여주는 뷰

  • ArchiveIndexView: 지정 날짜필드 역순으로 정렬된 목록 출력

  • YearArchiveView: 주어진 연도에 해당하는 객체 출력

  • MonthArchiveView: 주어진 날짜에 해당하는 객체 출력

  • DayArchiveView: 주어진 날짜에 해당하는 객체 출력

  • TodayArchiveView: 오늘 날짜에 해당하는 객체 출력

  • DateDetailView: 주어진 연, 월, 일 PK에 해당하는 객체 출력

  • 공통 옵션 - allow_future


🎈 제네릭 뷰 오버라이딩

속성 변수 오버라이딩

  • model: Base View(View, TemplateView, RedirectView) 제외하고 모든 제네릭 뷰에서 사용

  • queryset: Base View(View, TemplateView, RedirectView) 제외하고 모든 제네릭 뷰에서 사용
    queryset을 사용하면 model 속성은 무시됨

  • template_name: TemplateView를 포함한 모든 제네릭 뷰에서 사용
    템플릿 파일 명을 문자열로 지정

  • context_object_name: 뷰에서 템플릿 파일에 전달하는 context 변수명 지정

  • paginate_by: ListView와 날짜 기반 뷰에서 사용
    페이징 기능이 활성화 된 경우 페이지 당 출력 항목 수를 정수로 지정

  • date_field: 날짜 기반 뷰에 사용
    필드의 타입은 DateField / DateTimeField

  • form_class: FormView, CreateView, UpdateView에서 폼을 만드는데 사용할 클래스 지정

  • success_url: FormView, CreateView, UpdateView, DeleteView에서 폼에 대한 처리가성공한 후 리다이렉트할 URL 주소

메소드 오버라이딩

  • def get_queryset()
    - BaseView(View, TemplateView, RedirectView)를 제외하고 모든 제네릭 뷰에서 사용
    - 디폴트는 queryset 속성을 반환
    - queryset 속성이 지정되지 않은 경우 모델 매니저 클래스의 all() 메소드를 호출 해 QuerySet 객체를 생성해 반환

  • def get_context_data(**kargs)
    뷰에서 템플릿 파일에 넘겨주는 context 데이터를 추가하거나 변경하는 목적으로 오버라이딩

  • def form_valid(form)

모델을 지정하는 3가지 방법

  • model 속성 변수 지정

  • queryset 속성 변수 지정

  • def get_queryset() 메소드 오버라이딩

참고
https://wikidocs.net/9623

0개의 댓글