自动生成接口文档、分页器

自动生成接口文档

# coreapi,swagger
	pip3 install coreapi
    
# 使用步骤:
	1 在路由中
    from rest_framework.documentation import include_docs_urls
    urlpatterns = [
    path('doc/', include_docs_urls(title='项目接口文档')),
	]
    
	2 在配置文件中
	REST_FRAMEWORK = {
    'DEFAULT_SCHEMA_CLASS': 'rest_framework.schemas.coreapi.AutoSchema',
	}
    
	3 在视图类中方法上加注释即可
    
	4 如果是ModelViewSet
    	"""
       list:
       返回图书列表数据,通过Ordering字段排序

       retrieve:
       返回图书详情数据

       latest:
       返回最新的图书数据

       read:
       查询单个图书接口
       """
        
	5 字段描述,写在models的help_text上

三种分页方式

基本分页:PageNumberPagination
    page_size = 2  					# 每页显示两条
    page_query_param = 'page'  		# 查询第几页的参数 ?page=3
    max_page_size = 4     			# 每页最大显示多少条
    page_size_query_param = 'size' 	# 每页显示的条数查询条件(默认是page_size显示的条数) 
    								# ?page=3&size=3
    
偏移分页:LimitOffsetPagination
    default_limit=2  				# 默认显示几条
    limit_query_param='limit'   	# ?limit=3   表示取3条
    offset_query_param = 'offset' 	#偏移	从第5个位置开始,取3条数据	# ?offset=5&limit=3	
    max_limit = 5   				#最多显示5条
    
游标分页:CursorPagination
    cursor_query_param = 'cursor'
    page_size = 2
    ordering = 'id'

分页器的使用

-写一个类,继承三个之一,重写几个属性
-在视图类中配置

# 写一个类,重写类属性
class MyPageNumberPagination(PageNumberPagination):
    page_size = 2  					# 每页显示两条
    page_query_param = 'page'  		#查询第几页的参数 ?page=3

    max_page_size = 4     			#每页最大显示多少条
    page_size_query_param = 'size' 	#每页显示的条数查询条件(默认是page_size显示的条数) 
    								# ?page=3&size=3
     
# 配置 
## 局部使用
class BookView(ViewSetMixin,ListAPIView,CreateAPIView):
    queryset = models.Book.objects.all()
    serializer_class = serializer.BookModelSerializer
    #配置使用的分页类
    pagination_class = MyCursorPagination
    

## 全局使用,在配置文件中(以后所有视图的查询所有方法都用这个分页)
	REST_FRAMEWORK = {
'DEFAULT_PAGINATION_CLASS':'app01.page.MyPageNumberPagination'
}

继承了APIView实现分页

class BookView(APIView):
    def get(self, request):
        qs = models.Book.objects.all()
        # page_obj = PageNumberPagination()
        page_obj = LimitOffsetPagination()
        # 每页显示两条
        # page_obj.page_size = 2
        # page_obj.page_size_query_param = 'size'
        # page_obj.max_page_size = 5
        
        page_obj.default_limit=2
        # 得到的就是当前页码的数据
        page_res = page_obj.paginate_queryset(qs, request, self)
        print(page_res)
        ser = serializer.BookModelSerializer(instance=page_res, many=True)

        # return Response({'status': 100, 'msg': '查询成功', 'data': ser.data, 'next': page_obj.get_next_link(),
        return page_obj.get_paginated_response(ser.data)

posted @ 2021-04-30 09:08  最冷不过冬夜  阅读(74)  评论(0编辑  收藏  举报