[Django] Class Based View, Funtion Based View
๐ก CBV
Django์์๋ ํด๋์ค ๊ธฐ๋ฐ ๋ทฐ (Class Based View)๋ฅผ ์ฌ์ฉํด
์ผ๋ฐ์ ์ธ ์น ๊ฐ๋ฐ ์์ ์ ๋ณด๋ค ์ฝ๊ณ ๊ตฌ์กฐํ๋ ๋ฐฉ์์ผ๋ก ์ฒ๋ฆฌํ ์ ์๋ค.
์ด๋ฌํ CBV๋ 'View'๋ฅผ ์ง์ ์์๋ฐ์ ์๋ ์์ง๋ง,
Django์์๋ ๋ทฐ์ ํน์ ๊ธฐ๋ฅ์ ๋ ๊ฐํธํ๊ฒ ๊ตฌํํ ์ ์๋๋ก ๋ค์ํ CBV๋ฅผ ์ ๊ณตํ๋ค.
๊ฐ ๋ทฐ๋ฅผ ๋น๊ตํด ๋ณด์.
View ํด๋์ค
๊ธฐ๋ณธ์ ์ธ HTTP ๋ฉ์๋(GET, POST, PUT, DELETE ๋ฑ)์ ๋ํ ์ฒ๋ฆฌ๋ฅผ ์ง์ ๊ตฌํํด์ผ ํจ
๋ชจ๋ ๋์์ ์ง์ ์ ์ดํ๊ณ ์ ํ ๋ ์ฌ์ฉ
๋งค์ฐ ์ ์ฐํ์ง๋ง ๊ธฐ๋ณธ ๋์๋ค์ ๋ชจ๋ ์ง์ ๊ตฌํํด์ผ ํ๋ฏ๋ก ์ฝ๋ ์์ด ๋ง์์ง ์ ์์
1. ํ์ํ HTTP๋ฉ์๋์ ํด๋นํ๋ ๋ฉ์๋๋ฅผ ์ค๋ฒ๋ผ์ด๋ฉ
2. ๋ทฐ์์ ํ์๋ก ํ๋ ๋ฐ์ดํฐ๋ฅผ ๊ฐ์ ธ์ ํ ํ๋ฆฟ์ผ๋ก ์ ๋ฌ
3. ์ํ๋ ํ ํ๋ฆฟ ํ์ผ์ ๋ ๋๋งํ์ฌ HTTP ์๋ต์ผ๋ก ๋ฐํ
from django.http import HttpResponse
from django.views.generic import View
class MyView(View):
def get(self, request):
# GET ์์ฒญ์ ๋ํ ์ฒ๋ฆฌ๋ฅผ ์ฌ๊ธฐ์ ์์ฑํฉ๋๋ค.
return HttpResponse("This is a GET request")
def post(self, request):
# POST ์์ฒญ์ ๋ํ ์ฒ๋ฆฌ๋ฅผ ์ฌ๊ธฐ์ ์์ฑํฉ๋๋ค.
return HttpResponse("This is a POST request")
ListView ํด๋์ค
๋ฐ์ดํฐ ๋ชฉ๋ก์ ๋ณด์ฌ์ฃผ๋ ๋ทฐ์ ์ฌ์ฉ
๋ฐ์ดํฐ๋ฒ ์ด์ค์์ ์ฟผ๋ฆฌ์ ์ ๊ฐ์ ธ์ ํ ํ๋ฆฟ์ผ๋ก ์ ๋ฌํ๋ ์์ ์ ๊ฐํธํ๊ฒ ์ฒ๋ฆฌ
๋ชฉ๋ก ํ์ด์ง๋ฅผ ๋ ๋๋งํ๋ ๋ฐ ํ์ํ ๊ธฐ๋ฅ๋ค์ด ์ด๋ฏธ ๊ตฌํ๋์ด ์์
DetailView ํด๋์ค
๋จ์ผ ๋ฐ์ดํฐ์ ์์ธ ์ ๋ณด๋ฅผ ๋ณด์ฌ์ฃผ๋ ๋ทฐ์ ์ฌ์ฉ
ํน์ ๋ฐ์ดํฐ๋ฅผ ๋ฐ์ดํฐ๋ฒ ์ด์ค์์ ๊ฐ์ ธ์ ํ ํ๋ฆฟ์ผ๋ก ์ ๋ฌํ๋ ์์ ์ ๊ฐํธํ๊ฒ ์ฒ๋ฆฌ
์์ธ ์ ๋ณด ํ์ด์ง๋ฅผ ๋ ๋๋งํ๋ ๋ฐ ํ์ํ ๊ธฐ๋ฅ๋ค์ด ์ด๋ฏธ ๊ตฌํ๋์ด ์์
CreateView, UpdateView, DeleteView ๋ฑ
๋ฐ์ดํฐ์ ์์ฑ, ์์ , ์ญ์ ๋ฅผ ์ฒ๋ฆฌํ๋ ๋ทฐ์ ์ฌ์ฉ
form์ ์ฌ์ฉํ์ฌ ๋ฐ์ดํฐ๋ฅผ ์ ๋ ฅํ๊ณ ๋ฐ์ดํฐ๋ฒ ์ด์ค์ ์ ์ฅํ๋ ์์ ์ ๊ฐํธํ๊ฒ ์ฒ๋ฆฌ
๊ฐ๊ฐ์ ๊ธฐ๋ฅ์ ํ์ํ ๋์๋ค์ด ์ด๋ฏธ ๊ตฌํ๋์ด ์์
๐ก FBV
Function Based View๋ฅผ ์ฌ์ฉํด ๋ทฐ๋ฅผ ๊ตฌํํ ์๋ ์๋ค.
FBV๋ ๋จ์ํ ํจ์๋ก ๋ทฐ๋ฅผ ๊ตฌํํ๋ ๋ฐฉ์์ด๋ค.
๊ฐ๋จํ๊ณ ์ง๊ด์ ์ธ ๋ฐฉ์์ผ๋ก ๋ทฐ๋ฅผ ๊ตฌํํ ์ ์๊ธฐ ๋๋ฌธ์ ์ฝ๊ฒ ์ ๊ทผํ ์ ์๋ค.
๋ทฐ๋ฅผ ํจ์๋ก ์ ์ํ๊ณ , ํด๋น ํจ์์์ ์์ฒญ (request)์ ์ฒ๋ฆฌํ๊ณ ์๋ต (response)์ ๋ฐํํ๋ ๋ฐฉ์์ด๋ค.
from django.http import HttpResponse
def my_view(request):
# ์์ฒญ์ ๋ํ ์ฒ๋ฆฌ๋ฅผ ์ฌ๊ธฐ์ ์์ฑํฉ๋๋ค.
return HttpResponse("This is a function-based view")
์ ์์ ์ฝ๋์์ ๋ณผ ์ ์๋ฏ
FBV๋ ์์ฒญ(request) ๊ฐ์ฒด๋ฅผ ์ธ์๋ก ๋ฐ๋ ๊ธฐ๋ฐ์ผ๋ก ๋์ํ๋ค.
Django์์ FBV๋ฅผ ์์ฑํ ๋, ๋ทฐ ํจ์๋ ๋ฐ๋์ ์ต์ํ ํ๋์ ์ธ์๋ก 'request' ๊ฐ์ฒด๋ฅผ ๋ฐ์์ผ ํ๋ค.
'request' ๊ฐ์ฒด๋ ์น ์์ฒญ์ ๋ํ ์ ๋ณด๋ฅผ ๋ด๊ณ ์์ผ๋ฉฐ,
ํด๋ผ์ด์ธํธ๋ก๋ถํฐ ์๋ฒ๋ก ์ ๋ฌ๋ ๋ฐ์ดํฐ, ์ธ์ ์ ๋ณด, ์ฌ์ฉ์ ์ ๋ณด ๋ฑ์ ํฌํจํ๋ค.
'WebFramework > [Django]' ์นดํ ๊ณ ๋ฆฌ์ ๋ค๋ฅธ ๊ธ
[Django] APIView CRUD ์์ ์ฝ๋ (0) | 2023.08.23 |
---|---|
[Django] Serializer์ List ์ ์ํ๊ธฐ (0) | 2023.08.23 |
[Django] extends์ include (0) | 2023.07.26 |
[Django] docker-Django ์ ์ํ๊ธฐ (0) | 2023.07.11 |