成人性生交大片免费看视频r_亚洲综合极品香蕉久久网_在线视频免费观看一区_亚洲精品亚洲人成人网在线播放_国产精品毛片av_久久久久国产精品www_亚洲国产一区二区三区在线播_日韩一区二区三区四区区区_亚洲精品国产无套在线观_国产免费www

主頁 > 知識庫 > DRF過濾排序分頁異常處理的過程記錄

DRF過濾排序分頁異常處理的過程記錄

熱門標(biāo)簽:企業(yè)彩鈴地圖標(biāo)注 上海正規(guī)的外呼系統(tǒng)最新報價 如何地圖標(biāo)注公司 煙臺電話外呼營銷系統(tǒng) 電銷機(jī)器人錄音要學(xué)習(xí)什么 預(yù)覽式外呼系統(tǒng) 長春極信防封電銷卡批發(fā) 銀川電話機(jī)器人電話 外賣地址有什么地圖標(biāo)注

一、過濾

對于列表數(shù)據(jù)要通過字段來進(jìn)行過濾,就需要添加 django-filter 模塊

使用方法:

# 1、注冊,在app中注冊 settings.py
INSTALLED_APPS = [
    'django_filters',
]

# 2、settings.py 配置
REST_FRAMEWORK = {
    'DEFAULT_FILTER_BACKENDS': (
        'django_filters.rest_framework.DjangoFilterBackend',
    )
}

# 3、在視圖中添加filter_fields屬性,指定過濾的字段
class BooksView(ModelViewSet):
    queryset = Books.objects.all()
    serializer_class = BooksSerializer

    filter_fields = ('title',) # 配置可以按照哪個字段來過濾
    
# http://127.0.0.1:8000/books/?title=紅樓夢

二、排序

排序可以使用 Rest Framework 提供的 OrderingFilter 來快速指明數(shù)據(jù)按指定字段進(jìn)行排序

使用方法:

# 1、首先視圖中設(shè)置filter_backends=[OrderingFilter]
# 2、然后再視圖中添加 ordering_fields 屬性,指定排序字段

from rest_framework.filters import OrderingFilter
class BooksView(ModelViewSet):
    queryset = Books.objects.all()
    serializer_class = BooksSerializer

    filter_backends = [OrderingFilter] # 第一步
    ordering_fields = ['price','id'] # 第二步
    
# http://127.0.0.1:8000/books/?ordering=id 通過ordering查看有無指明排序的字段,并通過字段來排序
# -id 表示針對id字段進(jìn)行倒序排序
# id  表示針對id字段進(jìn)行升序排序

三、分頁

首先 Rest Framework 提供了三種分頁方式,并且

  • PageNumberPagination
  • LimitOffsetPagination
  • CursorPagination

使用方式一:可以直接繼承使用,但是配置參數(shù)需要在settings.py里面配置

使用方式二:通過子類繼承父類分頁器使用,直接在子類中修改父類的參數(shù)(推薦)

PageNumberPagination

子類中的屬性:

  • page_size:每頁數(shù)目
  • page_query_param:前端發(fā)送的頁數(shù)關(guān)鍵字,默認(rèn)“page”
  • page_size_query_param:前端發(fā)送每頁數(shù)目關(guān)鍵字名,默認(rèn)None
  • max_page_size:前端最多能設(shè)置的每頁數(shù)量

如何使用:

from rest_framework.generics import ListAPIView
from rest_framework.pagination import PageNumberPagination
from app01.models import Books
from app01.ser import BooksSerializer

# 第一步:
class BookPageNumberPagination(PageNumberPagination):
    page_size = 3         # 每頁條數(shù)
    page_query_param = 'page'   # 查詢第幾頁的key
    page_size_query_param = 'size'  # 每一頁顯示的條數(shù)
    max_page_size = 5   # 每頁最大條數(shù)


class BookView(ListAPIView):
    queryset = Books.objects.all()
    serializer_class = BooksSerializer
    
    # 第二步:分頁配置
    pagination_class = BookPageNumberPagination
    
    
# url:http://127.0.0.1:8000/books/?page=1size=5 查詢第1頁,一共顯示五條數(shù)據(jù)

LimitOffsetPagination

子類中的屬性:

  • default_limit:默認(rèn)限制,默認(rèn)值與PAGE_SIZE設(shè)置一致
  • limit_query_param:limit參數(shù)名,默認(rèn)'limit'
  • offset_query_param:offset參數(shù)名,默認(rèn)'offset'
  • max_limit:最大limit限制,默認(rèn)None

如何使用:

