mirror of https://github.com/django/django.git
Fixed #25254 -- Added JsonResponse json_dumps_params parameter.
This commit is contained in:
parent
290145e661
commit
d0bd533043
|
@ -492,12 +492,16 @@ class JsonResponse(HttpResponse):
|
||||||
``django.core.serializers.json.DjangoJSONEncoder``.
|
``django.core.serializers.json.DjangoJSONEncoder``.
|
||||||
:param safe: Controls if only ``dict`` objects may be serialized. Defaults
|
:param safe: Controls if only ``dict`` objects may be serialized. Defaults
|
||||||
to ``True``.
|
to ``True``.
|
||||||
|
:param json_dumps_params: A dictionary of kwargs passed to json.dumps().
|
||||||
"""
|
"""
|
||||||
|
|
||||||
def __init__(self, data, encoder=DjangoJSONEncoder, safe=True, **kwargs):
|
def __init__(self, data, encoder=DjangoJSONEncoder, safe=True,
|
||||||
|
json_dumps_params=None, **kwargs):
|
||||||
if safe and not isinstance(data, dict):
|
if safe and not isinstance(data, dict):
|
||||||
raise TypeError('In order to allow non-dict objects to be '
|
raise TypeError('In order to allow non-dict objects to be '
|
||||||
'serialized set the safe parameter to False')
|
'serialized set the safe parameter to False')
|
||||||
|
if json_dumps_params is None:
|
||||||
|
json_dumps_params = {}
|
||||||
kwargs.setdefault('content_type', 'application/json')
|
kwargs.setdefault('content_type', 'application/json')
|
||||||
data = json.dumps(data, cls=encoder)
|
data = json.dumps(data, cls=encoder, **json_dumps_params)
|
||||||
super(JsonResponse, self).__init__(content=data, **kwargs)
|
super(JsonResponse, self).__init__(content=data, **kwargs)
|
||||||
|
|
|
@ -912,7 +912,7 @@ types of HTTP responses. Like ``HttpResponse``, these subclasses live in
|
||||||
JsonResponse objects
|
JsonResponse objects
|
||||||
====================
|
====================
|
||||||
|
|
||||||
.. class:: JsonResponse(data, encoder=DjangoJSONEncoder, safe=True, **kwargs)
|
.. class:: JsonResponse(data, encoder=DjangoJSONEncoder, safe=True, json_dumps_params=None, **kwargs)
|
||||||
|
|
||||||
An :class:`HttpResponse` subclass that helps to create a JSON-encoded
|
An :class:`HttpResponse` subclass that helps to create a JSON-encoded
|
||||||
response. It inherits most behavior from its superclass with a couple
|
response. It inherits most behavior from its superclass with a couple
|
||||||
|
@ -934,6 +934,13 @@ JsonResponse objects
|
||||||
``dict`` instances are allowed). If ``safe`` is ``True`` and a non-``dict``
|
``dict`` instances are allowed). If ``safe`` is ``True`` and a non-``dict``
|
||||||
object is passed as the first argument, a :exc:`TypeError` will be raised.
|
object is passed as the first argument, a :exc:`TypeError` will be raised.
|
||||||
|
|
||||||
|
The ``json_dumps_params`` parameter is a dictionary of keyword arguments
|
||||||
|
to pass to the ``json.dumps()`` call used to generate the response.
|
||||||
|
|
||||||
|
.. versionchanged:: 1.9
|
||||||
|
|
||||||
|
The ``json_dumps_params`` argument was added.
|
||||||
|
|
||||||
Usage
|
Usage
|
||||||
-----
|
-----
|
||||||
|
|
||||||
|
|
|
@ -545,6 +545,10 @@ Requests and Responses
|
||||||
* Added :meth:`HttpRequest.get_port() <django.http.HttpRequest.get_port>` to
|
* Added :meth:`HttpRequest.get_port() <django.http.HttpRequest.get_port>` to
|
||||||
fetch the originating port of the request.
|
fetch the originating port of the request.
|
||||||
|
|
||||||
|
* Added the ``json_dumps_params`` parameter to
|
||||||
|
:class:`~django.http.JsonResponse` to allow passing keyword arguments to the
|
||||||
|
``json.dumps()`` call used to generate the response.
|
||||||
|
|
||||||
Tests
|
Tests
|
||||||
^^^^^
|
^^^^^
|
||||||
|
|
||||||
|
|
|
@ -504,6 +504,10 @@ class JsonResponseTests(SimpleTestCase):
|
||||||
response = JsonResponse({}, encoder=CustomDjangoJSONEncoder)
|
response = JsonResponse({}, encoder=CustomDjangoJSONEncoder)
|
||||||
self.assertEqual(json.loads(response.content.decode()), {'foo': 'bar'})
|
self.assertEqual(json.loads(response.content.decode()), {'foo': 'bar'})
|
||||||
|
|
||||||
|
def test_json_response_passing_arguments_to_json_dumps(self):
|
||||||
|
response = JsonResponse({'foo': 'bar'}, json_dumps_params={'indent': 2})
|
||||||
|
self.assertEqual(response.content.decode(), '{\n "foo": "bar"\n}')
|
||||||
|
|
||||||
|
|
||||||
class StreamingHttpResponseTests(SimpleTestCase):
|
class StreamingHttpResponseTests(SimpleTestCase):
|
||||||
def test_streaming_response(self):
|
def test_streaming_response(self):
|
||||||
|
|
Loading…
Reference in New Issue