데이터 입력시 POST를 사용한다.
# api/views.py
from rest_framework import status
@api_view(['POST'])
def postTestAPI(request):
serializer = TestAPISerializer(data=request.data)
if serializer.is_valid():
serializer.save()
return Response(serializer.data, status=status.HTTP_201_CREATED)
return Response(serializer.errors, status=status.HTTP_400_BAD_REQUEST)
# api/urls.py
from django.urls import path
from . import views
urlpatterns = [
path('getapi/', views.getTestAPI),
path('postapi/', views.postTestAPI) # 추가
]
코드 | 설명 |
---|---|
@api_view(['POST']) | API 뷰를 정의, HTTP 중 POST 요청을 처리한다. |
TestAPISerializer(data=request.data) | 받아온 데이터(request.data)를 TestAPISerializer를 사용하여 직렬화 |
serializer.is_valid() | 렬화된 데이터가 유효한지 확인 |
Response | 상태 코드 및 데이터 혹은 오류 메시지 반환 |
status | HTTP 응답 상태 코드를 정의하는 데 사용되는 모듈 |
상태 코드 | 설명 |
---|---|
HTTP_200_OK | 요청 성공, 클라이언트에 데이터 제공 |
HTTP_201_CREATED | 요청 성공, 새로운 리소스가 생성 |
HTTP_204_NO_CONTENT | 요청 성공, 별도의 데이터 미제공(주고 DELETE에서 사용) |
HTTP_400_BAD_REQUEST | 잘못된 요청으로 서버에서 처리할 수 없음 |
HTTP_401_UNAUTHORIZED | 인증이 필요한 리소스에 접근하려고 할 때 사용, 클라이언트 미인증 |
HTTP_404_NOT_FOUND | 요청한 리소스를 찾을 수 없음 |
HTTP_500_INTERNAL_SERVER_ERROR | 서버 측에서 오류 발생 |
코드를 저장 후 서버를 실행해 준다.
주소창에 localhost:8000/api/postapi/를 입력하면 아래와 같은 창이 뜨게 된다.
{
"title": "POST API",
"content": "post 되었습니다."
}
JSON형식의 데이터를 입력 후 POST버튼을 눌러준다.
Postman같은 경우 왼쪽 GET을 POST로 변경 후 raw-JSON에 입력해야한다.
입력 후 send버튼을 누를 경우 위 이미지와 같이 보여진다.
다시 GET으로 확인해볼경우 정상적으로 데이터가 들어간 것을 확인할 수 있다.
데이터 수정시 PUT을 사용한다.
# api/views.py
@api_view(['PUT'])
def putTestAPI(request, id):
try:
data = Testapi.objects.get(id=id)
except Testapi.DoesNotExist:
return Response({'message': '해당 ID를 가진 데이터를 찾을 수 없습니다.'}, status=status.HTTP_404_NOT_FOUND)
serializer = TestAPISerializer(data, data=request.data)
if serializer.is_valid():
serializer.save()
return Response(serializer.data)
return Response(serializer.errors, status=status.HTTP_400_BAD_REQUEST)
# api/urls.py
urlpatterns = [
path('getapi/', views.getTestAPI),
path('postapi/', views.postTestAPI),
path('putapi/', views.putTestAPI), # 추가
path('putapi/<int:id>/', views.putTestAPI), # 추가
]
코드 | 설명 |
---|---|
@api_view(['PUT']) | API 뷰를 정의, HTTP 중 PUT 요청을 처리한다. |
try•except | 예외 처리시 사용 |
Testapi.objects.get(id=id) | ID를 사용하여 데이터베이스에서 해당 레코드를 가져오기 |
Testapi.DoesNotExist | Django 모델에서 발생하는 예외 중 DB에서 모델 객체를 찾지 못할 때 발생 |
코드를 저장 후 서버를 실행해 준다.
주소창에 localhost:8000/api/putapi/1/를 입력 후 수정할 내용을 작성해준다.
Postman같은 경우 왼쪽 GET을 PUT으로 변경 후 raw-JSON에 입력해야한다.
입력 후 send버튼을 누를 경우 위 이미지와 같이 보여진다.
데이터 삭제시 DELETE를 사용한다.
# api/views.py
@api_view(['DELETE'])
def deleteTestAPI(request, id):
try:
Testapi_instance = Testapi.objects.get(id=id)
except Testapi.DoesNotExist:
return Response({'message': '해당 ID를 가진 데이터를 찾을 수 없습니다.'}, status=status.HTTP_404_NOT_FOUND)
Testapi_instance.delete()
return Response(status=status.HTTP_204_NO_CONTENT)
# api/urls.py
urlpatterns = [
path('getapi/', views.getTestAPI),
path('postapi/', views.postTestAPI),
path('putapi/<int:id>/', views.putTestAPI),
path('deleteapi/<int:id>/', views.deleteTestAPI), # 추가
]
코드 | 설명 |
---|---|
@api_view(['DELETE']) | API 뷰를 정의, HTTP 중 PUT 요청을 처리한다. |
Testapi_instance.delete() | Django 모델에서 데이터베이스에서 특정 레코드를 삭제하는 메서드 |
코드를 저장 후 서버를 실행해 준다.
주소창에 localhost:8000/api/deleteapi/2/를 입력 후 send버튼을 누른다.
Postman같은 경우 왼쪽 GET을 DELETE 변경 후 send버튼**을 누를 경우 삭제된다.
이후 다시 확인하면 id 2가 사라진 것을 볼 수 있다.
하나의 url로 GET, POST, PUT, DELETE를 처리할 수 있다.
# app/views.py
@api_view(['GET', 'POST', 'PUT', 'DELETE'])
def TestAPI(request, id=None):
if request.method == 'GET':
data = Testapi.objects.all()
serializer = TestAPISerializer(data, many=True)
return Response(serializer.data)
elif request.method == 'POST':
serializer = TestAPISerializer(data=request.data)
if serializer.is_valid():
serializer.save()
return Response(serializer.data, status=status.HTTP_201_CREATED)
return Response(serializer.errors, status=status.HTTP_400_BAD_REQUEST)
elif request.method == 'PUT':
try:
data = Testapi.objects.get(id=id)
except Testapi.DoesNotExist:
return Response({'message': '해당 ID를 가진 데이터를 찾을 수 없습니다.'}, status=status.HTTP_404_NOT_FOUND)
serializer = TestAPISerializer(data, data=request.data)
if serializer.is_valid():
serializer.save()
return Response(serializer.data)
return Response(serializer.errors, status=status.HTTP_400_BAD_REQUEST)
elif request.method == 'DELETE':
try:
Testapi_instance = Testapi.objects.get(id=id)
except Testapi.DoesNotExist:
return Response({'message': '해당 ID를 가진 데이터를 찾을 수 없습니다.'}, status=status.HTTP_404_NOT_FOUND)
Testapi_instance.delete()
return Response(status=status.HTTP_204_NO_CONTENT)
# app/views.py
from django.urls import path
from . import views
urlpatterns = [
path('testapi/', views.TestAPI),
path('testapi/<int:id>/', views.TestAPI),
]
데코레이터에 GET, POST, PUT, DELETE를 넣고 elif문으로 어떤 요청인지 받아와 해당 코드를 실행할 수 있다.
POST
PUT
DELETE 및 GET