Study Anything ๐ง
์ํ ์์ฑ (4) - ์ํ์ DB์ ์ ์ฅํ๊ณ ๋ถ๋ฌ์ค๊ธฐ (POST, GET) ๋ณธ๋ฌธ
์ํ ์์ฑ (4) - ์ํ์ DB์ ์ ์ฅํ๊ณ ๋ถ๋ฌ์ค๊ธฐ (POST, GET)
์ 2022. 2. 4. 23:48์ง๋ ํฌ์คํธ๊น์ง ๊ตฌํํ๋ ์ํ ์์ฑ ๊ธฐ๋ฅ๋ค์ ์ฅ๊ณ ๊ธฐ๋ณธ ๊ธฐ๋ฅ์ ์ด์ฉํด์ ๊ตฌํํ๋ค.
๊ทธ๋ฌ๋ ์ฐ๋ฆฌ ํ๋ก์ ํธ๊ฐ ํ๋ก ํธ์ ๋ฐฑ์๋๊ฐ ๋๋ ์ ธ์๊ธฐ ๋๋ฌธ์
ํ๋ก ํธ์ ๋ฐฑ์๋๋ฅผ ์ฐ๊ฒฐํ๋ ๋ฐฉ๋ฒ์ ์ฌ๋ฌ ๋ฐฉ๋ฉด์ผ๋ก ๋ชจ์ํ๋ค.
๊ทธ๋ฌ๋ฉด์ ์ต์ข ์ ์ผ๋ก ์ฅ๊ณ ๋ ์คํธ ํ๋ ์์ํฌ (DRF: Django REST Framework) ๋ผ์ด๋ธ๋ฌ๋ฆฌ๋ฅผ ์ฌ์ฉํ์ฌ
ํ๋ก ํธ์ธ ๋ฆฌ์กํธ์ ๋ฐฑ์๋์ธ ์ฅ๊ณ ๋ฅผ ์ฐ๊ฒฐํ๊ณ ์ ํ์๋ค.
๊ทธ๋ฌ๋ ์ค ์ค๋ ๋๋์ด!! ํ๋ก ํธ์ธ ๋ฆฌ์กํธ ํ์ด์ง์์ ์์ฑํ ์ํ์ ๋ด์ฉ์
๋ฐฑ์๋์ธ ์ฅ๊ณ ๋ชจ๋ธ์ ์ ์ฅํ๊ณ ๋ถ๋ฌ์ค๋ ๊ฒ์ ์์ฑํด์ ๊ทธ ๊ณผ์ ์ ๊ฐ๋จํ๊ฒ ํฌ์คํ ํด๋ณด๋ ค๊ณ ํ๋ค.
(1) ์ฅ๊ณ : review/urls.py
urls.py ํ์ผ์์๋ ์ฅ๊ณ ์๋ฒ์ url ๋ค์ views.py ์ ํจ์๋ค๊ณผ ์ฐ๊ฒฐํ๋ ๋ด์ฉ์ ๋ด๊ณ ์๋ค.
path('', views.ReviewView.as_view()), # ์ํ ๋ชฉ๋ก
path('write/', views.ReviewView.as_view()), # ์ํ ์์ฑ
path('<int:reviewId>/', views.ReviewView.as_view()), # ์ํ ์ธ๋ถ๋ด์ฉ
๋ค์ ๋ด์ฉ์ ์ถ๊ฐํด์ views.py ์ ReviewView ํด๋์ค๋ฅผ ํธ์ถํ๋ค.
(2) ์ฅ๊ณ : review/views.py
views.py ์ ReviewView ํด๋์ค ๋ด์ฉ์ด๋ค.
ํด๋น ๊ตฌ์กฐ๋ ์ฅ๊ณ ์คํฐ๋ ์นดํ ๊ณ ๋ฆฌ์ ์์ฑํ๋ ๊ธ์ ์์ธํ ์ค๋ช ํด๋์๋ค.
class ReviewView(APIView):
...
def post(self, request):
data = request.data
r : Review = Review (
bookId = data.get('bid'),
userId = User.objects.get(id=data.get('uid')),
reviewTitle = data.get('rtitle'),
reviewDate = date.today(),
reviewRate = 0, # ์ถํ์ ํ์ ๋ฐ์์์ ์ ์ฅ
reviewTxt = data.get('text')
)
r.save()
return Response({'message':'์ํ ๋ฑ๋ก์ด ์๋ฃ๋์์ต๋๋ค.'}, status=status.HTTP_200_OK)
def get(self, request, **kwargs):
if kwargs.get('reviewId') is None: # ํน์ ๋ฆฌ๋ทฐ ์ง์ ๋์ง ์์์ ๋ : ์ ์ฒด ๋ชฉ๋ก ๋ฐํ
review_qr_serializer = ReviewSerializer(Review.objects.all(), many=True)
return Response(review_qr_serializer.data, status=status.HTTP_200_OK)
else: # ํน์ ๋ฆฌ๋ทฐ ์ง์ ๋์์ ๋ : ํด๋น ๋ฆฌ๋ทฐ ๋ฐํ
reviewId = kwargs.get('reviewId')
review_serializer = ReviewSerializer(Review.objects.get(reviewId=reviewId))
return Response(review_serializer.data, status=status.HTTP_200_OK)
...
post ํจ์์์๋ review ์ฑ์ ๋ชจ๋ธ์ธ Review ์ ๋ค์ด๊ฐ ๋ฐ์ดํฐ๋ฅผ ์ง์ ํด์ ๋ชจ๋ธ์ ์ ์ฅํ๊ณ Response() ๋ก ๊ฒฐ๊ณผ๋ฅผ ๋ฐํํ๋ค.
get ํจ์์์๋ ๋ฏธ๋ฆฌ ์์ฑํ๋ Serializer ๋ฅผ ํตํด ๋ชจ๋ธ์ ๋ฐ์ดํฐ๋ฅผ ๋ถ๋ฌ์ค๊ณ ์ ์ฒด ๋ชฉ๋ก๊ณผ ์์ธ ๋ด์ฉ์ ๋ณด์ฌ์ค๋ค.
์ํ์ ์์ฑํ๋ ์นํ์ด์ง์ ๋ชจ์ต์ ๋ค์๊ณผ ๊ฐ๋ค.
์ฑ ์ด๋ฆ๊ณผ ์ ์๋ ์ธ๋ถ API๋ฅผ ์ฌ์ฉํด์ ์ป์ด์จ ๋ฐ์ดํฐ๋ก ๋ฏธ๋ฆฌ ์ฑ์๋๊ณ ์ํ ์ ๋ชฉ๊ณผ ๋ด์ฉ์ ์์ฑํ๋ค.
ํด๋นํ๋ ์ฑ ์ ISBN์ bid ๋ก, ์์ฑํ๋ ์ฌ์ฉ์์ id๋ฅผ uid๋ก, ์ํ์ ์ ๋ชฉ์ rtitle๋ก, ์ํ ๋ด์ฉ์ text ๋ก ๋ฐ์์ ์ฅ๊ณ ๋ก ๋๊ฒจ์ฃผ๊ฒ ๋๋ค.
(4) ๊ฒฐ๊ณผํ๋ฉด
์์ ๊ณผ์ ์ ๊ฑฐ์น๊ณ ๋๋ฉด ์ํ์ ์์ฑํ๊ณ ๋ฑ๋ก ๋ฒํผ์ ๋๋ ์ ๋,
๋ค์ ๋ฉ์ธ์ง๊ฐ ๋์์ง๊ณ ์ฅ๊ณ ๋ชจ๋ธ์ ์ ์์ ์ผ๋ก ๋ฐ์ดํฐ๊ฐ ์ ์ฅ๋๋ค.
๋ชจ๋ธ์ ์ ์ฅ๋ ๋ฐ์ดํฐ๋ ์ฅ๊ณ ์๋ฒ์์ ํ์ธํ๋ค.
๊ทธ๋ฆฌ๊ณ ์ํ์ ์ ์ฒด ๋ชฉ๋ก ํ๋ฉด๊ณผ ์์ธํ์ด์ง๋ ๋ค์์ฒ๋ผ ๋ํ๋๋ค.
(์ฌ์ง์ฒจ๋ถ์์ )
๊ธฐ๋ฅ์ ๊ตฌํํ๋ ๋ฐ๋ ์ฑ๊ณตํ์ง๋ง ํ ๊ฐ์ง ์์ฌ์ด ์ ์ Serializer๋ฅผ ์ ๋๋ก ํ์ฉํ์ง ๋ชปํ ๊ฒ์ด๋ค.
์ด์ ์ ํฌ์คํ ํ๋ฉด์ ๊ณต๋ถํ๋ ๋ด์ฉ์ ํ์ฉํด์ REST API๋ฅผ ์ข ๋ ์ ํฉํ๊ฒ ํ์ฉํ๋ ๋ฐฉ๋ฒ๋ ๊ณ์ ๊ณ ๋ฏผํด๋ณด๊ฒ ๋ค.
'ํ๋ก์ ํธ > [Web] ์ํ ์์ฑ ์ฌ์ดํธ' ์นดํ ๊ณ ๋ฆฌ์ ๋ค๋ฅธ ๊ธ
์ํ ์์ฑ ๊ธฐ๋ฅ์ ๋ง์น๋ฉฐ (0) | 2022.02.17 |
---|---|
์ํ ์์ฑ (5) - ์ํ ์์ ํ๊ณ ์ญ์ ํ๊ธฐ (PUT, DELETE) (0) | 2022.02.13 |
ํ๋ก ํธ์ ์ฐ๊ฒฐํ๊ธฐ (2) - Axios ํ์ฉ (0) | 2022.01.25 |
ํ๋ก ํธ์ ์ฐ๊ฒฐํ๊ธฐ (1) - ์ฅ๊ณ /๋ฆฌ์กํธ ์ฐ๋ (0) | 2022.01.18 |
์ํ ์์ฑ (3) - ์ํ ์์ธ๋ณด๊ธฐ (0) | 2022.01.14 |