寫寫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('頻繁傳送簡訊')
-