JsonResponse源码分析

发布时间 2023-11-29 15:10:45作者: wellplayed

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