自动生成接口文档
# 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)