列表页接口实现
发起GET请求,通过查询字符串http://url/posts/?page=2 查询第二页数据
实现过程
request: GET ?page=5&size=20-> 视图 get -> json 文章列表
# post/views.py
class PostView(View): # 不需要装饰器决定方法了
def get(self, request:HttpRequest): # 获取全体文章走这里
print('get ~~~~~~~~~~~~~~~~~')
try:
posts = Post.objects.order_by('-pk')
print(posts.query)
return JsonResponse({
'posts':[
jsonify(post, allow=['id', 'title'])
for post in posts
]
})
except Exception as e:
print(e)
return HttpResponse(status=400)
进一步完整分页功能
GET /posts/?page=3&size=20 文章列表页,视图类PostView
响应
200 成功返回文章列表
class PostView(View):#不需要装饰器决定方法
def get(self,request:HttpRequest):#获取全体文章
try:
page=int(request.GET.get('page',1))
page=page if page>0 else 1
except:
page=1
try:
size=int(request.GET.get('size',20))
size=size if size>0 and size<101 else 20
except:
size=20
try:
start=(page-1)*size
posts=Post.objects.order_by('-pk')
total=posts.count()
posts=posts[start:start+size]
return JsonResponse({
'posts':[
jsonify(post,allow=['id','title'])
for post in posts
],
'pagination':{
'page':page,
'size':size,
'total':total,
'pages':math.ceil(total/size)
}
})
except Exception as e:
return HttpResponse(status=400)