| 일 | 월 | 화 | 수 | 목 | 금 | 토 | 
|---|---|---|---|---|---|---|
| 1 | ||||||
| 2 | 3 | 4 | 5 | 6 | 7 | 8 | 
| 9 | 10 | 11 | 12 | 13 | 14 | 15 | 
| 16 | 17 | 18 | 19 | 20 | 21 | 22 | 
| 23 | 24 | 25 | 26 | 27 | 28 | 29 | 
| 30 | 
													Tags
													
											
												
												- 농구
 - java #자바 #나동빈
 - PYTHON
 - react #리액트 #동빈나 #나동빈 #유튜브강의
 - 프로그래머스
 - Dijkstra
 - 파이썬 #알고리즘 #코딩테스트 #프로그래머스
 - css #웹 #생활코딩
 - BFS
 - 다이나믹프로그래밍
 - 파이썬 #백준 #알고리즘 #코딩테스트
 - java #자바 #동빈나
 - 투포인터
 - css #생활코딩 #웹
 - 백준
 - 백준 #파이썬 #알고리즘 #코딩테스트
 - 프로그래머스 #파이썬 #코딩테스트 #알고리즘
 - 다익스트라
 - java #자바
 - DFS
 - 파이썬
 - 자바 #java
 - 프로그래머스 #파이썬 #알고리즘 #코딩테스트
 - dp
 - 백준 #알고리즘 #파이썬 #코딩테스트
 - 재귀
 - 알고리즘
 - java #자바 #생활코딩
 - 코딩테스트
 - 백트랙킹
 
													Archives
													
											
												
												- Today
 
- Total
 
커리까지
[Django REST framework] 2. Response objects 본문
728x90
    
    
  SMALL
    api_view, status
restapi > appapi > views.py
- 데코레이터로 응답 형태를 지정할 수 있다.
 - 리턴되는 상탯값을 status모듈에서 사용할 수 있다.
 
from rest_framework import status
from rest_framework.decorators import api_view
from rest_framework.response import Response
from .models import Snippet
from .serializers import SnippetSerializer
@api_view(['GET', 'POST'])
def snippet_list(request):
    if request.method == 'GET':
        snippets = Snippet.objects.all()
        serializer = SnippetSerializer(snippets, many=True)
        return Response(serializer.data)
    elif request.method == 'POST':
        serializer = SnippetSerializer(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_view(['GET', 'PUT', 'DELETE'])
def snippet_detail(request, pk):
    try:
        snippet = Snippet.objects.get(pk=pk)
    except Snippet.DoesNotExist:
        return Response(status=status.HTTP_404_NOT_FOUND)
    if request.method == 'GET':
        serializer = SnippetSerializer(snippet)
        return Response(serializer.data)
    if request.method == 'PUT':
        serializer = SnippetSerializer(snippet, data=request.data)
        if serializer.is_valid():
            serializer.save()
            return Response(serializer.data)
        return Response(serializer.errors, status=status.HTTP_400_BAD_REQUEST)
    if request.method == 'DELETE':
        snippet.delete()
        return Response(status=status.HTTP_204_NO_CONTENT)
| 응답번호 | 내용 | 
|---|---|
| 200 | 성공 - 서버가 요청을 제대로 처리 | 
| 201 | 작성됨 - 성공적으로 요청되었으며 서버가 새 리소를 작성 | 
| 204 | 콘텐츠 없음 - 서버가 요청을 성공적으로 처리했지만 콘텐츠를 제공하지 않음 | 
| 400 | 잘못된 요청 - 서버가 요청의 구문을 인식하지 못함 | 
| 404 | 찾을 수 없음 - 서버가 요청한 페이지를 찾을 수 없음 | 
- 이 전과 달라진 점이 있다면 
JsonResponse가Response로 변경되었다. - json으로 parse하지 않아도 된다.
 - status가 명확하게 어떤 이유인지 알 수 있도록 해준다.
 
실행해보기
snippet_list에 put 요청 날리기
- 요청
 

- 응답 결과
 

- allow에 put이 없기 때문에 405에러가 발생한다.
 
snippet_detail에 post 요청
- 요청
 

body
{
  "id" : "steve",
  "pw" : "1234",
  "email" : "sss@ccc.com"
}- 응답 결과
 

- allow에 post이 없기 때문에 405 에러를 반환한다.
 
format 옵션
restapi > appapi > views.py
format=None추가하기
@api_view(['GET', 'POST'])
def snippet_list(request, format=None):
    if request.method == 'GET':
        snippets = Snippet.objects.all()
        serializer = SnippetSerializer(snippets, many=True)
        return Response(serializer.data)
    elif request.method == 'POST':
        serializer = SnippetSerializer(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_view(['GET', 'PUT', 'DELETE'])
def snippet_detail(request, pk, format=None):
    try:
        snippet = Snippet.objects.get(pk=pk)
    except Snippet.DoesNotExist:
        return Response(status=status.HTTP_404_NOT_FOUND)
    if request.method == 'GET':
        serializer = SnippetSerializer(snippet)
        return Response(serializer.data)
    if request.method == 'PUT':
        serializer = SnippetSerializer(snippet, data=request.data)
        if serializer.is_valid():
            serializer.save()
            return Response(serializer.data)
        return Response(serializer.errors, status=status.HTTP_400_BAD_REQUEST)
    if request.method == 'DELETE':
        snippet.delete()
        return Response(status=status.HTTP_204_NO_CONTENT)
restapi > appapi > urls.py
format_suffix_patterns설정하기
from django.urls import path
from .views import *
from rest_framework.urlpatterns import format_suffix_patterns
urlpatterns = [
    path('snippets/', snippet_list),
    path('snippets/<int:pk>/', snippet_detail),
]
urlpatterns = format_suffix_patterns(urlpatterns)
실행하기
json
응답 결과를 json으로 전달
# header에 추가 http http://127.0.0.1:8000/snippets/ Accept:application/json # url에 추가 http http://127.0.0.1:8000/snippets.json

html
- 응답결과를 html 형식으로 전달
 
# header에 추가
http http://127.0.0.1:8000/snippets/ Accept:text/html
# url에 추가
http http://127.0.0.1:8000/snippets.api

728x90
    
    
  LIST
    'django' 카테고리의 다른 글
| [Django REST framework] 4. Authentication& Permissions (0) | 2022.03.02 | 
|---|---|
| [Django REST framework] 3. Class-based Views (0) | 2022.02.28 | 
| [Django REST framework] 1-1. View와 Serializer 연결하기 (0) | 2022.02.26 | 
| [Django REST framework] 1. Serialization 시작 (0) | 2022.02.25 | 
| [django, 장고] 장고 form checkbox 값 여러개 받기 (0) | 2021.07.10 | 
			  Comments