from rest_framework.generics import ListAPIView
from rest_framework.pagination import LimitOffsetPagination
from app01.models import Books
from app01.ser import BooksSerializer

# 第一步:
class BookLimitOffsetPagination(LimitOffsetPagination):
    default_limit = 3           # 每頁條數(shù)
    limit_query_param = 'limit'     # 往后拿幾條
    offset_query_param = 'offset'   # 從第幾條往后拿幾條的標(biāo)桿
    max_limit = 5       # 每頁最大拿幾條


class BookView(ListAPIView):
    queryset = Books.objects.all()
    serializer_class = BooksSerializer
    
    # 第二步:分頁配置
    pagination_class = BookLimitOffsetPagination
    
    
# url:http://127.0.0.1:8000/books/?limit=3offset=4  從第三條開始往后拿4條數(shù)據(jù)

CursorPagination

子類中的屬性:

  • cursor_query_param:默認(rèn)查詢字段,不需要修改
  • page_size:每頁數(shù)目
  • ordering:按什么排序,需要指定

如何使用:

CursorPagination的查詢速度快,但是卻不能定位到第幾頁這樣查,要么往前查,要么往后查。

from rest_framework.generics import ListAPIView
from rest_framework.pagination import CursorPagination
from app01.models import Books
from app01.ser import BooksSerializer

# 第一步:
class BookCursorPagination(CursorPagination):
    cursor_query_param = 'cursor'   # 每頁查詢的key
    page_size = 3       # 每頁顯示條數(shù)
    ordering = 'id'    # 排序字段


class BookView(ListAPIView):
    queryset = Books.objects.all()
    serializer_class = BooksSerializer
    
    # 第二步:分頁配置
    pagination_class = BookCursorPagination
    
    
# url:http://127.0.0.1:8000/books/?cursor=cD0z

繼承APIView使用方法

像方式一,方式二這樣使用的話,就要視圖類是繼承 ListAPIView 然后直接配置就可以了

但是如果視圖類繼承的是 GenericAPIView 或者 APIView 的話,就需要用另一種方式了:

使用方法:

# 1、定義一個分頁器
class BookPageNumberPagination(PageNumberPagination):
    page_size = 3         # 每頁條數(shù)
    page_query_param = 'page'   # 查詢第幾頁的key
    page_size_query_param = 'size'  # 每一頁顯示的條數(shù)
    max_page_size = 5   # 每頁最大條數(shù)


class BookView(APIView):

    def get(self, request, *args, **kwargs):
        book_list = Books.objects.all()

        # 2、實(shí)例化得到一個分頁器對象
        page_obj = BookPageNumberPagination()
        
        # 3、調(diào)用paginate_queryset返回每一頁的數(shù)據(jù)
        book_list = page_obj.paginate_queryset(book_list, request, view=self)

        # 4、獲取上一頁下一頁鏈接
        next_url = page_obj.get_next_link()
        previous_url = page_obj.get_previous_link()

        # 5、序列化
        book_ser = BooksSerializer(book_list, many=True)
        
        # 6、加入響應(yīng)信息中
        data = {'next_url': next_url, 'previous_url': previous_url, 'data': book_ser.data}
        return Response(data=data)

四、異常處理

異常處理主要是用來統(tǒng)一接口返回

源碼分析

異常處理在APIView的api_settings已經(jīng)配置好了

'EXCEPTION_HANDLER': 'rest_framework.views.exception_handler',

def exception_handler(exc, context):
    # 先判斷是不是404
    if isinstance(exc, Http404): # exc是異常信息的異常對象
        exc = exceptions.NotFound()
    # 然后判斷是不是權(quán)限的問題
    elif isinstance(exc, PermissionDenied):
        exc = exceptions.PermissionDenied()  # 比如權(quán)限問題會返回一個字典
        
 # 在判斷你拋出的是不是API的異?!?gt;認(rèn)證權(quán)限這些都是繼承了API的異常
    if isinstance(exc, exceptions.APIException):
        headers = {}
        if getattr(exc, 'auth_header', None):
            headers['WWW-Authenticate'] = exc.auth_header
        if getattr(exc, 'wait', None):
            headers['Retry-After'] = '%d' % exc.wait

        if isinstance(exc.detail, (list, dict)):
            data = exc.detail
        else:
            data = {'detail': exc.detail}

        set_rollback()
        return Response(data, status=exc.status_code, headers=headers)
    # 只要是上面這些異常都做了處理
   

    return None  # 意味有些異常它沒有處理,就會交給Django自己處理

如何處理

