From 1ce894d347fc77dc3da4145bff08d033017bd52e Mon Sep 17 00:00:00 2001 From: Grey Panther Date: Thu, 13 Oct 2016 14:12:52 +0300 Subject: [PATCH] Serialize None as valid JSON --- rest_framework/renderers.py | 5 ++++- rest_framework/response.py | 7 ++++--- tests/test_renderers.py | 4 ++++ 3 files changed, 12 insertions(+), 4 deletions(-) diff --git a/rest_framework/renderers.py b/rest_framework/renderers.py index 97984daf9..7a26b4409 100644 --- a/rest_framework/renderers.py +++ b/rest_framework/renderers.py @@ -51,6 +51,9 @@ class BaseRenderer(object): raise NotImplementedError('Renderer class requires .render() to be implemented') +_NULL_JSON = bytes('null'.encode('ascii')) + + class JSONRenderer(BaseRenderer): """ Renderer which serializes to JSON. @@ -87,7 +90,7 @@ class JSONRenderer(BaseRenderer): Render `data` into JSON, returning a bytestring. """ if data is None: - return bytes() + return _NULL_JSON renderer_context = renderer_context or {} indent = self.get_indent(accepted_media_type, renderer_context) diff --git a/rest_framework/response.py b/rest_framework/response.py index cb0f290ce..204660f5a 100644 --- a/rest_framework/response.py +++ b/rest_framework/response.py @@ -77,10 +77,11 @@ class Response(SimpleTemplateResponse): ) return bytes(ret.encode(charset)) - if not ret: + if self.status_code == 204: del self['Content-Type'] - - return ret + return bytes() + else: + return ret @property def status_text(self): diff --git a/tests/test_renderers.py b/tests/test_renderers.py index a2620e93c..7b2081a1d 100644 --- a/tests/test_renderers.py +++ b/tests/test_renderers.py @@ -360,6 +360,10 @@ class JSONRendererTests(TestCase): content = renderer.render(obj, 'application/json; indent=2') self.assertEqual(strip_trailing_whitespace(content.decode('utf-8')), _indented_repr) + def test_none(self): + ret = JSONRenderer().render(None) + self.assertEqual(None, json.loads(ret)) + class UnicodeJSONRendererTests(TestCase): """