Study Anything ๐ง
[Django] DRF : ์ฅ๊ณ ๋ชจ๋ธ์ json ๊ฐ์ฒด๋ก ์ถ์ถํ๊ธฐ ๋ณธ๋ฌธ
์ฅ๊ณ ๋ก ํ๋ก์ ํธ๋ฅผ ์งํํ๋ค ๋ณด๋ฉด ํ๋ก ํธ์ ์ฐ๋ํ๊ฒ ๋ ๋๊ฐ ์๋ค.
์ด ๋ฐฉ๋ฒ๋ค์ ์ด์ ํฌ์คํธ(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 ํ์์ผ๋ก ์นํ์ด์ง์์ ๋ณผ ์ ์๋ค.
'์คํฐ๋ > Web' ์นดํ ๊ณ ๋ฆฌ์ ๋ค๋ฅธ ๊ธ
[Django] DRF : Serializer ๊ธฐ๋ณธ ์ฌ์ฉ๋ฒ, ์ ํจ์ฑ ๊ฒ์ฆ (0) | 2022.01.30 |
---|---|
[Django] DRF : REST API๋ฅผ ํตํด ์ฅ๊ณ ์ ๋ฆฌ์กํธ ์ฐ๊ฒฐํ๊ธฐ (0) | 2022.01.29 |
[Django] ๋ชจ๋ธ ๋ง๋ค๊ณ ํ์ด์ง์์ ์กฐํํ๊ธฐ (0) | 2022.01.13 |
[Django] ๊ธฐ๋ณธ ๊ฐ๋ (์ฑ, ๋ชจ๋ธ, ๊ด๋ฆฌ์) (0) | 2022.01.06 |
[Django] ๊ฐ๋ฐํ๊ฒฝ ๊ตฌ์ถํ๊ธฐ (0) | 2022.01.05 |