diff options
| author | Tom Carrick <tom@carrick.eu> | 2020-09-15 12:43:37 +0200 |
|---|---|---|
| committer | Mariusz Felisiak <felisiak.mariusz@gmail.com> | 2020-10-07 09:19:57 +0200 |
| commit | dcb69043d0de45bb55998fc418d93c28bc7689ae (patch) | |
| tree | ac58b959d8b749965841721e6cc2a58784bb51c3 /docs | |
| parent | 2e7cc95499f758a1c4aa036cbf1dcddf82a89ea2 (diff) | |
Fixed #32002 -- Added headers parameter to HttpResponse and subclasses.
Diffstat (limited to 'docs')
| -rw-r--r-- | docs/howto/outputting-csv.txt | 21 | ||||
| -rw-r--r-- | docs/ref/request-response.txt | 30 | ||||
| -rw-r--r-- | docs/ref/template-response.txt | 18 | ||||
| -rw-r--r-- | docs/releases/3.2.txt | 5 | ||||
| -rw-r--r-- | docs/topics/class-based-views/index.txt | 7 |
5 files changed, 60 insertions, 21 deletions
diff --git a/docs/howto/outputting-csv.txt b/docs/howto/outputting-csv.txt index dc3cf57cfd..0026d0293a 100644 --- a/docs/howto/outputting-csv.txt +++ b/docs/howto/outputting-csv.txt @@ -20,8 +20,10 @@ Here's an example:: def some_view(request): # Create the HttpResponse object with the appropriate CSV header. - response = HttpResponse(content_type='text/csv') - response.headers['Content-Disposition'] = 'attachment; filename="somefilename.csv"' + response = HttpResponse( + content_type='text/csv', + headers={'Content-Disposition': 'attachment; filename="somefilename.csv"'}, + ) writer = csv.writer(response) writer.writerow(['First row', 'Foo', 'Bar', 'Baz']) @@ -86,10 +88,11 @@ the assembly and transmission of a large CSV file:: rows = (["Row {}".format(idx), str(idx)] for idx in range(65536)) pseudo_buffer = Echo() writer = csv.writer(pseudo_buffer) - response = StreamingHttpResponse((writer.writerow(row) for row in rows), - content_type="text/csv") - response.headers['Content-Disposition'] = 'attachment; filename="somefilename.csv"' - return response + return StreamingHttpResponse( + (writer.writerow(row) for row in rows), + content_type="text/csv", + headers={'Content-Disposition': 'attachment; filename="somefilename.csv"'}, + ) Using the template system ========================= @@ -108,8 +111,10 @@ Here's an example, which generates the same CSV file as above:: def some_view(request): # Create the HttpResponse object with the appropriate CSV header. - response = HttpResponse(content_type='text/csv') - response.headers['Content-Disposition'] = 'attachment; filename="somefilename.csv"' + response = HttpResponse( + content_type='text/csv' + headers={'Content-Disposition': 'attachment; filename="somefilename.csv"'}, + ) # The data is hard-coded here, but you could load it from a database or # some other source. diff --git a/docs/ref/request-response.txt b/docs/ref/request-response.txt index 8dae4455a2..17aebf2317 100644 --- a/docs/ref/request-response.txt +++ b/docs/ref/request-response.txt @@ -724,6 +724,10 @@ by ``HttpResponse``. When using this interface, unlike a dictionary, ``del`` doesn't raise ``KeyError`` if the header field doesn't exist. +You can also set headers on instantiation:: + + >>> response = HttpResponse(headers={'Age': 120}) + For setting the ``Cache-Control`` and ``Vary`` header fields, it is recommended to use the :func:`~django.utils.cache.patch_cache_control` and :func:`~django.utils.cache.patch_vary_headers` methods from @@ -738,15 +742,19 @@ containing a newline character (CR or LF) will raise ``BadHeaderError`` The :attr:`HttpResponse.headers` interface was added. + The ability to set headers on instantiation was added. + Telling the browser to treat the response as a file attachment ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ -To tell the browser to treat the response as a file attachment, use the -``content_type`` argument and set the ``Content-Disposition`` header. For example, -this is how you might return a Microsoft Excel spreadsheet:: +To tell the browser to treat the response as a file attachment, set the +``Content-Type`` and ``Content-Disposition`` headers. For example, this is how +you might return a Microsoft Excel spreadsheet:: - >>> response = HttpResponse(my_data, content_type='application/vnd.ms-excel') - >>> response.headers['Content-Disposition'] = 'attachment; filename="foo.xls"' + >>> response = HttpResponse(my_data, headers={ + ... 'Content-Type': 'application/vnd.ms-excel', + ... 'Content-Disposition': 'attachment; filename="foo.xls"', + ... }) There's nothing Django-specific about the ``Content-Disposition`` header, but it's easy to forget the syntax, so we've included it here. @@ -802,10 +810,10 @@ Attributes Methods ------- -.. method:: HttpResponse.__init__(content=b'', content_type=None, status=200, reason=None, charset=None) +.. method:: HttpResponse.__init__(content=b'', content_type=None, status=200, reason=None, charset=None, headers=None) - Instantiates an ``HttpResponse`` object with the given page content and - content type. + Instantiates an ``HttpResponse`` object with the given page content, + content type, and headers. ``content`` is most commonly an iterator, bytestring, :class:`memoryview`, or string. Other types will be converted to a bytestring by encoding their @@ -829,6 +837,12 @@ Methods given it will be extracted from ``content_type``, and if that is unsuccessful, the :setting:`DEFAULT_CHARSET` setting will be used. + ``headers`` is a :class:`dict` of HTTP headers for the response. + + .. versionchanged:: 3.2 + + The ``headers`` parameter was added. + .. method:: HttpResponse.__setitem__(header, value) Sets the given header name to the given value. Both ``header`` and diff --git a/docs/ref/template-response.txt b/docs/ref/template-response.txt index decf055660..52802f5bd1 100644 --- a/docs/ref/template-response.txt +++ b/docs/ref/template-response.txt @@ -57,7 +57,7 @@ Attributes Methods ------- -.. method:: SimpleTemplateResponse.__init__(template, context=None, content_type=None, status=None, charset=None, using=None) +.. method:: SimpleTemplateResponse.__init__(template, context=None, content_type=None, status=None, charset=None, using=None, headers=None) Instantiates a :class:`~django.template.response.SimpleTemplateResponse` object with the given template, context, content type, HTTP status, and @@ -90,6 +90,13 @@ Methods The :setting:`NAME <TEMPLATES-NAME>` of a template engine to use for loading the template. + ``headers`` + A :class:`dict` of HTTP headers to add to the response. + + .. versionchanged:: 3.2 + + The ``headers`` parameter was added. + .. method:: SimpleTemplateResponse.resolve_context(context) Preprocesses context data that will be used for rendering a template. @@ -149,7 +156,7 @@ Methods Methods ------- -.. method:: TemplateResponse.__init__(request, template, context=None, content_type=None, status=None, charset=None, using=None) +.. method:: TemplateResponse.__init__(request, template, context=None, content_type=None, status=None, charset=None, using=None, headers=None) Instantiates a :class:`~django.template.response.TemplateResponse` object with the given request, template, context, content type, HTTP status, and @@ -185,6 +192,13 @@ Methods The :setting:`NAME <TEMPLATES-NAME>` of a template engine to use for loading the template. + ``headers`` + A :class:`dict` of HTTP headers to add to the response. + + .. versionchanged:: 3.2 + + The ``headers`` parameter was added. + The rendering process ===================== diff --git a/docs/releases/3.2.txt b/docs/releases/3.2.txt index 4987423ff3..d82c9c719a 100644 --- a/docs/releases/3.2.txt +++ b/docs/releases/3.2.txt @@ -332,6 +332,11 @@ Requests and Responses Both interfaces will continue to be supported. See :ref:`setting-header-fields` for details. +* The new ``headers`` parameter of :class:`~django.http.HttpResponse`, + :class:`~django.template.response.SimpleTemplateResponse`, and + :class:`~django.template.response.TemplateResponse` allows setting response + :attr:`~django.http.HttpResponse.headers` on instantiation. + Security ~~~~~~~~ diff --git a/docs/topics/class-based-views/index.txt b/docs/topics/class-based-views/index.txt index 8874545469..01f9c35460 100644 --- a/docs/topics/class-based-views/index.txt +++ b/docs/topics/class-based-views/index.txt @@ -117,9 +117,10 @@ And the view:: def head(self, *args, **kwargs): last_book = self.get_queryset().latest('publication_date') - response = HttpResponse() - # RFC 1123 date format - response.headers['Last-Modified'] = last_book.publication_date.strftime('%a, %d %b %Y %H:%M:%S GMT') + response = HttpResponse( + # RFC 1123 date format. + headers={'Last-Modified': last_book.publication_date.strftime('%a, %d %b %Y %H:%M:%S GMT')}, + ) return response If the view is accessed from a ``GET`` request, an object list is returned in |
