Django中JSONResponse和JSONRenderer之间的区别是什么

时间:2018-08-16 05:22:13

标签: json django django-rest-framework

我所知道的是JSONResponse是具有content_type =“ application / JSON”的HttpResponse JSONRenderer会将python字典数据转换为JSON格式 他们做同样的工作吗?或者它们之间有什么区别。

我已经阅读了JSONParser和JSONRenderer之间的区别,但这并不能真正解决我的问题

1 个答案:

答案 0 :(得分:0)

JSONResponse和JSONRenderer非常相似,并且执行大致相同的操作。两种格式的服务器响应都使用JSON,但是用法不同。

两者都通过使用json.dumps将纯Python数据转换为JSON格式,并将输出发送回客户端。有关代码,请参见JSONRenderer sourceJSONResponse source

就它们的区别而言,通用Django中的view方法应返回JSONResponse,以发送标头为Content-Type: application/json的数据。另一方面,在Django Rest Framework中使用JSONRenderer将序列化的数据格式化为JSON格式,具体取决于接收到的请求中的accept标头。查看Django请求响应文档(https://docs.djangoproject.com/en/2.1/ref/request-response/)或DRF渲染器(http://www.django-rest-framework.org/api-guide/renderers/)上的文档,以获取更多用法。

作为示例,可以像这样使用JSONResponse:

def some_view(request):
    data = get_data()
    return JSONResponse(data)

settings.py中JSONRenderer的用法:

REST_FRAMEWORK = {
    'DEFAULT_RENDERER_CLASSES': (
        'rest_framework.renderers.JSONRenderer', 'rest_framework.renderers.BrowsableAPIRenderer'
    )
}

以上内容将根据请求的accept标头,使用Django Rest Framework以JSON格式呈现路由的响应数据。