JsonResponse源码分析
1.视图层返回JsonResponse
return JsonResponse({'name':'kevin','age':19})
2.触发 JsonResponse 的__init__方法
将{'name':'kevin','age':19}传给data
3.源码分析
def __init__(self, data, encoder=DjangoJSONEncoder, safe=True,json_dumps_params=None, **kwargs):
# 如果传入的是字典
# safe是True,后面是False,条件不符合,内部就不会走,就会抛出异常
# 将safe改为False,就可以传入列表了
if safe and not isinstance(data, dict):
raise TypeError(
'In order to allow non-dict objects to be serialized set the '
'safe parameter to False.'
)
if json_dumps_params is None: # 条件符合
json_dumps_params = {}
# kwargs是字典---》setdefault--》有则修改,无则新增
kwargs.setdefault('content_type', 'application/json')
# 核心---》把字典转成json格式字符串,赋值给data
data = json.dumps(data, cls=encoder, **json_dumps_params)
# super().__init__ 调用父类的 __init__ 完成实例化---》父类:HttpResponse的对象
return HttpResponse(data,**kwargs)
super().__init__(content=data, **kwargs)
补充:
# isinstance
-使用方法:isinstance(对象, 类) # 判断这个对象,是不是这个类中的对象
# 返回True或False

浙公网安备 33010602011771号