页面的过滤功能和分页功能
在Django REST中框架提供了非常方便操作的过滤功能和分页功能。这些功能既能在settings中直接设置成全局的功能,又能在不同的视图类中使用设置成具体页面的功能。
过滤功能
Django REST 中过滤主要提供两部分功能。
一是搜索功能,
二是排序功能。
- SearchFilter
- OrderingFilter
具体的代码设置如下:
1.首先在settings中安装过滤功能app
INSTALLED_APPS = [
...
'rest_framework',
'django_filters', #网页搜索功能
'corsheaders',
...
]
2.settings全局设置过滤功能(若要针对具体页面定制过滤功能,可以之后在具体views中声明,具体的功能会覆盖掉全局设置的功能):
REST_FRAMEWORK = {
'DEFAULT_FILTER_BACKENDS': ('django_filters.rest_framework.DjangoFilterBackend',)
}
3.局部视图类设置过滤功能(设置具体的搜索功能):
#导入排序过滤器类和搜索过滤器类
from rest_framework.filters import OrderingFilter, SearchFilter
class ProductListView(generics.ListAPIView):
"""
产品列表
"""
...
#筛选器后台,搜索过滤器和排序过滤器
filter_backends = (SearchFilter, OrderingFilter,)
#搜索的是description字段的内容
search_fields = ('description',)
#排序功能根据以下的四个字段排序
ordering_fields = ('category', 'manufacturer', 'created',
'sold')
#默认排序的字段
ordering = ('id',)
...
分页功能
Django REST 中分页设置也能提供两部分功能。
一是直接设置默认页面的显示个数,
二是可以利用url自定义显示偏移的页面个数。
- PageNumberPagination
- LimitOffsetPagination
具体的代码设置如下:
1.在settings中设置全局的分页方式:
#增加分页功能,rest框架的设置都在这个字典内
REST_FRAMEWORK = {
'DEFAULT_PAGINATION_CLASS': 'rest_framework.pagination.PageNumberPagination',
#全局的分页方式,优先级低于具体类的具体分页方式
'PAGE_SIZE':6,
}
2.在具体页面设置分页方式:
class ProductListView(generics.ListAPIView):
"""
产品列表
"""
...
#分页方式是limit,修改值会修改每页显示的条数http://127.0.0.1:8000/computer/product_list/?limit=2&offset=10 偏移是10条数据
pagination_class = LimitOffsetPagination