因?yàn)閐ir有些異常它不做處理,Django處理的又不符合我們的標(biāo)準(zhǔn),所以就要寫一個統(tǒng)一的異常類來替換掉它,把所有情況都處理,只要前端出異??吹降亩际枪潭ǖ臇|西。

如何寫:

重寫一個類,和它基本上差不多,配置的時候在 settings.py 里面全局配置

#  app01_auth.py
from rest_framework.views import exception_handler
from rest_framework.response import Response

def app01_exception_handler(exc, context):
    response = exception_handler(exc, context)  # 原來的drf處理的我們也需要
    # 兩種情況,一個是None,drf沒有處理,Django處理了,但是處理的不符合需求
    # response對象,drf處理了我們需要的


    if not response:
        # 如果沒處理,那么我們自己處理
        return Response(data={'status': 400, 'error': str(exc)}, status=400)
    else:
        # drf 處理了,那么取出它處理的信息,重新處理一下
        return Response(data={'status': 400, 'error': response.data.get('detail')}, status=400)

然后再全局配置一下:settings.py

REST_FRAMEWORK = {
    'EXCEPTION_HANDLER': 'app01.app_auth.app01_exception_handler',
}

五、封裝Response對象

class APIResponse(Response):
    def __init__(self,code=100,msg='成功',data=None,status=None,headers=None,**kwargs):
        
        dic = {'code': code, 'msg': msg}
        
        if  data:
            dic = {'code': code, 'msg': msg,'data':data}
            
        dic.update(kwargs)
        
        super().__init__(data=dic, status=status,headers=headers)
        
        
# 使用
return APIResponse(data={"name":'xiaoyang'},token='dsafsdfa',aa='dsafdsfdee')
return APIResponse(data={"name":'xiaoyang'})
return APIResponse(code='101',msg='錯誤',data={"name":'xiaoyang'},token='dsafsdfa',aa='dsafdsfdee',header={})

總結(jié)

到此這篇關(guān)于DRF過濾排序分頁異常處理的文章就介紹到這了,更多相關(guān)DRF過濾排序分頁內(nèi)容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!

您可能感興趣的文章:
  • Django實(shí)現(xiàn)drf搜索過濾和排序過濾

標(biāo)簽:西寧 宜昌 盤錦 湖北 潮州 上饒 珠海 佳木斯

