Study Anything ๐ง
[Django] DRF : REST API๋ฅผ ํตํด ์ฅ๊ณ ์ ๋ฆฌ์กํธ ์ฐ๊ฒฐํ๊ธฐ ๋ณธ๋ฌธ
[Django] DRF : REST API๋ฅผ ํตํด ์ฅ๊ณ ์ ๋ฆฌ์กํธ ์ฐ๊ฒฐํ๊ธฐ
์ 2022. 1. 29. 23:34์ฅ๊ณ ์ ๋ฆฌ์กํธ๋ฅผ ์ฐ๊ฒฐํ๋ ์ฌ๋ฌ ๋ฐฉ๋ฒ ์ค DRF(Django REST Framework)๋ฅผ ํ์ฉํ๋ ๋ฐฉ๋ฒ์ด ์๋ค.
REST API ๋ฅผ ํตํ๋ฉด ๋ฐ์ดํฐ์ CRUD(Create, Read, Update, Delete)๋ฅผ ์ฝ๊ฒ ์ฒ๋ฆฌํ ์ ์๋๋ฐ,
์ด๋ฒ ํฌ์คํธ์์๋ ํนํ ๋ฐ์ดํฐ์ Create, ๋ฆฌ์กํธ์์ ์์ฑํ ๊ธ์ ์ฅ๊ณ ๋ชจ๋ธ์ ๋ฑ๋กํ๋ ๊ณผ์ ์ ๋ค๋ค๋ณด๋ ค๊ณ ํ๋ค.
(๋ฆฌ์กํธ์ ์ฅ๊ณ ์ ์ค์น๋ ์๋ตํ๋๋ก ํ๊ฒ ๋ค.)
์ฅ๊ณ REST API ๋ฅผ ๊ตฌ์ถํ๋ ๊ณผ์ ์ ์ด์ ํฌ์คํธ์์ ๋ค๋ฃจ์๋ค.
(1) ์ฅ๊ณ : POST/GET/PUT/DELETE ํจ์ ์์ฑ
๋ฐ์ดํฐ์ Create๋ POST, Read๋ GET, Update๋ PUT, Delete๋ DELETE ๋ฉ์๋๋ฅผ ํตํด ์ด๋ค์ง๋ค.
์ฅ๊ณ ์ REST API ์์ CRUD๋ฅผ ์ฝ๊ฒ ์ฒ๋ฆฌํ ์ ์๋ ์ด์ ๋ ์ฅ๊ณ ์ ๋ด์ฅ ๋ผ์ด๋ธ๋ฌ๋ฆฌ ๋๋ถ์ด๋ค.
๊ทธ ์ค 'ํด๋์ค ๋ฒ ์ด์ค ๋ทฐ'์ธ APIView๋ฅผ ํ์ฉํด(์์๋ฐ์) ์ด ๊ธฐ๋ฅ๋ค์ ๊ตฌํํ ์์ ์ด๋ค.
CRUD ๋ชจ๋ ๊ธฐ๋ฅ์ ๊ตฌํํด์ผ ํ๊ธฐ ๋๋ฌธ์ ํด๋์ค ๋ด์ฅ ํจ์๋ฅผ ์ฝ๊ฒ ์ฌ์ฉํ๊ธฐ ์ํด์
ํด๋์ค ๊ธฐ๋ฐ์ธ APIView๋ฅผ ์ด์ฉํ๊ธฐ๋ก ํ์๋ค.
...
from .serializers import *
from rest_framework import status
from rest_framework.views import APIView
from rest_framework.response import Response
...
class ReviewView(APIView):
def post(self, request):
review_ser = ReviewSerializer(data=request.data)
if review_ser.is_valid():
review_ser.save()
return Response(review_ser.data, status=status.HTTP_201_CREATED)
else:
return Response(review_ser.errors, status=status.HTTP_400_BAD_REQUEST)
def get(self, request):
return Response('message', status=200)
def put(self, request):
return Response('message', status=200)
def delete(self, request):
return Response('message', status=200)
๋ค ํจ์ ์ค post ํจ์๋ฅผ ๋จผ์ ์์ฑํด๋ณด์๋ค.
์์ REST API ์์ฑ ๋ ์ง๋ ฌํ๋ฅผ ์ํ Serializer๋ฅผ ์์ฑํ๊ธฐ ๋๋ฌธ์
๋ฐ์์จ ๋ฐ์ดํฐ์ ์ ํจ์ฑ์ ๊ฐํธํ๊ฒ ๊ฒ์ฌํ๊ณ ๋ชจ๋ธ์ ์ ์ฅํ ์ ์๋ค.
๊ทธ ํ์ DRF์ Response ๋ผ์ด๋ธ๋ฌ๋ฆฌ๋ฅผ ํ์ฉํด ํ์ฌ ์ํ๋ฅผ ๋ฐํํ๋ค.
(2) ๋ฆฌ์กํธ
ํ๋ก ํธ์๋์ธ ๋ฆฌ์กํธ์ ์ด๋ฏธ ๊ตฌํ๋์ด ์๋ ๊ธ์ฐ๊ธฐ ํ๋ฉด์ด๋ค.
๊ธ์ฐ๊ธฐ ๊ธฐ๋ฅ์ด ์ฌ์ฉ์ ์ ๋ณด๋ฅผ ํ์๋ก ํ๊ธฐ ๋๋ฌธ์
ํ๋ก์ ํธ๋ ๋ด์ฉ ์ ๋ก๊ทธ์ธ์ด ์๋ฃ๋ ํ ๊ธ์ฐ๊ธฐ ํ์ด์ง๋ก ์ง์ ํ ์ ์๋ค.
๋ฐ๋ผ์ ํ์๊ฐ์ ๊ณผ ๋ก๊ทธ์ธ ๊ธฐ๋ฅ์ ๊ตฌํํ ๋ค๋ฅธ ํ์์ด ์์ฑํ User ๋ชจ๋ธ์ ์ฌ์ฉํด์ผ ํ๋๋ฐ,
์ฅ๊ณ ํ๋ก์ ํธ์์ ๋ค๋ฅธ ์ฑ์ ๋ชจ๋ธ์ ์ฌ์ฉํ๋ ๋ฐฉ๋ฒ์ ๋ค๋ฅธ ํฌ์คํธ์์ ๋ค๋ค๋ณผ ์์ ์ด๋ค.
๋ฆฌ์กํธ์์ ํด์ผ ํ ๊ฒ์ API๋ก ๋ง๋ค์ด์ง ์ฅ๊ณ ๋ชจ๋ธ์ ์ฝ๋์ ์ ์ฉํ๋ ๊ฒ์ด๋ค.
๊ธ์ฐ๊ธฐ์ POST ๊ธฐ๋ฅ์ ์ฌ์ฉํ๊ธฐ ์ํด ํด๋น ํ์ผ์ ์์ ํ๋ค.
ํ์ผ > (์๋ต)/Write.js
...
axios.post("http://127.0.0.1:8000/review/write/", {
...
}).then(function(response) {
...
console.log(response)
alert('๋ฑ๋ก์ด ์๋ฃ๋์์ต๋๋ค.')
}).catch(function(error) {
console.log(error)
alert('๋ฌธ์ ๊ฐ ๋ฐ์ํ์ต๋๋ค.')
}).finally(() => {
history.push('/review')
})
...
๊ธฐ๋ณธ์ ์ธ ๋ผ๋ ์ค์ ์ ์ด๋ ๊ฒ ์๋ฃํ์ง๋ง ํ๋ก์ ํธ ๋ด์ฉ ์
๋ฆฌ์กํธ์์์ ๋ฐ์ดํฐ์ ์ฅ๊ณ ๋ชจ๋ธ์์ ์๊ตฌํ๋ ๋ฐ์ดํฐ์ ์ฐจ์ด๊ฐ ์์ด์ ์ฝ๋๋ฅผ ์์ ํ๊ณ ์ถ๊ฐํ๋ฉด์
์ฅ๊ณ ๋ชจ๋ธ์ ์ ๋ ฅํ ๋ฐ์ดํฐ๋ฅผ ์ฌ๋ฐ๋ก ๋ฃ๋ ๊ฒ๊น์ง ์์ฑํ๋ ค๋ฉด ์์ง ๋จ๊ณ๊ฐ ์กฐ๊ธ ๋ ๋จ์์๋ค.
๋จ์ ๋จ๊ณ๋ค์ ์์ผ๋ก์ ํฌ์คํธ์์ ์ถ๊ฐ์ ์ผ๋ก ๋ค๋ฃจ๋๋ก ํ๊ฒ ๋ค.
'์คํฐ๋ > Web' ์นดํ ๊ณ ๋ฆฌ์ ๋ค๋ฅธ ๊ธ
[Django] ๋ชจ๋ธ ์์ ํ๊ณ ์ญ์ ํ๊ธฐ (0) | 2022.02.08 |
---|---|
[Django] DRF : Serializer ๊ธฐ๋ณธ ์ฌ์ฉ๋ฒ, ์ ํจ์ฑ ๊ฒ์ฆ (0) | 2022.01.30 |
[Django] DRF : ์ฅ๊ณ ๋ชจ๋ธ์ json ๊ฐ์ฒด๋ก ์ถ์ถํ๊ธฐ (0) | 2022.01.19 |
[Django] ๋ชจ๋ธ ๋ง๋ค๊ณ ํ์ด์ง์์ ์กฐํํ๊ธฐ (0) | 2022.01.13 |
[Django] ๊ธฐ๋ณธ ๊ฐ๋ (์ฑ, ๋ชจ๋ธ, ๊ด๋ฆฌ์) (0) | 2022.01.06 |