๐Ÿ“

FBV์™€ CBV

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(์กฐ๊ฑด์— ๋งž๋Š” ๊ฐ์ฒด์˜ ์›” ์ •๋ณด ์ถœ๋ ฅ, ๋‹จ์ผ์ •๋ณด)