1. 程式人生 > >寫寫Django中DRF框架概述以及序列化器物件serializer的構造方法以及使用

寫寫Django中DRF框架概述以及序列化器物件serializer的構造方法以及使用

一.瞭解什麼是DRF

DRF: Django REST framework

Django REST framework 框架是一個用於構建Web API 的強大而又靈活的工具。

通常簡稱為DRF框架 或 REST framework。

DRF框架是建立在Django框架基礎之上,由Tom Christie大牛二次開發的開源專案。

二.DRF的特點

提供了定義序列化器Serializer的方法,

可以快速根據 Django ORM 或者其它庫自動序列化/反序列化;

提供了豐富的類檢視、Mixin擴充套件類,簡化檢視的編寫;

豐富的定製層級:函式檢視、類檢視、檢視集合到自動生成 API,滿足各種需要;

多種身份認證和許可權認證方式的支援;

內建了限流系統;

直觀的 API web 介面;

可擴充套件性,外掛豐富    

三.serializer物件的構建

Serializer的構造方法為:

Serializer(instance=None, data=empty, **kwarg)

說明:

1)用於序列化時,將模型類物件傳入instance引數

2)用於反序列化時,將要被反序列化的資料傳入data引數

3)除了instance和data引數外,在構造Serializer物件時,還可通過context引數額外新增資料,如

serializer = AccountSerializer(account, context={'request': request})

通過context引數附加的資料,可以通過Serializer物件的context屬性獲取。

四.通關context屬性獲取引數的具體用法:

引入檢視基類GenericAPIView,繼承自APIVIew主要增加了操作序列化器和資料庫查詢的方法.

提供的關於序列化器使用的屬性與方法

  • 屬性:

    serializer_class 指明檢視使用的序列化器
  • 方法:

  • get_serializer_class(self)

    返回序列化器類,預設返回serializer_class,可以重寫,例如:

    def get_serializer_class(self):
        if self.request.user.is_staff:
            return FullAccountSerializer
        return BasicAccountSerializer
    
  • get_serializer(self, args, *kwargs)

    返回序列化器物件,主要用來提供給Mixin擴充套件類使用,如果我們在檢視中想要獲取序列化器物件,也可以直接呼叫此方法。

    注意,該方法在提供序列化器物件的時候,會向序列化器物件的context屬性補充三個資料:request、format、view,這三個資料物件可以在定義序列化器時使用。

    request 當前檢視的請求物件 
  • view 當前請求的類檢視物件
  • format 當前請求期望返回的資料格式
  • 通過一段偽程式碼表現context獲取引數資料
    • # 判斷使用者是否在60s內使用同一個手機號碼獲取簡訊,mobile為手機號。通過context來獲取當前類檢視物件,通過kwargs來獲取mobile。

      mobile = self.context['view'].kwargs['mobile']

      send_flag = redis_conn.get('send_flag_%s' % mobile)

      if send_flag:

             raise serializers.ValidationError('頻繁傳送簡訊')