๐[Django] Generic View๋?
Generic View๊ฐ ๋ญ์ง?
์ ๋ค๋ฆญ ๋ทฐ
๋ ์ฅ๊ณ ์์ ์์ฃผ ์ฐ๋ ๋ทฐ๋ฅผ ๋ฏธ๋ฆฌ ๋ง๋ค์ด์ ์ ๊ณตํด์ฃผ๋ ๋ด์ฅ ๊ธฐ๋ฅ์ด๋ค.
class
๋ก ๊ตฌํ๋์ด ์๊ธฐ ๋๋ฌธ์ โ ์์ ๋ฐ์ ์ฌ์ฉํจ
์ฅ๊ณ ์ ์ ๋ค๋ฆญ ๋ทฐ๋ ๋ฐ์ดํฐ๋ฒ ์ด์ค ์ปจํ ์ธ ์ ๋ทฐ๋ฅผ ๋ณด์ฌ์ค ๋ ์ฅ์ ์ด ๋ง์
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
์ ํด๋นํ๋ ๊ฐ์ฒด ์ถ๋ ฅ
Generic View Overriding
์์ฑ ๋ณ์ ์ค๋ฒ๋ผ์ด๋ฉ
- model
- ๊ธฐ๋ณธ ๋ทฐ(View, Template, RedirectView)๋ฅผ ์ ์ธํ ๋ชจ๋ ์ ๋ค๋ฆญ ๋ทฐ์์ ์ฌ์ฉํจ
- queryset
- ๊ธฐ๋ณธ ๋ทฐ๋ฅผ ์ ์ธํ ๋ชจ๋ ์ ๋ค๋ฆญ ๋ทฐ์์ ์ฌ์ฉํจ
queryset
์ ์ฌ์ฉํ๋ฉดmodel ์์ฑ์ ๋ฌด์
๋จ
- template_name
TemplateView
๋ฅผ ํฌํจํ ๋ชจ๋์ ๋ค๋ฆญ ๋ทฐ
์์ ์ฌ์ฉํจ- ํ ํ๋ฆฟ ํ์ผ ๋ช ์ ๋ฌธ์์ด๋ก ์ง์ ํจ
- context_object_name
- ๋ทฐ์์ ํ ํ๋ฆฟ ํ์ผ์ ์ ๋ฌํ๋ ์ปจํ ์คํธ ๋ณ์๋ช ์ ์ง์ ํจ
- paginate_by
ListView
์๋ ์ง ๊ธฐ๋ฐ ๋ทฐ
์์ ์ฌ์ฉํจ- ํ์ด์ง ๊ธฐ๋ฅ์ด ํ์ฑํ ๋ ๊ฒฝ์ฐ, ํ์ด์ง๋น ์ถ๋ ฅ ํญ๋ชฉ ์๋ฅผ ์ ์๋ก ์ง์
- date_field
- ๋ ์ง ๊ธฐ๋ฐ ๋ทฐ์์ ์ฌ์ฉํจ
- ์ด ํ๋์ ํ์
์
DateField
๋๋DateTimeField
์
- form_class
FormView
,CreateView
,UpdateView
์์ ํผ์ ๋ง๋๋๋ฐ ์ฌ์ฉํ ํด๋์ค๋ฅผ ์ง์
- success_url
FormView
,CreateView
,UpdateView
,DeleteView
์์ ํผ์ ๋ํ ์ฒ๋ฆฌ๊ฐ ์ฑ๊ณตํ ํ, ๋ฆฌ๋ค์ด๋ ํธ ํ URL ์ฃผ์
๋ฉ์๋ ์ค๋ฒ๋ผ์ด๋ฉ
- def get_queryset()
- ๊ธฐ๋ณธ ๋ทฐ๋ฅผ ์ ์ธํ ๋ชจ๋ ์ ๋ค๋ฆญ ๋ทฐ์์ ์ฌ์ฉํจ
- ๊ธฐ๋ณธ์ผ๋ก
queryset
์์ฑ์ ๋ฐํํจ queryset
์์ฑ์ด ์ง์ ๋์ง ์์ ๊ฒฝ์ฐ, ๋ชจ๋ธ ๋งค๋์ ํด๋์ค์all()
๋ฉ์๋๋ฅผ ํธ์ถํดQuerySet
๊ฐ์ฒด๋ฅผ ์์ฑํด ๋ฐํํจ
- def get_context_data(**kwargs)
- ๋ทฐ์์ ํ ํ๋ฆฟ ํ์ผ์ ๋๊ฒจ์ฃผ๋ ์ปจํ ์คํธ ๋ฐ์ดํฐ๋ฅผ ์ถ๊ฐํ๊ฑฐ๋ ๋ณ๊ฒฝํ๋ ๋ชฉ์ ์ผ๋ก ์ค๋ฒ๋ผ์ด๋ฉํจ
- def form_valid(form)
๋ชจ๋ธ์ ์ง์ ํ๋ 3๊ฐ์ง ๋ฐฉ๋ฒ
- model ์์ฑ ๋ณ์ ์ง์
- queryset ์์ฑ ๋ณ์ ์ง์
def get_quesyset()
๋ฉ์๋ ์ค๋ฒ๋ผ์ด๋ฉ
์์ ์ฝ๋
from django.views.generic import ListView, DetailView
from .models import Question
class IndexView(ListView):
template_name = 'cbvpolls/index.html'
context_object_name = 'latest_question_list'
def get_queryset(self):
return Question.objects.order_by('-pub_date')[:5]
class DetailView(DetailView):
model = Question
template_name = 'cbvpolls/detail.html'
class ResultsView(DetailView):
model = Question
template_name = 'cbvpolls/results.html'
์ฐธ๊ณ ์๋ฃ
[Built-in class-based generic views | Django documentation](https://docs.djangoproject.com/en/5.0/topics/class-based-views/generic-display/) |
์ฅ๊ณ ๋ง์คํฐํ๊ธฐ - 10์ฅ - generic view - ๊น๋ก๋กโs blog
๋๊ธ๋จ๊ธฐ๊ธฐ