06-REST Framework - API
# Django REST Framework
# 1. REST
- 前後端分離
- API-ApplicationProgrammingInterface
- 為了應付千變萬化的前端需求
- REST:RepresataionsStateTrans
- 20000 Fieding博士提出
- RESTful:遵守REST規範的技術設計的軟件可以稱為RESTful
- REST規範
- URL代表一個資源,一個資源應該是一個名詞
- 動作有HTTP的methode方法提供
- URL應該包含版本信息,版本信息也可以放在HTTP協議中
- 過濾信息,使用URL的參數代表過濾
- 返回值: 每一個返回代碼都有具體特定含義
- 返回格式:推薦固定具體格式
- DjangoRestFramework(DRF)
- https://q1mi.github.io/Django-REST-framework-documentation/
- 安裝:pip install djangorestframework
- 版本問題: version3.7是基於1.xx版本django,之後是2.xx版本django
- django_filter依賴djangorestframework 3.7
- DRF的主要任務
- django-admin startproject TlxyDRF
- python manage.py startapp case01
- 配置settings
- 配置urls
- 創建三個模型:Student,Teacher, ClassRoom
- 創建序列化器
- 創建視圖聚合
# 序列化
- 序列化: 把系統運行中的一些實例等轉換成一種可直接表示出來的格式,用來保存,傳輸等
- 反序列化: 序列化的反操作
# 序列化/反序列化-DRF
# 實驗步驟
- 創建project DRF2
- 創建app MySer
- settings
# serializer的類型的參數
- read_only: 僅用於序列化輸出
- write_only: 反序列化輸入
- required:反序列化時必須輸入,默認是True
- allow_null: 允許傳入None
- validators: 使用驗證器
# 創建serializer對象/使用
- 構造方法
Serializer(instance=None, data=empty, **kwarg)
- 反序列化
- 驗證
- is_valid:
- 驗證數據是否合法,返回boolean
- 在使用從外部傳入的數據之前,必須使用此函數進行驗證
- 如果驗證失敗,返回數據錯誤異常
- validated_data:
- 經過驗證後的數據,存入此結構
- 視圖
- DRF的試圖從處理任務,處理流程等跟Django基本一致
- 此視圖基本是django視圖的擴展
- Request
- 把請求解析成一個request實例
- 屬於DRF的,跟django的HttpRequest不太一樣
- 在得到Request之前有一個Parse對傳入的數據請求進行解析
- data屬性
- 請求數據體,類似於Django的request.POST, request.FILES
- 在DRF中主要指的是Json
- query_params
- 所有傳入的關鍵字
api.tulingxueyuan.com/student/?name=‘liu‘
# 使用案例
name = self.request.query_params.get(‘name‘, None)
- user
- 登錄後的用戶信息都在user中
- 如果沒有登錄,則是anoymous
- 可以用來判斷用戶是否登錄成功
- Response
- rest_framework.response.Response
- 用Renderer渲染器對返回內容進行渲染
REST_FRAMEWORK = {
‘DEFAULT_RENDERER_CLASSES‘: ( # 默認響應渲染類
‘rest_framework.renderers.JSONRenderer‘, # json渲染器
‘rest_framework.renderers.BrowsableAPIRenderer‘, # 瀏覽API渲染器
)
}
- 返回的構造方式
- return Response(data, status=None, template_name=None, headers=None, content_type=None)
- data: 返回的數據
- status: 返回的狀態碼
- 1xx: 信息告知
- 2xx: 成功
- 3xx:重定向
- 4xx: 請求錯誤
- 5xx: 服務器錯誤
- 視圖類
- APIView
- rest_framework.views.APIView
- 是django中View的子類
- 跟View有不同的地方
- 傳入傳出數據用的是drf的請求和反饋類
- 會引發並處理APIException
- 在dispatch之前,會進行身份驗證,權限檢查,流量控制
- 支持的屬性有
- authentication_classes: 列表或者元祖,身份驗證類
- permisson_classes: 進行權限驗證
- throttle_classes:流量控制類
- 對API的訪問提供了一些方便
- HTTP-Method + 名詞
- 默認對HttpMethod常用方法提供了支持
- API調試工具
- chrome - postman
- firefox - RESTClient
- GenericAPIView
- APIView的子類
- 支持的屬性
- queryset:查詢結果集
- serializer_class: 視圖使用的序列化器
- panination_class: 分頁控制器
- filter_backends: 過濾器後端
- lookup_field:查詢條件字段,默認為pk
- get_queryset: 返回查詢結果集集合,經常需要重寫
- get_serializer_class:得到序列化器類
- get_serializer: 得到序列化器
- ListModelMixin
- list(reqeust, *args, **kwargs)
- CreateModelMixin
- create(requst, *args, **kwargs)
- RetrieveModelMixin
- retrieve(...............)
- UpdateModelMixin
- update(..........)
- DestroyModelMixin
- destroy(.......)
- ViewSet
- 把一系列操作打包放入一個類中
- list:GET
- retrieve:GET + id
- destroy:DELETE
- update:UPDATE
- create:POST
06-REST Framework - API