2017-06-19 58 views
1

我是Django REST Framework的新手,我遇到了一个问题。如何将列表转换为REST的分页JSON响应?

我正在为社交应用程序构建后端。任务是将分页的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"}, ...]} 

的问题是:如何进行分页这样的反应?

任何输入是高度赞赏!

此致敬礼, 阿列克谢。

+0

您使用串行? –

+0

@ arpit-solanki不,我不知道。 –

回答

3

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)需要obj,Python对象,并将其序列化为JSON字符串

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

编辑:分页 我不知道是否有在分页一些标准,但一个简单的模型应该是:

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

老实说,实现在蟒蛇不会那么难:

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)}] 
+0

非常感谢您的回复!你对分页有什么建议? –

+0

@ArpitSolanki问题在答案发布后被编辑,答案现在已更新 – AJC

+0

@AlexeyKislitsin答案已被编辑以解释分页 – AJC