Study Anything ๐Ÿง

[Django] DRF : REST API๋ฅผ ํ†ตํ•ด ์žฅ๊ณ ์™€ ๋ฆฌ์•กํŠธ ์—ฐ๊ฒฐํ•˜๊ธฐ ๋ณธ๋ฌธ

์Šคํ„ฐ๋””/Web

[Django] DRF : REST API๋ฅผ ํ†ตํ•ด ์žฅ๊ณ ์™€ ๋ฆฌ์•กํŠธ ์—ฐ๊ฒฐํ•˜๊ธฐ

์†” 2022. 1. 29. 23:34

์žฅ๊ณ ์™€ ๋ฆฌ์•กํŠธ๋ฅผ ์—ฐ๊ฒฐํ•˜๋Š” ์—ฌ๋Ÿฌ ๋ฐฉ๋ฒ• ์ค‘ DRF(Django REST Framework)๋ฅผ ํ™œ์šฉํ•˜๋Š” ๋ฐฉ๋ฒ•์ด ์žˆ๋‹ค.

REST API ๋ฅผ ํ†ตํ•˜๋ฉด ๋ฐ์ดํ„ฐ์˜ CRUD(Create, Read, Update, Delete)๋ฅผ ์‰ฝ๊ฒŒ ์ฒ˜๋ฆฌํ•  ์ˆ˜ ์žˆ๋Š”๋ฐ,

์ด๋ฒˆ ํฌ์ŠคํŠธ์—์„œ๋Š” ํŠนํžˆ ๋ฐ์ดํ„ฐ์˜ Create, ๋ฆฌ์•กํŠธ์—์„œ ์ž‘์„ฑํ•œ ๊ธ€์„ ์žฅ๊ณ  ๋ชจ๋ธ์— ๋“ฑ๋กํ•˜๋Š” ๊ณผ์ •์„ ๋‹ค๋ค„๋ณด๋ ค๊ณ  ํ•œ๋‹ค.

(๋ฆฌ์•กํŠธ์™€ ์žฅ๊ณ ์˜ ์„ค์น˜๋Š” ์ƒ๋žตํ•˜๋„๋ก ํ•˜๊ฒ ๋‹ค.)

 

์žฅ๊ณ  REST API ๋ฅผ ๊ตฌ์ถ•ํ•˜๋Š” ๊ณผ์ •์€ ์ด์ „ ํฌ์ŠคํŠธ์—์„œ ๋‹ค๋ฃจ์—ˆ๋‹ค.

 

์žฅ๊ณ  ๋ชจ๋ธ์„ json ๊ฐ์ฒด๋กœ ์ถ”์ถœํ•˜๊ธฐ (DRF)

์žฅ๊ณ ๋กœ ํ”„๋กœ์ ํŠธ๋ฅผ ์ง„ํ–‰ํ•˜๋‹ค ๋ณด๋ฉด ํ”„๋ก ํŠธ์™€ ์—ฐ๋™ํ•˜๊ฒŒ ๋  ๋•Œ๊ฐ€ ์žˆ๋‹ค. ์ด ๋ฐฉ๋ฒ•๋“ค์€ ์ด์ „ ํฌ์ŠคํŠธ(link)์—์„œ ์ž์„ธํžˆ ์„ค๋ช…ํ–ˆ๊ณ , ์ด ํฌ์ŠคํŠธ์—์„œ๋Š” ๊ทธ ์ค‘ ์žฅ๊ณ ์—์„œ ๋งŒ๋“  ๋ชจ๋ธ์„ json ๊ฐ์ฒด๋กœ ์ถ”์ถœํ•ด์„œ ์ ‘๊ทผ

edorrr.tistory.com

 

 

 

(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')
            })
...

 

 

 

๊ธฐ๋ณธ์ ์ธ ๋ผˆ๋Œ€ ์„ค์ •์€ ์ด๋ ‡๊ฒŒ ์™„๋ฃŒํ–ˆ์ง€๋งŒ ํ”„๋กœ์ ํŠธ ๋‚ด์šฉ ์ƒ

๋ฆฌ์•กํŠธ์—์„œ์˜ ๋ฐ์ดํ„ฐ์™€ ์žฅ๊ณ  ๋ชจ๋ธ์—์„œ ์š”๊ตฌํ•˜๋Š” ๋ฐ์ดํ„ฐ์— ์ฐจ์ด๊ฐ€ ์žˆ์–ด์„œ ์ฝ”๋“œ๋ฅผ ์ˆ˜์ •ํ•˜๊ณ  ์ถ”๊ฐ€ํ•˜๋ฉด์„œ

์žฅ๊ณ  ๋ชจ๋ธ์— ์ž…๋ ฅํ•œ ๋ฐ์ดํ„ฐ๋ฅผ ์˜ฌ๋ฐ”๋กœ ๋„ฃ๋Š” ๊ฒƒ๊นŒ์ง€ ์™„์„ฑํ•˜๋ ค๋ฉด ์•„์ง ๋‹จ๊ณ„๊ฐ€ ์กฐ๊ธˆ ๋” ๋‚จ์•„์žˆ๋‹ค.

๋‚จ์€ ๋‹จ๊ณ„๋“ค์€ ์•ž์œผ๋กœ์˜ ํฌ์ŠคํŠธ์—์„œ ์ถ”๊ฐ€์ ์œผ๋กœ ๋‹ค๋ฃจ๋„๋ก ํ•˜๊ฒ ๋‹ค.

 

 

 

 

728x90
Comments