drf之過濾分頁異常
一 過濾Filtering
對於列表資料可能需要根據欄位進行過濾,我們可以通過新增django-fitlter擴充套件來增強支援。
|
|
在配置檔案中增加過濾後端的設定:
|
|
在檢視中新增filter_fields屬性,指定可以過濾的欄位
|
|
二 排序
對於列表資料,REST framework提供了OrderingFilter過濾器來幫助我們快速指明資料按照指定欄位進行排序。
使用方法:
在類檢視中設定filter_backends,使用rest_framework.filters.OrderingFilter
過濾器,REST framework會在請求的查詢字串引數中檢查是否包含了ordering引數,如果包含了ordering引數,則按照ordering引數指明的排序欄位對資料集進行排序。
前端可以傳遞的ordering引數的可選欄位值需要在ordering_fields中指明。
示例:
|
|
如果需要在過濾以後再次進行排序,則需要兩者結合!
|
|
三 分頁Pagination
REST framework提供了分頁的支援。
我們可以在配置檔案中設定全域性的分頁方式,如:
|
|
也可通過自定義Pagination類,來為檢視新增不同分頁行為。在檢視中通過pagination_clas
屬性來指明。
|
|
注意:如果在檢視內關閉分頁功能,只需在檢視內設定
|
|
可選分頁器
1) PageNumberPagination
前端訪問網址形式:
|
|
可以在子類中定義的屬性:
- page_size 每頁數目
- page_query_param 前端傳送的頁數關鍵字名,預設為”page”
- page_size_query_param 前端傳送的每頁數目關鍵字名,預設為None
- max_page_size 前端最多能設定的每頁數量
|
|
2)LimitOffsetPagination
前端訪問網址形式:
|
|
可以在子類中定義的屬性:
- default_limit 預設限制,預設值與
PAGE_SIZE
設定一直 - limit_query_param limit引數名,預設’limit’
- offset_query_param offset引數名,預設’offset’
- max_limit 最大limit限制,預設None
|
|
3)CursorPagination
前端訪問網址形式:
|
|
可以在子類中定義的屬性:
- cursor_query_param:預設查詢欄位,不需要修改
- page_size:每頁數目
- ordering:按什麼排序,需要指定
|
|
應用
|
|
四 異常處理 Exceptions
REST framework提供了異常處理,我們可以自定義異常處理函式。
4.1 使用方式
|
|
在配置檔案中宣告自定義的異常處理
|
|
如果未宣告,會採用預設的方式,如下
rest_frame/settings.py
|
|
4.2 案例
補充上處理關於資料庫的異常
|
|
4.3 REST framework定義的異常
- APIException 所有異常的父類
- ParseError 解析錯誤
- AuthenticationFailed 認證失敗
- NotAuthenticated 尚未認證
- PermissionDenied 許可權決絕
- NotFound 未找到
- MethodNotAllowed 請求方式不支援
- NotAcceptable 要獲取的資料格式不支援
- Throttled 超過限流次數
- ValidationError 校驗失敗
也就是說,很多的沒有在上面列出來的異常,就需要我們在自定義異常中自己處理了。