過濾元件 排序 異常處理

2022-09-20 12:09:12 字數 3720 閱讀 7191

目錄

二、排序

三、異常處理

四、自己封裝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...