Fixed #19262 -- Support cookie pickling in SimpleTemplateResponse

Refs #15863.
This commit is contained in:
Sean Breant 2012-11-09 21:07:53 +01:00 committed by Claude Paroz
parent 1b307d6c8f
commit 4d817b3887
2 changed files with 16 additions and 1 deletions

View File

@ -40,7 +40,7 @@ class SimpleTemplateResponse(HttpResponse):
rendered, and that the pickled state only includes rendered rendered, and that the pickled state only includes rendered
data, not the data used to construct the response. 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: if not self._is_rendered:
raise ContentNotRenderedError('The response content must be ' raise ContentNotRenderedError('The response content must be '
'rendered before it can be pickled.') 'rendered before it can be pickled.')

View File

@ -189,6 +189,21 @@ class SimpleTemplateResponseTest(TestCase):
unpickled_response = pickle.loads(pickled_response) unpickled_response = pickle.loads(pickled_response)
repickled_response = pickle.dumps(unpickled_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( @override_settings(
TEMPLATE_CONTEXT_PROCESSORS=[test_processor_name], TEMPLATE_CONTEXT_PROCESSORS=[test_processor_name],
TEMPLATE_DIRS=(os.path.join(os.path.dirname(__file__),'templates')), TEMPLATE_DIRS=(os.path.join(os.path.dirname(__file__),'templates')),