1. 程式人生 > >django-rest-framework筆記-請求與響應篇

django-rest-framework筆記-請求與響應篇

python ica ror nic patch cnblogs coo fix ria

一、請求對象

request.POST  # 處理表單數據.  限於POST請求.
request.data  # 處理任意數據.  對 ‘POST‘, ‘PUT‘ and ‘PATCH‘ 方法.

二、響應對象

return Response(data) #根據內容渲染制定類型

三、狀態碼

REST框架為每個狀態碼(status code)提供更明確的標識符,例如在狀態(status)模型中的HTTP_400_BAD_REQUEST

四、裝飾API視圖

1.@api_view用於視圖的方法上
2.APIView 基於視圖類上

snippets/views.py

# -*- coding: utf-8 -*-
from __future__ import unicode_literals
# Create your views here.

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, format=None): """ 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_404_NOT_FOUND) @api_view(["GET", "PUT", "DELETE"]) def snippet_detail(request, pk, format=None): """ 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)

snippets/urls.py

#!/usr/bin/env python
# coding:utf-8
from __future__ import absolute_import, print_function, division
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<pk>[0-9]+)/$, views.snippet_detail),
]

urlpatterns = format_suffix_patterns(urlpatterns)

五、測試

# http http://127.0.0.1:8000/snippets/
HTTP/1.0 200 OK
Allow: POST, OPTIONS, GET
Content-Length: 225
Content-Type: application/json
Date: Fri, 18 Aug 2017 14:58:53 GMT
Server: WSGIServer/0.1 Python/2.7.12
Vary: Accept, Cookie
X-Frame-Options: SAMEORIGIN

[
    {
        "code": "foo = \"bar\"\n",
        "id": 1,
        "language": "python",
        "linenos": false,
        "style": "friendly",
        "title": ""
    },
    {
        "code": "print \"Hello, Django-restframework\"\n",
        "id": 2,
        "language": "python",
        "linenos": false,
        "style": "friendly",
        "title": ""
    }
]
http http://127.0.0.1:8000/snippets/ Accept:application/json  # Request JSON
http http://127.0.0.1:8000/snippets/ Accept:text/html         # Request HTML
http http://127.0.0.1:8000/snippets.json  # JSON suffix
http http://127.0.0.1:8000/snippets.api   # Browsable API suffix
# POST using form data
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 using 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"
}

django-rest-framework筆記-請求與響應篇