目錄
二、排序
三、異常處理
四、自己封裝response
對於列表資料可能需要根據字段進行過濾,我們可以通過新增django-fitlter擴充套件來增強支援。
pip install django-filter
# 在配置檔案中增加過濾後端的設定:
...'django_filters', # 需要註冊應用,
]rest_framework =
from rest_framework.generics import listapiview
class bookview(listapiview):
queryset = book.objects.all()
serializer_class = bookserializer
filter_backends=[searchfilter,] # 過濾類:可以自己寫,也可以用內建,使用第三方
filter_fields = ('title',) # 可以根據欄位來過濾
# 第一步,寫乙個類,繼承基類basefilterbackend,重寫某個方法filter_queryset,返回的資料就是過濾後的qs物件
# 配置一下,在檢視類中配置
filter_backends = [filterbyname]
### 過濾類
from rest_framework.filters import basefilterbackend
class filterbyname(basefilterbackend):
def filter_queryset(self, request, queryset, view):
# 紅樓夢
query=request.query_params.get('name')
if query:
return queryset.filter(name__contains= query )
else:
return queryset
return queryset
### 檢視類
# from .filters import filterbyname
# class bookview(viewsetmixin, listapiview):
# queryset = book.objects.all()
# serializer_class = bookserializer
# filter_backends = [filterbyname]
在類檢視中設定filter_backends,使用rest_framework.filters.orderingfilter過濾器,rest framework會在請求的查詢字串引數中檢查是否包含了ordering引數,如果包含了ordering引數,則按照ordering引數指明的排序欄位對資料集進行排序。
前端可以傳遞的ordering引數的可選字段值需要在ordering_fields中指明。
from rest_framework.generics import listapiview
from rest_framework.filters import orderingfilter
class book2view(listapiview):
queryset = book.objects.all()
serializer_class = bookserializer
filter_backends = [orderingfilter]
ordering_fields = ('id', 'price')
# 測試
# -id 表示針對id欄位進行倒序排序
# id 表示針對id欄位進行公升序排序
from rest_framework.generics import listapiview
from rest_framework.filters import orderingfilter
from django_filters.rest_framework import djangofilterbackend
class book2view(listapiview):
queryset = book.objects.all()
serializer_class = bookserializer
filter_fields = ('title', 'price')
# 因為區域性配置會覆蓋全域性配置,所以需要重新把過濾元件核心類再次宣告,否則過濾功能會失效
filter_backends = [orderingfilter, djangofilterbackend]
ordering_fields = ('id', 'price')
# 全域性配置
rest_framework =
# 統一介面返回
from rest_framework.views import exception_handler # 匯入全域性異常
from rest_framework import status
# 自定義異常處理
def my_exception_handler(exc, context):
response = exception_handler(exc, context)
# 兩種情況,乙個是none,drf沒有處理
# 自己封裝response物件
from rest_framework.response import response
class apiresponse(response):
def __init__(self, code=100, msg='成功',data=none,status=none,headers=none,**kwargs):
dic =
if data:
dic =
dic.update(kwargs)
super().__init__(data=dic,status=status,headers=headers)
# 使用方式
# 使用方式
class testview(apiview):
def get(self, request, *args, **kwargs):
return apiresponse(data=, token='dddddd')
# 好處是可擴充套件性強,使用方式非常方便
drf認證 許可權 頻率 過濾 排序 異常處理
使用方法 1 新建乙個認證類檔案,繼承baseauthentication raise authenticationfailed 驗證失敗 else raise authenticationfailed 請求頭沒有token資訊 2 認證類區域性配置 區域性使用,在列表內發那個值認證類 區域性禁用,...
MVC異常過濾器處理異常資訊
今天學習了mvc的過濾器,寫一下筆記!一 過濾器分類 1.authorization 許可權過濾器 一般用於登入驗證 或其他許可權管理 2.action 行為過濾器 可讓其執行自定義的方法 3.result 結果過濾器 可讓其執行自定義的方法 4.exception 異常過濾器 可獲取程式中的錯誤資...
MVC使用異常過濾器處理異常
在mvc的開發過程中,我們可能會遇到一些 錯誤導致的異常,如下圖所示,展示了乙個除數為0的異常。在mvc裡,自動為我們提供了一種異常處理器,並且應用在所有控制器上。在filters資料夾裡建立類,類名為 自定義 attribute,如我建立的類名為myeorroattribute。然後在繼承filt...