@permission_classes((AllowAny, ))
class Viewset(viewsets.ViewSet):
renderer_classes = (JSONRenderer, )
def list(self, request, *args, **kwargs):
return Response()
有效的 json 响应正文,例如null
或{}
没有设置Content-Type
标头并返回空响应 - 在使用 jquery 的ajax()
发出请求时尤其痛苦。 它抛出一个 parseerror 并拒绝一个空主体的成功响应的承诺。 见这里https://stackoverflow.com/a/6186905
公关在这里: https :
只是一个快速的澄清.. 我可能不会重新创建您的确切设置,但快速的手动测试表明Content-Type
标头已正确设置为application/json
。
至于空洞的回应,我倾向于同意@kltdwrds。 我不知道规范是否允许空正文,但是,JavaScript 的JSON.parse
和 Python 的json.loads
无法解码空字符串。
也就是说, data=None
应该被编码为null
。
再想一想,当前的行为是有道理的。 尽管JSON.parse
和json.loads
确实失败了,但客户端有责任在解析之前检查内容类型。 如果有的话,这是 jQuery 中的一个错误。
嗯我正在使用
from rest_framework import viewsets
from rest_framework.renderers import JSONRenderer
from rest_framework.response import Response
不确定Content-Type
标头的设置位置,但我刚刚使用上面的示例确认它从响应中丢失。
看起来Content-Type
标头在空渲染器响应中被删除(第 80 行)
https://github.com/encode/django-rest-framework/blob/master/rest_framework/response.py#L72
我们当前对return Response()
是有意的。 虽然返回null
也是有效的,但更典型的情况是我们需要一种方法来返回没有内容类型的空响应。 我可能宁愿我们暂时保持现状。
最有用的评论
看起来
Content-Type
标头在空渲染器响应中被删除(第 80 行)https://github.com/encode/django-rest-framework/blob/master/rest_framework/response.py#L72