巨人網(wǎng)絡(luò)通訊聲明:本文標(biāo)題《DRF過濾排序分頁異常處理的過程記錄》,本文關(guān)鍵詞  DRF,過濾,排序,分頁,異常,;如發(fā)現(xiàn)本文內(nèi)容存在版權(quán)問題,煩請?zhí)峁┫嚓P(guān)信息告之我們,我們將及時溝通與處理。本站內(nèi)容系統(tǒng)采集于網(wǎng)絡(luò),涉及言論、版權(quán)與本站無關(guān)。
  • 相關(guān)文章
  • 下面列出與本文章《DRF過濾排序分頁異常處理的過程記錄》相關(guān)的同類信息!
  • 本頁收集關(guān)于DRF過濾排序分頁異常處理的過程記錄的相關(guān)信息資訊供網(wǎng)民參考!
  • 推薦文章
    樱桃视频免费看| 精品国内自产拍在线视频| a天堂中文在线官网在线| 情se视频网在线观看| 男插女视频久久久| 久久性生活视频| 亚洲黄色小说图片| 日本在线人成| 亚洲女则毛耸耸bbw| 亚洲国产美女搞黄色| av小片在线| 亚洲欧洲免费视频| 亚洲小说区图片| 日韩中文字幕免费观看| 欧美麻豆精品久久久久久| 日韩亚洲一区在线播放| 国产伦精品一区二区三区视频我| 国产亚洲高清视频| 91精品国产色综合| 日韩精品一区二区三区三区免费| 日韩脚交footjobhd| 亚洲成人激情社区| 五月婷婷之婷婷| 亚洲第一中文字幕在线观看| 免费xxxx性欧美18vr| 韩国中文字幕av| www高清在线视频日韩欧美| 老汉色影院首页| 亚洲四色影视在线观看| 国产偷国产偷亚洲高清人白洁| 精品国产一区二区三区av片| 2019日本中文字幕| 另类激情亚洲| 四虎永久免费| 精品视频一区二区在线观看| 蜜桃精品一区二区| 日韩欧美亚洲日产国| 天堂一本之道| 久操国产精品| 国产精品电影一区二区三区| 欧美日韩一卡| h片在线观看视频| 国产精品久一| 97热精品视频官网| 亚洲精品av在线播放| 国产日韩欧美亚洲一区| 综合久久一区二区三区| 国产日韩欧美精品一区二区三区| 亚洲巨乳在线| 92看片淫黄大片一级| 在线观看黄色国产| 国产在线二区| 97久久天天综合色天天综合色hd| 国产一区二区三区| 激情五月激情综合网| 欧美日韩在线观看一区二区| 精品国产日韩欧美| 91精品久久久久久久久久久久久久| 亚洲亚洲免费| 黄色一级片网址| 欧美在线三级| 日韩av在线直播| 69久久夜色精品国产7777| 午夜影院在线观看欧美| 欧美黄色免费观看| 人妻有码中文字幕| 亚洲国产综合在线| 久久久一二三区| 日本a视频在线观看| 好吊色视频988gao在线观看| xxxx性bbbb欧美| 欧美激情一区二区在线| 最近中文字幕免费mv2018在线| 超碰在线公开| 国产精品美女久久久久av福利| 久久国产精品无码网站| 国产aaa精品| av免费高清观看| 国产亚洲成aⅴ人片在线观看| 日韩精品中文字幕一区二区| 日本少妇一区二区| 日韩亚洲成人av在线| 宅男噜噜噜66一区二区66| 国产精品欧美久久| 校园春色综合网| 久久久久这里只有精品| 日韩一区二区视频在线| 免费观看亚洲视频大全| 国产精品污污网站在线观看| 91丝袜国产在线播放| 午夜影院观看视频免费| 一本大道久久a久久精品综合| 97一区二区国产好的精华液| 久久亚洲道色| 亚洲国产精品免费在线观看| julia中文字幕久久亚洲蜜臀| 精品国产精品网麻豆系列| 国产精品福利无圣光在线一区| 亚洲天堂av网| 97色伦图片97综合影院| 久久国产综合精品| japanese国产精品| 91麻豆精品国产91久久久| 欧美男男gaygay1069| 尤物在线观看视频| 日韩成人av一区| 78m国产成人精品视频| 在线视频网站| 成人亚洲视频在线观看| 欧美日韩国产免费| 日韩电影在线观看一区二区| 欧美视频免费看欧美视频| 自拍欧美一区| 日韩免费在线电影| 精品少妇人妻av一区二区三区| 精品无码人妻一区二区三区| 日韩一区二区三区四区五区六区| 国产日韩欧美综合| 青青草免费观看免费视频在线| 免费a视频在线观看| 男人日女人bb视频| 国产乱码精品一区二区三| 成年人在线视频免费观看| 如如影视在线观看经典| 久久精品免视看国产成人| 国产精品成人一区二区| 麻豆精品一区二区三区视频| 美女免费视频黄| 亚洲欧美精品中文字幕在线| 欧美日韩国产一区中文午夜| 99久久777色| 日韩成人av毛片| 天堂av资源在线观看| 天海翼一区二区三区免费| 欧美在线观看一区二区| 91日本视频在线| 最近国语视频在线观看免费播放| 波多野结衣精品久久| 国产精品白丝喷水在线观看| 国产成人手机高清在线观看网站| 色欲av永久无码精品无码蜜桃| 国偷自产av一区二区三区小尤奈| 亚洲精品视频一区| 99香蕉久久| 无码人妻久久一区二区三区| 中文字幕亚洲高清| 一本色道久久综合狠狠躁的番外| 男女污视频在线观看| 日韩午夜在线影院| 一道本在线观看视频| 亚洲精品一区二区三区在线观看| 2019国产精品自在线拍国产不卡| 欧美在线免费观看视频| 欧美激情无毛| 色综合桃花网| 亚洲精品高清国产一线久久| 亚洲欧美成人一区二区在线电影| 亚洲色成人网站www永久四虎| 国产精品电影在线观看| 内射一区二区三区| 神马亚洲视频| 免费在线播放第一区高清av| 欧美成人精精品一区二区频| 亚洲欧洲一区二区三区在线观看| 污视频网站观看| 亚洲网站在线| 日本一本不卡| 日韩综合第一页| 成人av资源在线| 欧美成人午夜剧场免费观看| 一卡二卡三卡亚洲| 国产一级视频在线播放| 成人h视频在线观看播放| 91在线观看高清| 91中文字幕精品永久在线| 欧美精品激情| 日日摸夜夜爽人人添| 91日韩免费| 国产富婆一区二区三区| 日韩欧美黄色| 亚洲免费网站在线观看| 国产欧美精品一区二区三区四区| 久草视频在线观| 国产精品高清在线| 欧洲成人在线视频| 精品国产一区二区三区久久狼5月| 最新av在线网站| 精品人妻一区二区三区视频| www.一区二区| 图片区日韩欧美亚洲| 欧美作爱福利免费观看视频| 久久精品性爱视频| 国产精品45p| 国产成人一区二区三区影院| 亚洲综合图色| 一区二区三区国| 亚洲缚视频在线观看| 国产网站av| 国产美女搞久久| 欧美在线欧美在线| 成人eeuss影院在线观看| 国产偷窥女洗浴在线观看亚洲| 国产视频一区二区视频| 在线免费看v片| 超鹏97在线| **孕交吃奶水一级毛片| 高潮毛片无遮挡| 欧美色网站导航| 国产激情无码一区二区三区| 中文字幕资源网| 4kfree性满足欧美hd18| 亚洲福利电影网| 亚洲国产天堂久久国产91| 亚洲第一福利一区| 亚洲欧洲精品一区二区| 国产精品嫩草影院桃色| 国产日韩欧美在线播放| 成人噜噜噜噜| 天涯成人国产亚洲精品一区av| 欧洲在线视频一区| 亚洲一区二区网站| 色综合久久影院| 人人干人人干人人干| 精品无码国模私拍视频| 欧美性猛交xxxx免费看久久| 无遮挡h肉3d动漫在线观看| 嫩草影院在线观看网站成人| xxxwww在线观看| 免费黄色片视频| jizzjizz16| 日韩综合第一页| 男男受被啪到高潮自述| 九色porny自拍视频在线观看| 欧美理论电影在线精品| 1区1区3区4区产品乱码芒果精品| 欧美日韩人妻精品一区二区三区| 久久天堂国产精品| 国产午夜视频在线观看| 少妇光屁股影院| 伊人365影院| 精精国产xxxx视频在线野外| 麻豆网站视频在线观看| 久久综合久久综合九色| 欧洲vodafonewi精品| 亚洲美女区一区| 欧美区日韩区| 免费精品99久久国产综合精品| 99精品一区二区三区的区别| 国产精品网站在线观看| 国产98在线| 少妇精品放荡导航| 中文在线官网天堂| 26uuu亚洲综合色欧美| 懂色av蜜桃av| 德国性xxxx| 久久伊人精品天天| 香蕉视频在线观看免费| 美女的胸无遮挡在线观看| 久久奇米777| 日韩欧美一二区| 在线观看av日韩| 日韩精品黄色网| 成人精品gif动图一区| 国产精品伦一区| 国产午夜在线视频| 国产理论片免费观看| 看黄网站在线| 欧美成人一区二区| 九热爱视频精品视频| 一区二区在线中文字幕电影视频| 亚洲人成自拍网站| 免费成人在线观看视频| 免费黄色一级网站| 一区二区三区|亚洲午夜| 日韩激情小视频| 亚洲欧美色综合| av在线网址观看| aaaaa毛片| 国产情侣小视频| 国产精品麻豆一区二区| 成年人免费看的视频| 国产欧美成人xxx视频| 自拍偷拍激情视频| 一级片视频播放| 亚洲男人都懂第一日本| 欧美亚洲一区二区三区四区| 97久久人人超碰caoprom欧美| 可以免费看污视频的网站| 亚洲美女一区二区三区| av电影在线播放高清免费观看| 人人在线视频| 国产精品久久久一区二区| 真实的国产乱xxxx在线91| 国产一区二区黄| 欧美午夜视频在线观看| 男人添女人下部高潮视频在观看| 欧美日韩三区| 91视频啊啊啊| 亚洲成在线观看| 好吊妞国产欧美日韩免费观看网站| 精品亚洲精品福利线在观看| av不卡免费看| 欧美欧美全黄| 亚洲九九九在线观看| 免费看的av| 9797在线看片亚洲精品| 欧美h版在线| 成年人在线观看视频| 亚洲欧美综合乱码精品成人网| 影音欧美亚洲| 欧美日韩一区二区免费视频| 蜜臀av在线播放| 精品国产一区二区三区在线| 欧美一区 二区 三区| 日韩一区二区在线观看| 宅男在线国产精品| 亚洲在线天堂| 欧美在线影院在线视频| 午夜视频在线观看一区二区三区| 欧美另类专区| 黄色激情小视频| 91视频啊啊啊| 亚洲欧美另类中文字幕| 天堂成人免费av电影一区| 色乱码一区二区三在线看| 岛国视频一区| 精品国产精品国产偷麻豆| 色多多国产成人永久免费网站|