Django REST framework(요청 및 응답)
1 주 요청 대상 Request objects
request.POST # Only handles form data. Only works for 'POST' method.
request.data # Handles arbitrary data. Works for 'POST', 'PUT' and 'PATCH' methods.
요청 대상 은 일반적인 HttpRequest 를 확장 하 였 으 며,핵심 함 수 는 request.data 속성 으로 request.POST 와 유사 합 니 다.
2 주 응답 대상 Response objects
return Response(data) # Renders to content type as requested by the client.
응답 대상 은 Template Response 형식 입 니 다.이것 은 렌 더 링 내용 이 고 콘 텐 츠 협상 을 통 해 클 라 이언 트 에 게 정확 한 콘 텐 츠 유형 을 되 돌려 줍 니 다.
3 주 상태 코드 상태 코드
보기(views)에서 순수한 숫자 를 사용 하 는 HTTP 상태 코드 는 항상 쉽게 이해 되 지 않 습 니 다.그리고 오류 코드 가 잘못 되면 무시 되 기 쉽다.REST 프레임 워 크 는
status
모듈 의 모든 상태 코드(예:HTTP_400_BAD_REQUEST
)에 더욱 명확 한 식별 자 를 제공 합 니 다.순수한 숫자의 HTTP 상태 코드 대신 사용 하 는 것 이 좋 은 생각 입 니 다.사주 포장(wrapping)API 보기
REST 프레임 워 크 는 API 보 기 를 작성 할 수 있 는 포장 기(wrappers)두 개 를 제공 합 니 다.
@api_view
장식 기.APIView
클래스 입 니 다.이 포장 기 들 은 보기 에서
Request
인 스 턴 스 를 받 아들 이 고 컨 텍스트 를Response
에 추가 하여 콘 텐 츠 협상 을 수행 할 수 있 도록 하 는 기능 을 제공 합 니 다.포장 기 는 적절 한 시기 에
405 Method Not Allowed
응답 을 되 돌려 주 고 형식 오류 의 입력 으로request.data
에 접근 할 때 발생 하 는 모든ParseError
이상 을 처리 합 니 다.오 주 는 한 걸음 에 도착 했다.
from rest_framework import status
from rest_framework.decorators import api_view
from rest_framework.response import Response
from snippets.models import Snippet
from snippets.serializers import SnippetSerializer
@api_view(['GET', 'POST'])
def snippet_list(request):
"""
List all code snippets, or create a new snippet.
"""
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):
"""
Retrieve, update or delete a code snippet.
"""
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)
elif 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)
elif request.method == 'DELETE':
snippet.delete()
return Response(status=status.HTTP_204_NO_CONTENT)
6 주 는 우리 의 사이트 에 선택 할 수 있 는 형식 접 두 사 를 추가 합 니 다.
views.py
def snippet_list(request, format=None):
def snippet_detail(request, pk, format=None):
urls.py
from django.conf.urls import url
from rest_framework.urlpatterns import format_suffix_patterns
from snippets import views
urlpatterns = [
url(r'^snippets/$', views.snippet_list),
url(r'^snippets/(?P[0-9]+)$', views.snippet_detail),
]
urlpatterns = format_suffix_patterns(urlpatterns)
7 주 조사 결과
snippet 。
http http://127.0.0.1:8000/snippets/
HTTP/1.1 200 OK
...
[
{
"id": 1,
"title": "",
"code": "foo = \"bar\"
",
"linenos": false,
"language": "python",
"style": "friendly"
},
{
"id": 2,
"title": "",
"code": "print \"hello, world\"
",
"linenos": false,
"language": "python",
"style": "friendly"
}
]
Accept :
http http://127.0.0.1:8000/snippets/ Accept:application/json # JSON
http http://127.0.0.1:8000/snippets/ Accept:text/html # HTML
:
http http://127.0.0.1:8000/snippets.json # JSON
http http://127.0.0.1:8000/snippets.api # API
, Content-Type 。
# POST
http --form POST http://127.0.0.1:8000/snippets/ code="print 123"
{
"id": 3,
"title": "",
"code": "print 123",
"linenos": false,
"language": "python",
"style": "friendly"
}
# POST JSON
http --json POST http://127.0.0.1:8000/snippets/ code="print 456"
{
"id": 4,
"title": "",
"code": "print 456",
"linenos": false,
"language": "python",
"style": "friendly"
}
http --debug, 。
http://127.0.0.1:8000/snippets/ API。
다음으로 전송:https://www.cnblogs.com/cangshuchirou/p/9265115.html
이 내용에 흥미가 있습니까?
현재 기사가 여러분의 문제를 해결하지 못하는 경우 AI 엔진은 머신러닝 분석(스마트 모델이 방금 만들어져 부정확한 경우가 있을 수 있음)을 통해 가장 유사한 기사를 추천합니다:
다양한 언어의 JSONJSON은 Javascript 표기법을 사용하여 데이터 구조를 레이아웃하는 데이터 형식입니다. 그러나 Javascript가 코드에서 이러한 구조를 나타낼 수 있는 유일한 언어는 아닙니다. 저는 일반적으로 '객체'{}...
텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
CC BY-SA 2.5, CC BY-SA 3.0 및 CC BY-SA 4.0에 따라 라이센스가 부여됩니다.