标签:页码 ring stat gen 数据 oca tin code 一个
rest-framework查询时候默认是不分页的, 除了手动计算查询的起始位置之外, rest-framework也提供了一些页码的设置功能.
在settings中rfw(rest-framework)的所有设置都在REST_FRAMEWORK
字典中,(如果不设置将采用rfw的默认设置, 默认设置存放在rest-framework.settings
中, 可以在此处查询设置的字段名, 防止拼写错误), 我们修改项目目录下的settings.py
REST_FRAMEWORK = {
‘DEFAULT_PAGINATION_CLASS‘: ‘rest_framework.pagination.LimitOffsetPagination‘,
‘PAGE_SIZE‘: 10 # 这是每页显示的数目
}
完毕
此时通过restframe查询之时, 将以每页十条数据显示. 这种方式及其简单, 但是无法对url的页码参数进行’个性化’定制
自定义类需要重写PageNumberPagination
, 可以自定义多个参数
from rest_framework.pagination import PageNumberPagination
class StandardResultsSetPagination(PageNumberPagination):
page_size = 10
page_size_query_param = ‘size‘
page_query_param = ‘p‘
max_page_size = 100
重写后只需在类视图中指定即可
class GoodsListView(mixins.ListModelMixin, viewsets.GenericViewSet):
"""
goods list
"""
...
pagination_class = StandardResultsSetPagination
此时的url变为:
http://localhost:8000/books/?p=3&size=3
直接在视图指定filter_backends可以快速实现过滤的功能
from django_filters.rest_framework import DjangoFilterBackend
class GoodsListView(mixins.ListModelMixin, viewsets.GenericViewSet):
"""
goods list
"""
...
filter_backends = (DjangoFilterBackend, ) # 过滤
filter_fields = (‘name‘, ‘shop_price‘) # 过滤的字段
此时通过浏览器访问, 右上角谁多出一个过滤器按钮, 点击即可过滤:
但是值得注意的是, 这种过滤方式不支持任何模糊搜索的, 必须完全一致才可以匹配到结果.
过滤时的url格式为
http://localhost:8000/books/?name=namss&shop_price=30
为了实现模糊搜索, 可以设置一个自定义的过滤器类, 并在视图中完成指定.
比如过滤价格区间:
import django_filters
from .models import Goods
class ProductFilter(django_filters.rest_framework.FilterSet):
‘‘‘商品的过滤类‘‘‘
# 比如此处我们进行价格的过滤
price_min = django_filters.NumberFilter(name="shop_price", lookup_expr=‘gte‘)
price_max = django_filters.NumberFilter(name="shop_price", lookup_expr=‘lt‘)
class Meta:
model = Goods
fields = [‘price_min‘, ‘price_max‘] # 使之生效
当然, 也需要到视图中指定filter_class
from django_filters.rest_framework import DjangoFilterBackend
class GoodsListView(mixins.ListModelMixin, viewsets.GenericViewSet):
"""
goods list
"""
...
filter_backends = (DjangoFilterBackend, ) # 过滤
# 自定义的过滤
filter_class = ProductFilter
标签:页码 ring stat gen 数据 oca tin code 一个
原文地址:https://www.cnblogs.com/hanbowen/p/10069550.html