python 微信网站开发黄山自驾游旅游攻略
python 微信网站开发,黄山自驾游旅游攻略,wordpress cms,邯郸做wap网站建设django ninja通过paginate装饰器即可进行分页。内置了两个分页管理器LimitOffsetPagination和PageNumberPagination#xff0c;能够实现基本的分页要求。当内置分页器不满足要求时#xff0c;可以继承PaginationBase进行扩展自己的分页管理器。 1 使用分页器
from ninja.pa…django ninja通过paginate装饰器即可进行分页。内置了两个分页管理器LimitOffsetPagination和PageNumberPagination能够实现基本的分页要求。当内置分页器不满足要求时可以继承PaginationBase进行扩展自己的分页管理器。 1 使用分页器
from ninja.pagination import paginateapi.get(/users, responseList[UserSchema])
paginate
def list_users(request):return User.objects.all() /api/users?limit10offset0 返回
{
items: [],
count: 10
} 2 ninja自带分页器
2.1 LimitOffsetPagination
默认paginate使用的就是该分页器。 2.2 PageNumberPagination
api.get(/users)
paginate(PageNumberPagination, page_size50)
def list_users(...
返回结果包含items和count
{
items: [],
count: 10
} 2.3 自定义分页器
这个自定义分页器定义了Input、Output、paginate_queryset。
实现了page和page_size参数获取数据。page_size可以通过多种方式进行调节。在定义接口的时候设置固定值或者使用分页器的默认值或者使用用户的传输参数。
返回结果新增多个字段修改默认items为data。
#!/usr/bin/env python
# codingutf-8
# Time : 2024/2/2 15:40
# Software: PyCharm
import math
from ninja import Schema
from ninja.pagination import PaginationBase
from typing import List, Any, Optionalclass CustomPagination(PaginationBase):def __init__(self, page_size: Optional[int] None, **kwargs): 如果指定具体值那么用户参数中的page_size将会失效。page_size: 在定义接口是可以设置的每页记录数。例如api.get(/book)paginate(CustomPagination)def book_list(request):return Book.objects.all()api.get(/book)paginate(CustomPagination, page_size10) # 定义接口默认每页数量def book_list(request):return Book.objects.all()self.page_size page_sizesuper().__init__(**kwargs)class Input(Schema): 输入参数两个参数。1. page必须2. page_size可选page: intpage_size: int 5class Output(Schema):输出结果。1. data 数据集合2. total总记录数3. per_page每页记录数4. total_page总页数5. page当前页data: List[Any] # --- datatotal: intper_page: inttotal_page: intpage: intdef paginate_queryset(self, queryset, pagination: Input, **params):page pagination.pagepage_size self.page_size or pagination.page_sizestart_idx (page - 1) * page_sizeend_idx start_idx page_sizetotal_count queryset.count()return {data: queryset[start_idx: end_idx], # --- datatotal: total_count,per_page: page_size,total_page: math.ceil(total_count / page_size),page: page}items_attribute: str data # --- 将默认数据集合的名称从items修改成data
本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/diannao/90143.shtml
如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!