python - 如何将列表转换为 REST 的分页 JSON 响应?

标签 python json django pagination django-rest-framework

我是 Django REST Framework 的新手,遇到了一个问题。

我正在为社交应用程序构建后端。任务是将分页的 JSON 响应返回给客户端。在文档中,我只找到了如何对模型实例执行此操作,但我拥有的是一个列表:

[368625, 507694, 687854, 765213, 778491, 1004752, 1024781, 1303354, 1311339, 1407238, 1506842, 1530012, 1797981, 2113318, 2179297, 2312363, 2361973, 2610241, 3005224, 3252169, 3291575, 3333882, 3486264, 3860625, 3964299, 3968863, 4299124, 4907284, 4941503, 5120504, 5210060, 5292840, 5460981, 5622576, 5746708, 5757967, 5968243, 6025451, 6040799, 6267952, 6282564, 6603517, 7271663, 7288106, 7486229, 7600623, 7981711, 8106982, 8460028, 10471602]

有什么好的方法吗?我必须以某种特殊的方式序列化它吗?

客户正在等待的是:

{"users": [{"id": "368625"}, {"id": "507694"}, ...]}

问题是:如何对此类响应进行分页?

任何意见都将受到高度赞赏!

最诚挚的问候, 阿列克谢。

最佳答案

TLDR:

import json
data=[368625, 507694, 687854, 765213, 778491, 1004752, 1024781, 1303354, 1311339, 1407238, 1506842, 1530012, 1797981, 2113318, 2179297, 2312363, 2361973, 2610241, 3005224, 3252169, 3291575, 3333882, 3486264, 3860625, 3964299, 3968863, 4299124, 4907284, 4941503, 5120504, 5210060, 5292840, 5460981, 5622576, 5746708, 5757967, 5968243, 6025451, 6040799, 6267952, 6282564, 6603517, 7271663, 7288106, 7486229, 7600623, 7981711, 8106982, 8460028, 10471602]
print(json.dumps({"users":[{"id":value} for value in data]}))

import json导入json包,该包是一个JSON序列化/反序列化库

json.dumps(obj) 接受一个 Python 对象 obj,并将其序列化为 JSON 字符串

[{"id":value} for value in data] 只是一个列表理解,它创建一个 python 字典列表,其中 "id" 映射到每个值在data数组中

编辑:分页 我不确定分页是否有一些标准,但一个简单的模型是:

"data": {
    "prevPage": "id",
    "nextPage": "id",
    "data": [
       ...
    ]
}

老实说,在 python 中实现它并不难:

data=[ ... ]
currentPage={"pageID":0,"data":[]}
prevPage={"pageID":-1}

pageSize=5

for value in data:
    currentPage["data"].append({"id":value})
    if len(currentPage)==pageSize:
        currentPage["prevPage"]=prevPage["pageID"]
        prevPage["nextPage"]=currentPage["pageID"]
        # add currentPage to some database of pages
        prevPage=currentPage
        currentPage={"pageID":"generate new page id","data":[]}

显然,这不是很完美,但显示了基本概念。

编辑:分页而不存储页面

您当然可以在每次请求时重新创建页面:

def getPage(pageNum)
    #calculate pageStart and pageEnd based on your own requiremnets
    pageStart = (pageNum // 5) * 5
    pageEnd = (pageNum // 5)*5+5
    return [{"id":data[idx] for idx in range(pageStart, pageEnd)}]

关于python - 如何将列表转换为 REST 的分页 JSON 响应?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/44635903/

相关文章:

python - 从 Python 中重写的 dir 方法调用内置 dir

python - 有没有一种方法可以禁用定义 __getitem__ 方法的类的迭代而不对键施加约束?

iphone - 如何将 JSON 数据成功转换为 Objective-C 对象?

python - 如何防止Django的label_tag函数转义标签?

django - AWS Boto3 兼容性问题,如何安装旧版本的 Boto3?

Django+webpack+reactjs : how to generate multiple pages by separate reactjs code for each url

python - 网页抓取 - 网页登录问题

python - Keras 模型未能减少损失

json - 使用go,如何将map[int]T转换为map[string]T以与JSON一起使用?

php - 统计并检查json查询结果