八卦岭网站建设,设计图案大全图片,欧美网站模板 psd,旅游网站系统设计与开发目录 遇到问题 Django返回json结构报文 不可行方式python json 可行方式JsonResponseQuerySet.values()。 python的两个web框架#xff0c;flask和django#xff0c;两者都具有view 模板的章节#xff0c;但是当前开发一个应用#xff0c;大部分采用前后端分离的合作方式。… 目录 遇到问题 Django返回json结构报文 不可行方式python json 可行方式JsonResponseQuerySet.values()。 python的两个web框架flask和django两者都具有view 模板的章节但是当前开发一个应用大部分采用前后端分离的合作方式。因此必然面对的一个事情就是接口返回json格式的数据报文。本文就是针对这个事情进行了阐述遵从了从问题产生到方案选择的过程。 遇到问题 如下为使用Django的序列化器得到的json格式数据可以很明显的发现这个格式和理想的fieldName:fieldData形式存在较大的差异。 serializers.serialize(json, instance)[{model: polls.question,pk: 1,fields: {question_text: xxxxxxxxxxx?,pub_date: 2023-07-25T07:05:08Z}
}, {model: polls.question,pk: 2,fields: {question_text: 啊啊啊啊啊,pub_date: 2023-07-27T02:00:59Z}
}]Django返回json结构报文 通过这个问题引出了本文要做的事情在Django接口中如何将数据模型实例转换为常规的json格式并返回。 不可行方式python json dumps会出现序列化异常Object of type xxxxx is not JSON serializable。 可行方式JsonResponseQuerySet.values()。 values()返回由一系列字典实例构成的QuerySet。下面对比下使用和不使用values()得到的QuerySet有什么区别。 # 由模型对象构成.Blog.objects.filter(name__startswithBeatles)
QuerySet [Blog: Beatles Blog]# 由字典构成.Blog.objects.filter(name__startswithBeatles).values()
QuerySet [{id: 1, name: Beatles Blog, tagline: All the latest Beatles news.}]JsonResponse作为HttpResponse的子类对返回数据进行json编码。 接下来是简单代码样例 定义一个APIResult class class APIResult(dict):def __init__(self, data):self[code] 200if isinstance(data, dict):print(data is dict)self[data] dataelif isinstance(data, list):print(data is list)self[data] dataelse:print(data is not dict or list)self[data] list(data)返回模型实例列表 def question_list(request):query_set Question.objects.all()[:5]result APIResult(dataquery_set.values())return JsonResponse(result, safeFalse){code: 200,data: [{id: 1,question_text: xxxxxxxxxxx?,pub_date: 2023-07-25T07:05:08Z}, {id: 2,question_text: \u554a\u554a\u554a\u554a\u554a,pub_date: 2023-07-27T02:00:59Z}]
}返回具体实例 def question_detail(request, question_id):try:query_set Question.objects.filter(pkquestion_id)except Question.DoesNotExist:raise Http404(No question) result APIResult(dataquery_set.values()[0])return JsonResponse(result){code: 200,data: {id: 1,question_text: xxxxxxxxxxx?,pub_date: 2023-07-25T07:05:08Z}
}如果你对返回哪些字段有要求可以向values()传入具体字段名如values(id)。 {code: 200, data: [{id: 1}, {id: 2}]}