Django REST framework(요청 및 응답)

원본 링크:http://www.cnblogs.com/cangshuchirou/p/9265115.html
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

    좋은 웹페이지 즐겨찾기