Django 기본 CBV API (Base views)

2022. 1. 9. 22:15강의 정리/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)를 배우기 시작한 입문자이시거나, 또는 배우고 싶은 생각이 있으신 분은 위 출처의 강의를 적극 추천드립니다!!!

 

 


 

 

Built-in CBV API

  • Base views # View, TemplateView, RedirectView
  • Generic display views # DetailView, ListView
  • Generic date views # ArchiveIndexView, YearArchiveView, WeekArchiveView, DayArchiveView, TodayArchiveView, DateDetailView
  • Generic editing views # FormView, CreateView, UpdateView, DeleteView

 

 

https://docs.djangoproject.com/ko/4.0/ref/class-based-views/

 

Built-in class-based views API | Django 문서 | Django

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

docs.djangoproject.com

 

 

 

# 실제 웹 api를 만들 때에는 Django restframework를 사용하게된다. 그럼에도 불구하고 CBV를 알아야 하는 이유는  Django restframework에도 CBV의 개념이 포함되어있기 때문이다.

 


 

View

  • 모든 CBV의 모체 # 이 CBV를 직접 쓸 일은 거의 X
  • http method별로 지정 이름의 멤버 함수를 호출토록 구현 # GET 요청이 오면, 실제 소문자 get 멤버 함수를 호출
  • # request.method.lower() 이름의 멤버함수를 호출 POST -> post 멤버함수, GET -> get 멤버 함수

https://docs.djangoproject.com/ko/4.0/ref/class-based-views/base/#templateview

 

Base views | Django 문서 | Django

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

docs.djangoproject.com

 

 

제네릭 뷰
뷰 개발 과정에서 공통적으로 사용할 수 있는 기능들을 추상화하고, 장고에서 기본적으로 제공해주는 클래스형 뷰이다.

Django 의 제네릭 뷰

Django 에서 제공하는 제네릭 뷰는 다음과 같이 4가지로 분류할 수 있다.

  • Base View: 뷰 클래스를 생성하고, 다른 제네릭 뷰의 부모 클래스를 제공하는 기본 제네릭 뷰
  • Generic Display View: 객체의 리스트를 보여주거나, 특정 객체의 상세 정보를 보여준다.
  • Generic Edit View: 폼을 통해 객체를 생성, 수정, 삭제하는 기능을 제공한다.
  • Generic Date View: 날짜 기반 객체의 년/월/일 페이지로 구분해서 보여준다.

아래는 위 4가지 분류에 따른 구체 뷰 클래스에 대한 설명을 보여준다.

  • Base View
    • View: 가장 기본이 되는 최상위 제네릭 뷰
    • TemplateView: 템플릿이 주어지면 해당 템플릿을 렌더링한다.
    • RedirectView: URL이 주어지면 해당 URL로 리다이렉트 시켜준다.
  • Generic Display View
    • DetailView: 객체 하나에 대한 상세한 정보를 보여준다.
    • ListView: 조건에 맞는 여러 개의 객체를 보여준다.
  • Generic Edit View
    • FormView: 폼이 주어지면 해당 폼을 보여준다.
    • CreateView: 객체를 생성하는 폼을 보여준다.
    • UpdateView: 기존 객체를 수정하는 폼을 보여준다.
    • DeleteView: 기존 객체를 삭제하는 폼을 보여준다.
  • Generic Date View
    • YearArchiveView: 년도가 주어지면 그 년도에 해당하는 객체를 보여준다.
    • MonthArchiveView: 월이 주어지면 그 월에 해당하는 객체를 보여준다.
    • DayArchiveView: 날짜가 주어지면 그 날짜에 해당하는 객체를 보여준다.
  • http://ruaa.me/django-view/
 

Django - 클래스형 뷰

아래 내용은 파이썬 웹프로그래밍(한빛출판사) 책의 내용을 재정리한 것입니다. 요약 클래스로 작성되어 있는 뷰 객체를 말한다. 상속과 믹스인 기능 사용으로 코드의 재사용이 가능 뷰의 체계

ruaa.me

 

 


TemplateView: 템플릿이 주어지면 해당 템플릿을 렌더링한다.

 

 

# dongbaek/urls.py

urlpatterns = [

	path('', TemplateView.as_view(template_name='root.html'), name='root'),
]

 

# dongbaek/settings.py

TEMPLATES = [
    {
        'BACKEND': 'django.template.backends.django.DjangoTemplates',
        'DIRS': [
            # File System Template Loader
            os.path.join(BASE_DIR, 'inflearn', 'templates'),
        ],
        'APP_DIRS': True,
        'OPTIONS': {
            'context_processors': [
                'django.template.context_processors.debug',
                'django.template.context_processors.request',
                'django.contrib.auth.context_processors.auth',
                'django.contrib.messages.context_processors.messages',
            ],
        },
    },
]

 

# inflearn/root.html

Instagram with Django / React.

 

 


 

RedirectView: URL이 주어지면 해당 URL로 리다이렉트 시켜준다.

  • permanent (디폴트 : False)
    • True : 301 응답 (영구적인 이동) - 검색엔진에 영향
    • False : 302 응답 (임시 이동)
  • url = None
    • URL 문자열
  • pattern_name = None
    • URL Reverse를 수행할 문자열
  • query_string = False
    • QueryString을 그대로 넘길 것인지 여부

 

 

# dongbaek/urls.py

urlpatterns = [
    path('', RedirectView.as_view(url='/instagram/'), name='root'),
    ]

 

# 위의 주소 = '' 입력시 자동으로 url 인자 주소로 이동함

 

위와 다르게 url을 지정하는 방식

 

# dongbaek/urls.py

urlpatterns = [
    path('', RedirectView.as_view(
        pattern_name = 'instagram:post_list',
        ), name='root'),
        ]

Django에서는 위와 같이 pattern_name을 지정하는 것을 선호함

 

반응형