一、 Django REST framework介紹
Django REST framework是基於Django實現的一個RESTful風格API框架,能夠幫助我們快速開發RESTful風格的API。
官網:https://www.django-rest-framework.org/
中文文檔:https://q1mi.github.io/Django-REST-framework-documentation/
二、Django REST framework安裝和配置
1、安裝
pip install djangorestframework
2、配置
如果想要獲取一個圖形化的頁面,需要將 rest_framework 注冊到項目的INSTALL_APPS中。
INSTALLED_APPS = [ 'django.contrib.admin', 'django.contrib.auth', 'django.contrib.contenttypes', 'django.contrib.sessions', 'django.contrib.messages', 'django.contrib.staticfiles', 'rest_framework' 'Api.apps.ApiConfig', ]
三、基於Django實現RESTful API
1、路由
from django.urls import path
from Api.views import Users
app_name = 'Api'
urlpatterns = [
path('users/', Users.as_view(), name='users')
]
2、視圖
class Users(View): def get(self, request, *args, **kwargs): data = { 'code': 0, 'data': 'response data' } return JsonResponse(data=data, status=200) def post(self, request, *args, **kwargs): data = { 'code': 0, 'data': 'response data' } return JsonResponse(data=data, status=200)
3、使用postman分別發送get和post請求
(1)、get請求
(2)、post請求
(3)注意:
狀態碼一般兩種寫入方式,一種是直接寫在data中,但是這種寫入不是真正意義上的改變狀態碼,第二種就是上面中的例子,寫入JsonResponse中
另外,發送post請求需要csrf_token豁免。
四、基於Django RESTful Framework框架實現
1、路由
from django.urls import path, include from Api.views import Users, TestView app_name = 'Api' urlpatterns = [ path('users/', Users.as_view(), name='users'), path('test/', TestView.as_view(), name='test') ]
2、視圖
from django.http import JsonResponse from django.shortcuts import render from django.views import View from rest_framework.response import Response from rest_framework.views import APIView class TestView(APIView): def dispatch(self, request, *args, **kwargs): """ 請求到來之后,都要請求dispatch方法,dispath方法根據不同的請求方式出發get/post/put等方法 注意:APIView中,dispath方法有好多好多功能 """ return super().dispatch(request, *args, **kwargs) def get(self, request, *args, **kwargs): data = { "status": 200, 'data': 'get success' } return Response(data, status=201) def post(self, request, *args, **kwargs): data = { 'status': 200, 'data': 'post success' } return Response(data, status=201)
五、APIView中的方法
1、renderer_classes 渲染的類
2、parser_classes 解析轉換的類
3、authentication_classes 認證的類
4、throttle_classes 節流的類,控制請求頻率
5、permission_classes 權限的類
6、content_negotiation_class 內容過濾類
7、metadata_class 元信息的類
8、versioning_class 版本控制的類
9、as_view()
調用父類中的as_view ->dispatch方法
dispatch方法被重寫
initialize_request 使用django的request構建了一個REST中的Request
initial
perform_authentication
執行用戶認證,遍歷認證器,如果認證成功返回一個元祖,元祖中的第一個元素就是user,第二個元素就是auth,token
check_permissions
檢查權限,遍歷我們的權限檢測器,只要有一個權限檢測沒有通過,就直接顯示權限被拒絕,所有權限都滿足,才算是擁有權限。
check_throttles
檢測頻率,遍歷頻率限制器,如果驗證不通過,就需要等待
csrf_exempt
所有APIView的自雷都是csrf豁免的
六、錯誤碼
封裝status模塊中,實際上就是一個常量類
七、針對視圖函數的包裝
1、CBV
APIView
2、FBV
添加@api_view裝飾器
必須手動指定允許的請求方法