【问题标题】:What is diffrence bwtween JSONResponse and JSONRenderer in DjangoDjango中的JSON响应和JSON渲染器有什么区别
【发布时间】:2019-01-23 00:03:31
【问题描述】:
我所知道的是 JSONResponse 是带有 content_type="application/JSON" 的 HttpResponse
而 JSONRenderer 会将 python 字典数据转换为 JSON 格式
他们做同样的工作吗?或者它们之间有什么区别。
我已经阅读了 JSONParser 和 JSONRenderer 之间的区别,这并不能真正解决我的问题
【问题讨论】:
标签:
json
django
django-rest-framework
【解决方案1】:
JSONResponse 和 JSONRenderer 非常相似,并且执行的操作基本相同。两者都以 JSON 格式格式化服务器响应,但它们的用法不同。
两者都通过使用 json.dumps 将纯 Python 数据转换为 JSON 格式,并将输出发送回客户端。代码见JSONRenderer source和JSONResponse source。
就它们的区别而言,JSONResponse 应该由通用 Django 中的视图方法返回,以发送带有标头 Content-Type: application/json 的数据。另一方面,JSONRenderer 在 Django Rest Framework 中用于根据接收到的请求中的 accept 标头将序列化数据格式化为 JSON 格式。查看有关 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 标头以 JSON 格式呈现使用 Django Rest Framework 的路由响应数据。