view๋ฅผ ์์ฑํ๋ ๋ฐฉ๋ฒ์ ํฌ๊ฒ FBV(Function based view)์ CBV(Class based view)๊ฐ ์์ต๋๋ค. ์ฐ๋ฆฌ๋ ์ง๊ธ๊น์ง ํจ์ ๊ธฐ๋ฐ์ผ๋ก viewํ์ผ์ ์์ฑํ์์ต๋๋ค.
์ด๋ฒ์๊ฐ์๋ CBV๋ฅผ ์ดํด๋ณผ ๊ฒ์
๋๋ค. ์ฅ๊ณ ๊ฐ ๊ธฐ๋ณธ์ ์ผ๋ก ๋ง์ด ์ฌ์ฉํ๋ ๊ฒ๋ค์ class๋ก ๊ตฌํํด๋์๊ณ , ์ฌ๋ฌ๋ถ์ ๋ณต์กํ ์ฝ๋ ์์ด๋ ์ด๊ฒ์ ์ฌ์ฉํ์ฌ view ํ์ผ์ ์์ฝ๊ฒ ๋ง๋ค ์ ์์ต๋๋ค.
ํ์ง๋ง CBV๊ฐ ์๋ํ๊ฐ ๋๊ณ ์์ ๋๊ฐ ๋จ์ด์ง๋ ๋งํผ ์ฌ๋ฌ๋ถ ํ๋ก์ ํธ์ ๋ง๋ ๊ฒ์ ์ฌ์ฉํ์๋ ๊ฒ์ด ์ข์ต๋๋ค. CBV๋ ์ ๋ค๋ฆญ ๋ทฐ๋ผ๊ณ ๋ ์๊ธฐํฉ๋๋ค.
์ด๋ฒ ์ค์ต์ c ์ฑ์์ ํด๋ณด๋๋ก ํ๊ฒ ์ต๋๋ค.
# c์ฑ์ views.py from django.shortcuts import render from django.views.generic import ListView from b.models import Blog # def indexC(request): # return render(request, 'indexC.html') class BlogList(ListView): #์ฌ๊ธฐ์ class๋ช ์ ์๊ด์ด ์์ต๋๋ค. model = Blog template_name = 'indexC.html'
ย
# urls.py from c.views import BlogList urlpatterns = [ #.. ์ค๋ต .. # path('cc/', indexC), path('cc/', BlogList.as_view()), #.. ์ค๋ต ..
ย
์ฌ๊ธฐ์ blog_list๋ models.py์ class ๋ช
์ ๋ฐ๋ผ ๋ณ๊ฒฝ๋ฉ๋๋ค.
# indexC.html <!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF-8"> <title>Document</title> </head> <body> <h1>hello world C</h1> {% for i in blog_list %} <h1>{{ i.title }}</h1> <p>{{ i.contents }}</p> {% endfor %} </body> </html>
ย
์์ ์ ์ข ๋ ํด๋ณด๋๋ก ํ๊ฒ ์ต๋๋ค.
# c์ฑ์ views.py from django.shortcuts import render from django.views.generic import ListView from b.models import Blog # def indexC(request): # return render(request, 'indexC.html') class BlogList(ListView): model = Blog template_name = 'indexC.html' ordering = '-pk'
ย
์ง๊ธ๊น์ง ์งํํ๋ ์์ธ ์ต์
๋ค์ ์ด๋์ ๊ตฌํ๋์ด ์์๊น์? ์๋ ๊ณต์ Django ์์ค๋ฅผ ์ฐธ๊ณ ํ์ธ์.
ย
์ข ๋ ๋ค์ํ ํ์ฉ๋ฒ์ ๋ฐฐ์ฐ์๊ณ ์ถ๋ค๋ฉด ๊ณต์ ํํ์ด์ง์ API reference๋ฅผ ์ฐธ๊ณ ํ์ธ์.
ย
์ด์ ์์์ ์์ฑํ์๋ simple ๊ฒ์ํ์ ์์ธ ํ์ด์ง๋ ๊ตฌํํด๋ณด๋๋ก ํ๊ฒ ์ต๋๋ค.
ย
# c์ฑ์ views.py from django.shortcuts import render from django.views.generic import ListView, DetailView from b.models import Blog # def indexC(request): # return render(request, 'indexC.html') class BlogList(ListView): model = Blog template_name = 'indexC.html' #class๋ช _list.html ํ์ผ์ ์๋์ผ๋ก ์ฐพ์ class BlogDetail(DatailView): model = Blog template_name = 'indexCdetail.html' #class๋ช _detail.html ํ์ผ์ ์๋์ผ๋ก ์ฐพ์
ย
ย
# indexCdetail.html <!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF-8"> <title>Document</title> </head> <body> <h1>hello world C</h1> <h1>{{ blog.title }}</h1> <p>{{ blog.contents }}</p> </body> </html>
ย
ย
Built-in class-based views APIยถ
Class-based views API reference. For introductory material, see theย Class-based viewsย topic guide.
- Base views(๋ทฐ ํด๋์ค ์์ฑ)
View
(์ต์์ ๋ทฐ, ๋ทฐ์ ๊ธฐ๋ฐ)TemplateView
(ํ ํ๋ฆฟ ๊ธฐ๋ฐ์ผ๋ก ๋ ๋๋ง ํด์ฃผ๋ ๋ทฐ)RedirectView
(๋ฆฌ๋ค์ด๋ ํธ ๋ทฐ โ ๋ค๋ฅธ ๊ณณ์ผ๋ก ์ด๋์ํค๋ ๋ทฐ)
- Generic display views(์ ๋ณด๋ฅผ ๋ณด์ฌ์ฃผ๋ ๋ทฐ)
DetailView
(ํน์ ๊ฐ์ฒด๋ฅผ ๋ณด์ฌ์ฃผ๋ ๋ทฐ)ListView
(์ฌ๋ฌ ๊ฐ์ฒด๋ฅผ ๋ณด์ฌ์ฃผ๋ ๋ทฐ)
- Generic editing views(CRUD ์ค CUD๋ฅผ ์ ๊ณตํด์ฃผ๋ view)
FormView
(ํผ์ ๋ณด์ฌ์ฃผ๋ ๋ทฐ)CreateView
(๊ฐ์ฒด๋ฅผ ์์ฑํ ์ ์๋ ํผ์ ๋ณด์ฌ์ฃผ๋ ๋ทฐ)UpdateView
(๊ฐ์ฒด๋ฅผ ์ ๋ฐ์ดํธ ํ ์ ์๋ ํผ์ ๋ณด์ฌ์ฃผ๋ ๋ทฐ)DeleteView
(๊ฐ์ฒด๋ฅผ ์ญ์ ํ ์ ์๋ ํผ์ ๋ณด์ฌ์ฃผ๋ ๋ทฐ)
- Generic date views(๋ ์ง ๊ธฐ๋ฐ์ ๋ทฐ)
ArchiveIndexView
(์กฐ๊ฑด์ ๋ง๋ ๊ฐ์ฒด๋ค์ ๋ ์ง ์ ๋ณด ์ถ๋ ฅ)YearArchiveView
(์กฐ๊ฑด์ ๋ง๋ ๊ฐ์ฒด๋ค์ ์ฐ๋ ์ ๋ณด ์ถ๋ ฅ)MonthArchiveView
(์กฐ๊ฑด์ ๋ง๋ ๊ฐ์ฒด๋ค์ ์ ์ ๋ณด ์ถ๋ ฅ)WeekArchiveView
(์กฐ๊ฑด์ ๋ง๋ ๊ฐ์ฒด๋ค์ ์ฃผ ์ ๋ณด ์ถ๋ ฅ)DayArchiveView
(์กฐ๊ฑด์ ๋ง๋ ๊ฐ์ฒด๋ค์ ์ผ ์ ๋ณด ์ถ๋ ฅ)TodayArchiveView
(์ค๋ ์ ๋ณด ์ถ๋ ฅ)DateDetailView
(์กฐ๊ฑด์ ๋ง๋ ๊ฐ์ฒด์ ์ ์ ๋ณด ์ถ๋ ฅ, ๋จ์ผ์ ๋ณด)