drf中3个分页器类、借助coreapi生成接口文档

drf分页器

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/
       
# 还可以在自定义序列化组件中使用,比如对某些字段进行说明等



posted @ 2021-07-07 19:34  代码歌  阅读(173)  评论(0)    收藏  举报