【摘要】
两个模块都是用于返回数据给前端的,但是在返回数据的时候存在一些细小的差别。为了展示,这里使用单文件的django来进行操作。
【正文】
首先附上单文件django(test1.py)的源码:
# coding:utf-8
# Data:2019/3/20
from django.conf import settings
from django.http import HttpResponse,
JsonResponse
from django.conf.urls import url
import json
setting = {
'DEBUG': True,
'ROOT_URLCONF': __name__ # 指定根路由为当前文件里的路由
}
settings.configure(**setting)
def home(request):
return HttpResponse("Hello world!")
urlpatterns = [
url('^$', home)
]
if __name__ == '__main__':
import sys
from django.core.management import execute_from_command_line
execute_from_command_line(sys.argv)
开启项目:
python
test1.py runserver
效果图:
上面的结果可以看出,使用HttpResponse返回的内容类型是:text/html,如果要返回json数据,需要使用json模块和将content_type 设置为application/json,只使用json模块是不行的,返回的数据还是text/html:
return
HttpResponse(json.dumps({"result": True, "message":
"OK"}), content_type="application/json")
效果图:
如果使用JsonResponse可以省去一些设置,直接返回json数据:
return
JsonResponse({"result": True, "message": "OK"})
效果图:
JsonResponse还可以返回非字典类型的数据,例如:列表。不过要进行设置:
return
JsonResponse(['a', 'b', 'v'], safe=False)
效果图:
JsonResponse源码如下:
class
JsonResponse(HttpResponse):
def
__init__(self, data, encoder=DjangoJSONEncoder, safe=True,
json_dumps_params=None,
**kwargs):
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('content_type',
'application/json')
data
= json.dumps(data, cls=encoder, **json_dumps_params)
super(JsonResponse,
self).__init__(content=data, **kwargs)
从源码可以看出JsonResponse是在HttpResponse的基础上进行封装,使用json模块进行格式转换,并设置content_type为application/json。