From 2cbc426b9bfd9abf223a441b4636930e1a8250e7 Mon Sep 17 00:00:00 2001 From: Stephan Doliov Date: Sat, 3 Feb 2018 16:14:53 -0800 Subject: [PATCH] allowing a new named arg, drf_cookies to the response.Response object so that multiple cookies can be set from within an APIView class --- rest_framework/response.py | 9 ++++++++- 1 file changed, 8 insertions(+), 1 deletion(-) diff --git a/rest_framework/response.py b/rest_framework/response.py index bf0663255..07db69e90 100644 --- a/rest_framework/response.py +++ b/rest_framework/response.py @@ -21,7 +21,7 @@ class Response(SimpleTemplateResponse): def __init__(self, data=None, status=None, template_name=None, headers=None, - exception=False, content_type=None): + exception=False, content_type=None, drf_cookies=None): """ Alters the init arguments slightly. For example, drop 'template_name', and instead use 'data'. @@ -48,6 +48,13 @@ class Response(SimpleTemplateResponse): for name, value in six.iteritems(headers): self[name] = value + if drf_cookies: + # don't assume rest framework is the innermost handler in the pipeline + # so don't clobber other cookies that might already have been set + # otherwise self.cookies = drf_cookies would have sufficed + for c in drf_cookies: + self.cookies[c] = drf_cookies[c].copy() + @property def rendered_content(self): renderer = getattr(self, 'accepted_renderer', None)