django 返回列表+分页注意事项

来源:互联网 发布:淘宝怎么有苏宁易购 编辑:程序博客网 时间:2024/05/29 12:35
# 添加服务描述记录
@api_view(['POST'])
@csrf_exempt
def get_server_desc_log(request):
if request.method == 'POST':
# 区分服务类型
if 'server_type'in request.data:
server_type = request.data['server_type']
if server_type == '':
server_type = 'all'
else:
server_type = 'all'
# 区分产品渠道
if 'product_channel'in request.data:
product_channel = request.data['product_channel']
if product_channel == '':
product_channel == 'all'
else:
product_channel = 'all'
# 区分服务描述
if 'server_desc_key_word'in request.data:
server_desc_key_word = request.data['server_desc_key_word']
else:
server_desc_key_word = ''
if server_type == 'all' and product_channel == 'all':
server_desc_log_list = NemoServerDescLog.objects.filter(server_desc__contains=server_desc_key_word)
elif server_type != 'all' and product_channel == 'all':
server_desc_log_list = NemoServerDescLog.objects.filter(server_type=server_type,server_desc__contains=server_desc_key_word)
elif server_type == 'all' and product_channel != 'all':
server_desc_log_list = NemoServerDescLog.objects.filter(product_channel=product_channel,server_desc__contains=server_desc_key_word)
else:
#if server_type != 'all' and product_channel != 'all'
server_desc_log_list = NemoServerDescLog.objects.filter(product_channel=product_channel,server_type=server_type,server_desc__contains=server_desc_key_word)
if 'limit'in request.data:
limit = request.data['limit']
else:
limit = '10'
if 'page'in request.data:
page = request.data['page']
else:
page = '1'
paginator = Paginator(server_desc_log_list, limit) # Show 25 contacts per page
print("paginator-************************************")
print(str(paginator.object_list))
print("paginator-************************************")
try:
server_desc_log = paginator.page(page)
print("server_desc_log-**************1**********************")
print(server_desc_log.object_list)
print("server_desc_log-***************1*********************")
log_print("查询成功")
body = {
'data':{
'max_page':paginator.num_pages,
'server_desc_log_list':NemoServerDescLogSerializers(server_desc_log.object_list,many=True).data,
},
'error':'000000',
'msg':"查询成功",
}
rsp = Response(body, status=status.HTTP_200_OK)
except PageNotAnInteger:
# If page is not an integer, deliver first page.
server_desc_log = paginator.page(1)
log_print("页码不合法返回第 1 页数据")
body = {
'data':{
'max_page':paginator.num_pages,
'server_desc_log_list':NemoServerDescLogSerializers(server_desc_log.object_list,many=True).data,
},
'error':'000000',
'msg':"查询成功",
}
rsp = Response(body, status=status.HTTP_200_OK)
except EmptyPage:
# If page is out of range (e.g. 9999), deliver last page of results.
server_desc_log = paginator.page(paginator.num_pages)

log_print("页码超界返回最后一页数据")
body = {
'data':{
'max_page':paginator.num_pages,
'server_desc_log_list':NemoServerDescLogSerializers(server_desc_log.object_list,many=True).data,
},
'error':'000000',
'msg':"查询成功",
}
rsp = Response(body, status=status.HTTP_200_OK)
except Exceptionas e:
# If page is out of range (e.g. 9999), deliver last page of results.
log_print("查询 server_desc_log 发生异常:" + str(e))
body = {
'data':{
'max_page':'0',
'server_desc_log_list':[],
},
'error':'400001',
'msg':"查询 server_desc_log 发生异常:" +str(e),
}
rsp = Response(body, status=status.HTTP_500_INTERNAL_SERVER_ERROR)
return rsp

序列化器的文件:
from .nemo_models import NemoServerDescLog
from rest_framework import serializers

class NemoServerDescLogSerializers(serializers.ModelSerializer):
product_channel = serializers.CharField(max_length=40)
server_name = serializers.CharField(max_length=40)
server_desc = serializers.CharField()
server_type = serializers.CharField(max_length=40)
create_time = serializers.DateTimeField()
create_user_id= serializers.CharField(max_length=40)
class Meta:
model = NemoServerDescLog
fields = ('product_channel','server_name','server_desc','server_type','create_time','create_user_id')