1. 程式人生 > >06-REST Framework - API

06-REST Framework - API

序列化 strong 需求 serial 保存 art trie val 實驗

# 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