DRF์๋ view๋ฅผ ์์ฑํ๋ ๋ฐฉ๋ฒ์ ์ฌ๋ ค๊ฐ์ง๊ฐ ์๋ค. ์ฌ๋ฌ๊ฐ์ง ๋ฐฉ๋ฒ์ ๋ํด์ ์์๋ณด์.
APIView๋ฅผ ์์ํด์ ์ง๋ ํํ์ ๋ง์ด ๋น์ทํ๋ค๊ณ ์๊ฐ๋๋ค.
์๋ฅผ ๋ค์ด class productReview(request):
๋ง๋ค์ด์ get
post
delete
patch
rest method ๋ฅผ ์ด์ฉํด์ ํด๋์ค์์ ํจ์๋ฅผ ์ ์ํด์ ๊ตฌํํ ๋ฐฉ์์ด๋ผ๊ณ ์๊ฐํ๋ฉด๋๋ค. ๊ตฌ์ฑ์ Pure Django๋ฅผ ํตํด ๊ตฌ์ฑํ๋ view์์ serializer๋ฅผ ์ถ๊ฐํด์ ์ฒ๋ฆฌํด์ค๊ฒ๋ฟ ๋์ผํ๋ค.
ํด๋์ค ๊ธฐ๋ฐ ๋ทฐ์ด๋ ํจ์ ๊ธฐ๋ฐ ๋ทฐ์ด๋ ๋ทฐ๊ฐ ์คํํ๋ ๊ฒ์ ํจ์์ด๋ค. ์ฐ๋ฆฌ๊ฐ View.as_view() ํด๋์ค ๋ฉ์๋๋ฅผ ์ฌ์ฉํ์ฌ URL ์ ์์ ๋ทฐ๋ฅผ ์ถ๊ฐํ๋ฉด ์ด๋ view๋ผ๋ ํจ์๋ฅผ ๋ฆฌํดํ๋ค. as_veiw() ๋ฉ์๋๊ฐ ์ด๋ป๊ฒ ์ง์ฌ ์๋์ง๋ณด๋ฉด
CBV ์ค ํ๋์ด๊ธฐ ๋๋ฌธ์ ํ๋์ URL ์ ๋ํด์๋ง ์ฒ๋ฆฌ๋ฅผ ํ ์ ์์ต๋๋ค.
method๋ค์ ๋ฌถ์ด์ ์ฐ๋ ๋ฒ์ ๋ชฐ๋ผ์ ์ฒ์์๋ ๋ฐ๋ก ๊ตฌํํ๋ค๋ณด๋ ๊ทธ๋ฅ pure django์์ ํ๋๊ฑฐ๋ ๋ฌด์์ด ๋ค๋ฅธ๊ฐ๋ผ๋ ์๊ฐ์ด ๋ค์์ง๋ง ์๊ณ ๋ณด๋ ๊ธฐ๋ฅ์ด ํจ์๋จ์๋ก ๊ธฐ๋ฅ์ด ๋น์ทํ ๊ฒ๋ค๋ผ๋ฆฌ ๋ฌถ์ด์ ์ฌ์ฉํ๊ณ , cbv ์ class๊ธฐ๋ฐ์ด๋, function๊ธฐ๋ฐ์ด๋ ์ฐจ์ด ์ผ๋ฟ ๊ตฌ์กฐ๋ ๋น์ทํ๋ค.
๐ก ์ด๋ ๊ฒ ํํ์ด์ง์์ method๋ง ๋ค๋ฅด๋ค๋ฉด ํ๋ฒ์ ์ฒ๋ฆฌํด์ค๋ค. ์๋ ๋ฐฉ์์ ๋นํจ์จ์ ์ธ ๋ฐฉ์์ด๋ค.
userDetail
๋ก ๋ฌถ์์ ์๋ method๋ฅผ ๊ฐ์ด ์ฒ๋ฆฌํด์ค๋ค.
view.pyurls.py๊ฒฐ๊ณผํ๋ฉด
APIView๋ ๊ฐ request method ๋ง๋ค ์ง์ serializer ์ฒ๋ฆฌ๋ฅผ ํด์ฃผ์ด์ผ๋๋๋ฐ, ์ด๋ฌํ ๋ถ๋ถ๋ค์ด ๋ง์ด ์ฌ์ฉ๋๋ฉด ์ฌ๋ฌ serializer์ ๋ํ ์ค์กฑ์ด ๋ฐ์ํฉ๋๋ค. ๋ฐ๋ผ์ rest_framework.mixins
์์๋ ์ด๋ฌํ ๊ธฐ๋ฅ๋ค์ด ๋ฏธ๋ฆฌ ๊ตฌํ์ด ๋์ด ์์ต๋๋ค.
queryset
๊ณผ serializer_class
๋ฅผ ์ง์ ํด์ฃผ๊ธฐ๋ง ํ๋ฉด ๋๋จธ์ง๋ ์์๋ฐ์ Mixin
๊ณผ ์ฐ๊ฒฐํด์ฃผ๊ธฐ๋ง ํ๋ฉด ๋ฉ๋๋ค.
Mixin ์ ์์ํจ์ผ๋ก์ ๋ฐ๋ณต๋๋ ๋ด์ฉ์ ๋ง์ด ์ค์ผ ์ ์์์ต๋๋ค. ํ์ง๋ง ์ฌ๋ฌ ๊ฐ๋ฅผ ์์ํด์ผ ํ๋ค๋ณด๋ ๊ฐ๋ ์ฑ์ด ๋จ์ด์ง๋๋ค. ๋คํํ๋ rest_framework ์์๋ ์ ๋ค์ ์์ํ ์๋ก์ด ํด๋์ค๋ฅผ ์ ์ํด๋จ์ต๋๋ค.
view.py
generics.py
์์ง queryset ๊ณผ serializer_class๊ฐ ๊ณตํต์ ์ธ๋ฐ๋ ๋ถ๊ตฌํ๊ณ ๋ฐ๋ก ๊ธฐ์ฌํด์ฃผ์ด์ผํฉ๋๋ค. ์ด๋ฅผ ํ ๋ฒ์ ์ฒ๋ฆฌํด์ฃผ๋๊ฒ ๋ฐ๋ก ViewSet
์
๋๋ค
ViewSet
์ CBV ๊ฐ ์๋ ํฌํผํด๋์ค๋ก ๋ ๊ฐ์ง ์ข
๋ฅ๊ฐ ์์ต๋๋ค.
view.pyurls.py
- ์ผ๋ฐ์ ์ธ CBV ์ ๋ค๋ฅด๊ฒ as_view๋ฅผ ํตํด์ ๋ทฐ๋ฅผ ์ฐ๊ฒฐํ์ง ์๊ณ , router๋ฅผ ์ฌ์ฉํด์ ์ฐ๊ฒฐํ์์ต๋๋ค.
- ViewSet์ ํ๋์ ๋ทฐ๊ฐ ์๋ set, ์ฌ๋ฌ ๊ฐ์ ๋ทฐ๋ฅผ ๋ง๋ค ์ ์๋ ํ์ฅ๋ CBV์ ๋๋ค.