本文主要是介绍Backend - Django JsonResponse HttpResponse,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!
目录
一、关系
二、使用
(一)data 字典传值
1. HttpResponse
(1)写法
(2)前端接收 HttpResponse 回传的值
2. JsonResponse
(1)写法
(2)前端接收 JsonResponse 回传的值
3. 特殊数据类型的处理
4. 例子
(二)JsonResponse 有一个 safe 参数
1. safe 作用
2. 若报错:TypeError: In order to allow non-dict objects to be serialized set the safe parameter to False
(1)原因
(2)解决
一、关系
JsonResponse 是 HttpResponse 的一个子类。
从1.7版本开始,Django使用内置JsonResponse类。
二、使用
(一)data 字典传值
1. HttpResponse
(1)写法
HttpResponse 的 content 参数值必须是引号包裹的字符串。
比如,若 data 参数值是个对象(字典),则用 json.dumps 将 data 值转成JSON字串。
# HttpResponse
import json
return HttpResponse(json.dumps(mydict))
(2)前端接收 HttpResponse 回传的值
因为,HttpResponse传的值是通过json处理后的字串格式。所以,前端ajax收到的data是json字串格式,需要用JSON.parse(data)处理,去除json字串。
2. JsonResponse
(1)写法
JsonResponse 的 data 参数可以是个对象(字典)。
# JsonResponse
from django.http import JsonResponse
return JsonResponse(mydict)
(2)前端接收 JsonResponse 回传的值
因为,JsonResponse传的值是字典,没有经过json处理。所以,前端可以不用JSON.parse(data)处理,直接使用。
3. 特殊数据类型的处理
若是queryset类型的列表,可以先利用列表生成式转换成阵列,再传给前端。
# JsonResponse
from django.http import JsonResponse
myqst = models.Book.objects.filter(booktype='文艺类').values_list('name', flat=True)
mylist = [m for m in myqst]
return JsonResponse(mylist)
4. 例子
import json
from django.http import JsonResponse
data= {'name': '萝卜干'}# 第一种
HttpResponse(json.dumps(data), content_type='application/json') # 第一个参数位置,默认是content的参数值,第二个位置需要指定是什么参数的值,比如content_type=XXX# 第二种(几乎等价于第一种)
JsonResponse(data) # 默认的content_type='application/json'
json相关知识可参考另一篇文章:Backend - Python 序列化-CSDN博客
(二)JsonResponse 有一个 safe 参数
1. safe 作用
默认为 True,控制JsonResponse中只有dict对象可以序列化。
2. 若报错:TypeError: In order to allow non-dict objects to be serialized set the safe parameter to False
(1)原因
JsonResponse中的safe参数为True,要求data值类型必须为字典,若非字典则抛出一个 TypeError 类型错误。
(2)解决
方法① 传data参数为字典类型。
方法② 若想传列表List类型等,则设置参数safe=False。如下面代码:
return JsonResponse(result)
# 改为:
return JsonResponse(result, safe=False)
这篇关于Backend - Django JsonResponse HttpResponse的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!