drf中3个分页器类、借助coreapi生成接口文档
from rest_framework.pagination import PageNumberPagination, LimitOffsetPagination, CursorPagination
# 写一个类,继承drf 提供的3个内置分页器类(PageNumberPagination, LimitOffsetPagination, CursorPagination)之一,自己再重写4个属性:
1.1 继承PageNumberPagination, 的自定义分页器类
重要属性
每页展示条数 : page_size = xx
分页名称:(http://127.0.0.1:8000/book1/?yy=2) page_query_param = yy
设置一个字段,在路由中为其赋值,可以修改每页展示条数: page_size_query_param = aa
每页展示最大条数 max_page_size = bb
class ContentPagination(PageNumberPagination):
page_size = 2
page_query_param = 'page'
page_size_query_param = 'p'
max_page_size = 5
视图类
class Book1(ModelViewSet, ListAPIView):
queryset = Book.objects.all()
serializer_class = BookSerial
# 取消认证
authentication_classes = []
permission_classes = []
throttle_classes = []
pagination_class = ContentPagination
测试
http://127.0.0.1:8000/book1/?p=10&page=2,
这里虽然使用了p=10来设置每页展示的条数,但是它超过了我们设置的max_page_size = 5,所以得到的结果是每页只展示5条
1.2 LimitOffsetPagination 偏移分页
重要属性
# 重要的类属性
default_limit = api_settings.PAGE_SIZE # 显示多少条
limit_query_param = 'limit' # limit的参数http://127.0.0.1:8000/books/?limit=2&offset=4
offset_query_param = 'offset' # offset偏移的查询参数http://127.0.0.1:8000/books/?limit=2&offset=4
max_limit = 5 # 最大显示条数,为5
使用
# 流程,自定义类,继承方法,重写属性,在视图类中使用。
继承类
class Book2(ModelViewSet, ListAPIView):
queryset = Book.objects.all()
serializer_class = BookSerial
# 取消认证
authentication_classes = []
permission_classes = []
throttle_classes = []
pagination_class = Page2
自定义类
class Page2(LimitOffsetPagination):
default_limit = 2
limit_query_param = 'limit'
offset_query_param = 'offset'
max_limit = 5
1.3 CursorPagination 游标分页
# 重要类属性
cursor_query_param = 'cursor' # 查询条件
page_size = api_settings.PAGE_SIZE # 每页显示多少条
ordering = 'id' # 排序,按id排序
page_size_query_param = 'size' # 通过这个参数决定每页显示多少条
max_page_size = 5 # 每页最大显示多少条
## 优点:速度最快,数据量越大,越有优势
## 缺点:只能前一页和后一页,不能直接跳到某一页
# 访问
http://127.0.0.1/four/students/?cursor=cD0xNQ%3D%3D
注意
上面的ordering,根据的models里面表中的字段,还可以在models中这样设置:
class Book(models.Model):
name = models.CharField(max_length=24)
price = models.CharField(max_length=12)
# 外键,与Publish表相关联,一对多关系
publish = models.ForeignKey(to='Publish', on_delete=models.CASCADE)
class Meta:
ordering = ('publish',)
# 这里使用publish是因为价格的字段是CharField,字符串效果不明显,所以用一个数字属性的字段,效果就能够看出来了。
有时候会遇见一个警告
You have specified a default PAGE_SIZE pagination rest_framework setting, without specifying also a DEFAULT_PAGINATION_CLASS.
HINT: The default for DEFAULT_PAGINATION_CLASS is None. In previous versions this was PageNumberPagination. If you wish to define PAGE_SIZE globally whilst defining pagination_class on a per-view basis you may silence this check.
(
您指定了默认的页面大小分页rest框架设置,但没有同时指定默认分页类。
提示:默认分页类的默认值是None。在以前的版本中,这是PageNumberPagination。如果您希望全局定义页面大小,同时按每个视图定义分页类,则可以取消此检查。 )
方法二:'DEFAULT_PAGINATION_CLASS':['app01.myuntils.Page2', 'app01.myuntils.Page3',],
在项目配置文件中,配置
自动生成接口文档(3星
# 后端人员写好接口,编写接口文档,给前端人员看,前端人员依照接口文档开发
# 公司里主流
-后端,使用world,md写,提到git上
-公司有接口平台,后端开发在接口平台录入(yapi,第三方),可以批量导入
-后端项目自动生成接口文档(不是特别美观或友好,有时候还需要配合上面两种)
-django的drf自动生成 coerapi,swagger:java,go,python
# 第一步:安装coreapi
# 第二步:路由中配置
from rest_framework.documentation import include_docs_urls
urlpatterns = [
path('docs/', include_docs_urls(title='路飞项目接口文档')),]
# 第三步:配置文件中配置
REST_FRAMEWORK = {
## 接口文档配置
'DEFAULT_SCHEMA_CLASS': 'rest_framework.schemas.coreapi.AutoSchema',
}
#第四步:写接口,加注释
# 第五步:访问
http://127.0.0.1:8000/docs/
# 还可以在自定义序列化组件中使用,比如对某些字段进行说明等

浙公网安备 33010602011771号