Django 框架之 Restful框架

知識點

  1. Restful API介紹
  2. Django Restful Framework介紹
  3. 實例學習

簡介

Rest

Rest(Representational State Transfer)表現層狀態轉化

是一種架構風格:

  • 從資源角度來觀察整個網絡
  • 每個URL代表一種資源
  • 客戶端通過四個http動詞對后端進行操作

Http動詞

  1. get 獲取資源
  2. post 新建一個資源
  3. put 更新資源
  4. delete 刪除資源

Http動詞舉例

  1. get /poems
  2. post /poems
  3. get poems/id
  4. put poems/id
  5. delete poems/id

狀態碼

服務器向客戶端返回的狀態碼和信息提示:
200 OK - [GET]:服務器成功返回用戶請求的數據
201 CREATED - [POST/PUT]:用戶新建或修改數據成功。
400 INVALID REQUEST - [POST/PUT]:用戶發出的請求有錯誤
更多可以參考:10 Status Code Definitions

Django REST framework

一套構建restful API有效和便利的框架
安裝:pip install djangorestframework

參考文檔

Django REST framework的各種技巧【目錄索引】
代碼地址:Spareibs的Github

實驗操作

簡單實現Pome的get方法和post方法

定義一個serializers.ModelSerializer的子類并設置元數據 【serializers.py】

from rest_framework import serializers
from .models import Poem


class PoemSerializer(serializers.ModelSerializer):
    class Meta:
        # 制定元數據的model和fields
        model = Poem
        fields = ['author', 'title', 'type']

定義視圖函數的操作【views.py】

from rest_framework import status
from rest_framework.response import Response
from .serializers import PoemSerializer
from .models import Poem


class PoemListView(APIView):
    def get(self, request, format=None):
        poems = Poem.objects.all()
        serializer = PoemSerializer(poems, many=True)
        return Response(serializer.data)

    def post(self, request, format=None):
        serializer = PoemSerializer(data=request.data, many=True)
        if serializer.is_valid():
            serializer.save()
            return Response(serializer.data, status=status.HTTP_201_CREATED)
        else:
            return Response(serializer.errors, status=status.HTTP_400_BAD_REQUEST)

定義路由策略【urls.py】

from django.conf.urls import url
from . import views

urlpatterns = [
    url(r'^poems/$', views.PoemListView.as_view(), name="poem_list"),
]

使用裝飾器


定義視圖函數的操作【views.py】

@api_view(['GET', 'PUT', 'DELETE'])
def poem_detail(request, pk):
    try:
        poem = Poem.objects.get(pk=pk)
    except Poem.DoesNotExist:
        return Response(status=status.HTTP_404_NOT_FOUND)

    if request.method == 'GET':
        serializer = PoemSerializer(poem)
        return Response(serializer.data)
    elif request.method == 'PUT':
        serializer = PoemSerializer(Poem, request.data)
        if serializer.is_valid():
            serializer.save()
            return Response(serializer.data)
        else:
            return Response(serializer.errors, status=status.HTTP_400_BAD_REQUEST)
    elif request.method == 'DELETE':
        poem.delete()
        return Response(status=status.HTTP_204_NO_CONTENT)

定義路由策略【urls.py】

from django.conf.urls import url
from . import views

urlpatterns = [
    url(r'^poem/(?P<pk>[0-9]+)$', views.poem_detail, name="poem_list"),
]
最后編輯于
?著作權歸作者所有,轉載或內容合作請聯系作者
平臺聲明:文章內容(如有圖片或視頻亦包括在內)由作者上傳并發布,文章內容僅代表作者本人觀點,簡書系信息發布平臺,僅提供信息存儲服務。

推薦閱讀更多精彩內容