From 4d817b38875c900d70793acd528afc9e954bbcb7 Mon Sep 17 00:00:00 2001 From: Sean Breant Date: Fri, 9 Nov 2012 21:07:53 +0100 Subject: [PATCH] Fixed #19262 -- Support cookie pickling in SimpleTemplateResponse Refs #15863. --- django/template/response.py | 2 +- tests/regressiontests/templates/response.py | 15 +++++++++++++++ 2 files changed, 16 insertions(+), 1 deletion(-) diff --git a/django/template/response.py b/django/template/response.py index 2cb44d127d2..3b3b41331a9 100644 --- a/django/template/response.py +++ b/django/template/response.py @@ -40,7 +40,7 @@ class SimpleTemplateResponse(HttpResponse): rendered, and that the pickled state only includes rendered data, not the data used to construct the response. """ - obj_dict = self.__dict__.copy() + obj_dict = super(SimpleTemplateResponse, self).__getstate__() if not self._is_rendered: raise ContentNotRenderedError('The response content must be ' 'rendered before it can be pickled.') diff --git a/tests/regressiontests/templates/response.py b/tests/regressiontests/templates/response.py index 93919b95cda..a2a76a3310a 100644 --- a/tests/regressiontests/templates/response.py +++ b/tests/regressiontests/templates/response.py @@ -189,6 +189,21 @@ class SimpleTemplateResponseTest(TestCase): unpickled_response = pickle.loads(pickled_response) repickled_response = pickle.dumps(unpickled_response) + def test_pickling_cookie(self): + response = SimpleTemplateResponse('first/test.html', { + 'value': 123, + 'fn': datetime.now, + }) + + response.cookies['key'] = 'value' + + response.render() + pickled_response = pickle.dumps(response, pickle.HIGHEST_PROTOCOL) + unpickled_response = pickle.loads(pickled_response) + + self.assertEqual(unpickled_response.cookies['key'].value, 'value') + + @override_settings( TEMPLATE_CONTEXT_PROCESSORS=[test_processor_name], TEMPLATE_DIRS=(os.path.join(os.path.dirname(__file__),'templates')),