mirror of
				https://github.com/django/django.git
				synced 2025-10-31 09:41:08 +00:00 
			
		
		
		
	Fixed #25254 -- Added JsonResponse json_dumps_params parameter.
This commit is contained in:
		
				
					committed by
					
						 Tim Graham
						Tim Graham
					
				
			
			
				
	
			
			
			
						parent
						
							290145e661
						
					
				
				
					commit
					d0bd533043
				
			| @@ -492,12 +492,16 @@ class JsonResponse(HttpResponse): | ||||
|       ``django.core.serializers.json.DjangoJSONEncoder``. | ||||
|     :param safe: Controls if only ``dict`` objects may be serialized. Defaults | ||||
|       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): | ||||
|             raise TypeError('In order to allow non-dict objects to be ' | ||||
|                 'serialized set the safe parameter to False') | ||||
|         if json_dumps_params is None: | ||||
|             json_dumps_params = {} | ||||
|         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) | ||||
|   | ||||
| @@ -912,7 +912,7 @@ types of HTTP responses. Like ``HttpResponse``, these subclasses live in | ||||
| 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 | ||||
|     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`` | ||||
|     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 | ||||
| ----- | ||||
|  | ||||
|   | ||||
| @@ -545,6 +545,10 @@ Requests and Responses | ||||
| * Added :meth:`HttpRequest.get_port() <django.http.HttpRequest.get_port>` to | ||||
|   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 | ||||
| ^^^^^ | ||||
|  | ||||
|   | ||||
| @@ -504,6 +504,10 @@ class JsonResponseTests(SimpleTestCase): | ||||
|         response = JsonResponse({}, encoder=CustomDjangoJSONEncoder) | ||||
|         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): | ||||
|     def test_streaming_response(self): | ||||
|   | ||||
		Reference in New Issue
	
	Block a user