일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | 3 | 4 | 5 | 6 | 7 |
8 | 9 | 10 | 11 | 12 | 13 | 14 |
15 | 16 | 17 | 18 | 19 | 20 | 21 |
22 | 23 | 24 | 25 | 26 | 27 | 28 |
29 | 30 | 31 |
- Spark
- twosum
- ELK
- python
- 알고리즘
- Optimization
- elasticsearch
- 깊이우선탐색
- 장고
- leetcode
- 해시
- 파이썬
- 리트코드
- Algorithm
- solution
- 프로그래머스
- dump
- kibana
- daspecialty
- AWS
- dfs
- Easy
- 키바나
- 엘라스틱서치
- Medium
- RecommendationSystem
- 스파크
- CentOS
- Django
- programmers
- Today
- Total
Archive
[Django] Class-based View 본문
1. Class-Based View
효율적인 메소드 구분 및 상속 및 Generic View를 사용하기 위해 보통 Class로 View 함수를 구성한다
1) URL conf
View Class에서 제공하는 as_view() 메소드를 통해 클래스형 뷰 사용을 명시해준다.
#urls.py
from django.urls import path
from myapp.views import MyView
urlpatterns = [
path('about/',MyView.as_view()),
]
2) View 정의
as_view() 메소드는 클래스의 인스턴스를 생성하고, disparch() 메소드를 호출하여 HTTP 메소드를 파악하여, 동일한 HTTP 메소드를 파악하여 해당 함수를 호출한다. 해당하는 HTTP 메소드가 정의되지 않았을 시엔 HTTPResponseNotAllowed Exception을 발생시킨다. ( as_view(),disparch() 메소드는 View 클래스에 정의되어 있음 )
# views.py
from django.http import HttpResponse
from django.views.generic import View
class MyView(View):
def get(self, request):
#~~~
return HttpResponse('result')
2. Generic View
웹 개발시 공통적으로 사용할 수 있는 로직을 개발해 놓은 View이다.
공통 로직을 추상화하여 제공하며, 이를 통해View 개발 과정에서 개발자의 단순 반복작업을 덜어주게 된다.
클래스형 뷰로 구성되어 있으며 크게 4가지로 분류할 수 있다
- Base View : View Class를 생성하여 다른 Generic View의 부모 클래스를 제공하는 기본 Generic View
- View, TemplateView, RedirectView 등 - Generic Display View : 객체 리스트 / 상세정보 보여줌
- ListView, DetailView 등 - Generic Edit View : Form을 통해 객체 생성/수정/삭제 기능 제공
- FormView, CreateView, UpdateView, DeleteView 등 - Generic Data View : 날짜 기반 객체의 연/월/일 페이지로 구분해서 보여줌
- ArchiveIndexView, YearArchiveView, MonthArchiveView 등
클래스형 뷰 작성시, 주로 Generic View를 상속받아서 작성하게 된다.
이 때, 성격에 어떤 Generic View를 사용할 것인지 정해야한다
ex ) Table에서 복수의 Record를 가져오는 경우 - IndexView 사용,
Table 에서 특정 한 개의 Record를 가져오는 경우 - ResultsView 사용
Ex1) Class based View를 활용한 Form 처리
: GET / POST 등을 클래스 내의 메소드로 구분하여 처리
from django.http import HttpRespondRedirect
from django.shortcuts import render
from django.views.generic import View
from .forms import MyForm
class MyFormView(view):
form_class = MyForm
initial = {'key':'value'}
template_name = 'form_template.html'
def get(self, request, *args, **kwargs):
form = self.form_class(initial=self.initial)
return render(request, self.template_name, {'form':form})
def post(self, request, *args, **kwargs):
form = self.form_class(request.POST)
if form.is_valid():
#form 처리 로직
return HttpResponseRedirect('/success/')
return render(request, self.template_name, {'form':form})
Ex2) Generic View ( FormView) 를 활용한 폼 처리
from .forms import MyForm
from django.views.generic.edit import FormView
class MyFormView(FormView):
form_class = MyForm
template_name = 'form_template.html'
success_url = '/thanks/'
def form_valid(self,form):
#폼 처리 로직
return super(MyFormView, self).form_valid(form)
*form_class : forms.py 내 클래스명 ( 사용자에게 보여줄 폼 정의)
*template_name : form 을 포함하여 렌더링할 템플릿 파일 이름
*success_url : MyFormView 처리가 정상적으로 완료되었을 떄 redirect 시킬 URL
*form_valid() 함수 : 유효한 폼 데이터로 처리할 로직. super() 를 통해 success_url로 지정된 URL로 redirect 처리
파이썬 웹 프로그래밍 - 4. Django 핵심기능
'------ Web ------ > Backend' 카테고리의 다른 글
[Django] Project Home Page (실습4) (0) | 2022.07.20 |
---|---|
[Django] Book Application 개발 (실습3) (0) | 2022.07.13 |
[Django] Form (0) | 2022.07.03 |
[Django] Template System (0) | 2022.06.28 |
[Django] Admin (0) | 2022.06.26 |