django_rest_framework之GenericAPIView(二)之搜索、排序、分页讲解
一、搜索過濾的步驟
1、在全局配置文件settings.py中設置’DEFAULT_FILTER_BACKENDS’,‘DEFAULT_FILTER_BACKENDS’指定使用的過濾搜索引擎類路徑(SearchFilter為搜索引擎類)
2、在繼承了GenericAPIView的類視圖中,search_fields類屬性指定模型類中需要進行搜索過濾的字段名
3、利用postman進行搜索查詢
4、如果我想改變搜索關鍵字search,怎么改?
直接將rest_framework\settings.py文件中的’SEARCH_PARAM’: ‘search’,復制到django中的setting.py文件中,改變search值即可
再利用postman進行搜索查詢,得知成功
5、可以在字段名稱前加相應的符號,指定查詢類型,
‘^’: ‘istartswith’,
‘=’: ‘iexact’,
‘$’: ‘iregex’,
6、實例方法中必須調用filter_queryset方法,并且要傳入查詢集對象
7、想要在特定的視圖類中進行過濾功能
a、首先導入:from rest_framework import filters
b、將filters.SearchFilter加入到filter_backends類屬性中
filter_backends在繼承了GenericAPIView的類視圖中指定使用的過濾引擎類,優先級高于全局(settings.py文件)
二、排序過濾的步驟
1、在全局配置文件settings.py中設置’DEFAULT_FILTER_BACKENDS’,'DEFAULT_FILTER_BACKENDS’指定使用的排序過濾引擎類路徑(OrderingFilter為排序引擎類)
2、 filter_backends在繼承了GenericAPIView的類視圖中指定使用的過濾引擎類(搜索過濾、排序過濾),優先級高于全局
在全局使用用的是類的路徑字符串,在視圖中用的引擎類的引用
3、將允許前端進行排序的字段放到ordering_fields類中,ordering_fields為列表,ordering_fields里之外的字段不允許進行排序
4、查詢集為:將查詢集進行過濾再賦予一個新的查詢集
5、再利用postman進行搜索查詢,得知成功
6、默認為升序排列,降序操作:
在排序字段前-:例如-name
7、如果對多個字段進行排序操作:
用逗號進行拼接
三、分頁設置
1、在全局配置文件settings.py中設置’DEFAULT_PAGINATION_CLASS’,'DEFAULT_PAGINATION_CLASS’指定使用的分頁引擎類路徑(PageNumberPagination為分頁引擎類)
2、需要指定PAGE_SIZE參數,表示每頁展示多少條數據
3、
a、調用paginate_queryset方法對查詢集對象進行分頁,(不能傳模型對象,因為模型對象只有一條數據,不做分頁操作)
b、調用get_paginated_response方法,將序列化之后的數據進行分頁,并返回Response響應
5、再利用postman進行分頁查詢,得知成功
6、 前端獲取指定的頁碼以及頁碼中一定的數據
a、新建一個py文件(pagination.py),放到指定的文件夾下(utils)
b、重寫PageNumberPagination方法(重寫PageNumberPagination方法,為了繼續使用該名稱,可以用from rest_framework.pagination import PageNumberPagination as _PageNumberPagination實現)
7、可以在特定的類視圖下指定分頁引擎類,高于全局
8、前端請求后,要實現最大頁和當前頁
a、重寫get_paginated_response方法,將操作后的數據為字典,再添加key為current_num、max_num,最后再返回response
9、postman訪問,結果正確
總結
以上是生活随笔為你收集整理的django_rest_framework之GenericAPIView(二)之搜索、排序、分页讲解的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: django_rest_framewor
- 下一篇: django_rest_framewor