Study Anything ๐Ÿง

[Django] DRF : ์žฅ๊ณ  ๋ชจ๋ธ์„ json ๊ฐ์ฒด๋กœ ์ถ”์ถœํ•˜๊ธฐ ๋ณธ๋ฌธ

์Šคํ„ฐ๋””/Web

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

์†” 2022. 1. 19. 22:54

์žฅ๊ณ ๋กœ ํ”„๋กœ์ ํŠธ๋ฅผ ์ง„ํ–‰ํ•˜๋‹ค ๋ณด๋ฉด ํ”„๋ก ํŠธ์™€ ์—ฐ๋™ํ•˜๊ฒŒ ๋  ๋•Œ๊ฐ€ ์žˆ๋‹ค.

์ด ๋ฐฉ๋ฒ•๋“ค์€ ์ด์ „ ํฌ์ŠคํŠธ(link)์—์„œ ์ž์„ธํžˆ ์„ค๋ช…ํ–ˆ๊ณ ,

์ด ํฌ์ŠคํŠธ์—์„œ๋Š” ๊ทธ ์ค‘ ์žฅ๊ณ ์—์„œ ๋งŒ๋“  ๋ชจ๋ธ์„ json ๊ฐ์ฒด๋กœ ์ถ”์ถœํ•ด์„œ ์ ‘๊ทผํ•˜๋Š” ๋ฐฉ๋ฒ•์„ ์•Œ์•„๋ณด๋„๋ก ํ•˜๊ฒ ๋‹ค.

 

Django REST Framework(DRF)๋Š” ์›น์—์„œ REST API ์„œ๋ฒ„๋ฅผ ๊ตฌ์ถ•ํ•  ์ˆ˜ ์žˆ๋„๋ก ๋„์™€์ฃผ๋Š” ์˜คํ”ˆ์†Œ์Šค ๋ผ์ด๋ธŒ๋Ÿฌ๋ฆฌ์ด๋‹ค.

๋‹ค์–‘ํ•œ ๊ธฐ๊ธฐ์™€ ํ”Œ๋žซํผ์ด ๋งŒ๋“ค์–ด์ง€๋ฉด์„œ ๋ฐ์ดํ„ฐ๋ฅผ ๋‹ค๋ฃฐ ๋•Œ ๊ธฐ์กด์˜ ๋ฐฉ๋ฒ•์— ํ•œ๊ณ„๊ฐ€ ์ƒ๊ฒผ๊ณ ,

์ด๋ฅผ ํ•ด๊ฒฐํ•˜๊ธฐ ์œ„ํ•ด ๋“ฑ์žฅํ•œ ๋„๊ตฌ๊ฐ€ REST API์ด๋‹ค.

 

 

(1) ์ค€๋น„ํ•˜๊ธฐ

๋จผ์ €, DRF ๋ฅผ ์‚ฌ์šฉํ•˜๊ธฐ ์œ„ํ•ด ํ„ฐ๋ฏธ๋„์—์„œ ๋‹ค์Œ ๋ช…๋ น์–ด๋ฅผ ์ž…๋ ฅํ•ด DRF๋ฅผ ์„ค์น˜ํ•œ๋‹ค.

pip install djangorestframework

๋‹ค์Œ์œผ๋กœ ๋ฆฌ์•กํŠธ์—์„œ ์žฅ๊ณ ๊ฐ€ ๋งŒ๋“œ๋Š” api์— ์ ‘๊ทผํ•  ์ˆ˜ ์žˆ๋„๋ก CORS-HEADERS ๋ฅผ ์„ค์น˜ํ•œ๋‹ค.

๋ฆฌ์•กํŠธ ๊ฐœ๋ฐœ์„œ๋ฒ„ ์ฃผ์†Œ๊ฐ€ 'http://localhost:3000' ์ด๋ฏ€๋กœ

