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