ํƒ€ ์„œ๋ฒ„์—์„œ ์žฅ๊ณ  ์„œ๋ฒ„๋กœ ์ ‘๊ทผํ•  ์ˆ˜ ์žˆ๋„๋ก ์ด๋ฅผ ๊ด€๋ฆฌํ•˜๋Š” ๋ผ์ด๋ธŒ๋Ÿฌ๋ฆฌ๋ฅผ ์„ค์น˜ํ•˜๋Š” ๊ฒƒ์ด๋‹ค.

pip install corsheaders

 

 

 

(2) settings.py ์ˆ˜์ •

...
INSTALLED_APPS = [
    ...

    # DRF
    'rest_framework',
    'corsheaders',
]
...

์„ค์น˜ํ•œ ๋ผ์ด๋ธŒ๋Ÿฌ๋ฆฌ๋ฅผ ์‚ฌ์šฉํ•˜๊ธฐ ์œ„ํ•ด settings.py ํŒŒ์ผ์„ ์ˆ˜์ •ํ•ด์ฃผ์—ˆ๋‹ค.

 

์ด์–ด์„œ CORS-HEADERS ๊ฐ€ ๋ฆฌ์•กํŠธ ๊ฐœ๋ฐœ์„œ๋ฒ„๋ฅผ ์ฐจ๋‹จํ•˜์ง€ ์•Š๋„๋ก ๊ด€๋ จ ๋ถ€๋ถ„์„ ์ž‘์„ฑํ•œ๋‹ค.

...
# corsheaders
CORS_ORIGIN_ALLOW_ALL = False

CORS_ALLOW_CREDENTIALS = True

CORS_ORIGIN_WHITELIST = [
    'http://localhost:3000',
]
...

 

 

 

(3) serializer ์ƒ์„ฑ

์žฅ๊ณ  ๋ชจ๋ธ์„ json ๊ฐ์ฒด๋กœ ๋งŒ๋“ค๊ธฐ ์œ„ํ•ด ๋ชจ๋ธ์˜ ๋ฐ์ดํ„ฐ๋ฅผ serializer ๋กœ ๋ฐ›๋Š” ๊ณผ์ •์ด ํ•„์š”ํ•˜๋‹ค.

 

app/serializer.py ํŒŒ์ผ ์ƒ์„ฑ

from rest_framework import serializers
from .models import *


class ReviewSerializer(serializers.ModelSerializer):
    class Meta:
        model = Review
        fields = '__all__'

class UserSerializer(serializers.ModelSerializer):
    class Meta:
        model = User
        fields = '__all__'

 

 

 

(4) app/views.py ํŒŒ์ผ ์ˆ˜์ •

api url ์„ ์š”์ฒญํ–ˆ์„ ๋•Œ ์ˆ˜ํ–‰ํ•  ๋‚ด์šฉ์„ views.py ํŒŒ์ผ์— ์ž‘์„ฑํ•œ๋‹ค.

from .serializers import *
from rest_framework import viewsets

...

class ReviewView(viewsets.ModelViewSet):
    serializer_class = ReviewSerializer
    queryset = Review.objects.all()

class UserView(viewsets.ModelViewSet):
    serializer_class = UserSerializer
    queryset = User.objects.all()
    
...

 

 

 

(5) app/urls.py ํŒŒ์ผ ์ˆ˜์ •

from django.urls import path, include
from . import views
from rest_framework import routers

# DB api ๋ณด๊ธฐ
router = routers.DefaultRouter()
router.register('review', views.ReviewView, 'Review')
router.register('user', views.UserView, 'User')

urlpatterns = [
    ...
    path('api/', include(router.urls))
]

 

 

 

์œ„ ๊ณผ์ •์„ ๊ฑฐ์น˜๋ฉด ๋‹ค์Œ ํ™”๋ฉด์ฒ˜๋Ÿผ ์žฅ๊ณ  ๋ชจ๋ธ ๋ฐ์ดํ„ฐ๋ฅผ json ํ˜•์‹์œผ๋กœ ์›นํŽ˜์ด์ง€์—์„œ ๋ณผ ์ˆ˜ ์žˆ๋‹ค.

 

 

 

 

 

728x90
Comments