Opened 11 years ago
Last modified 11 years ago
#24598 closed Bug
JsonResponse loses encoding support in Content-Type header — at Initial Version
| Reported by: | Curtis Maloney | Owned by: | nobody |
|---|---|---|---|
| Component: | HTTP handling | Version: | 1.8 |
| Severity: | Normal | Keywords: | |
| Cc: | Triage Stage: | Unreviewed | |
| Has patch: | yes | Needs documentation: | yes |
| Needs tests: | yes | Patch needs improvement: | no |
| Easy pickings: | no | UI/UX: | no |
Description
By default when a content_type is not passed to HttpResponse it will create one from settings.DEFAULT_CONTENT_TYPE, and attach the encoding.
So, when unspecified, the header will appear as:
Content-Type: text/html; encoding=utf-8
However, if you specify the content_type, this action is no taken.
That's understandable in a "consenting adults" context, however the JsonResponse sets content_type using kwargs.setdefault, thus forcing the loss of encoding annotation in all responses.
I propose instead that HttpResponseBase check for a default_content_type property to override settings.DEFAULT_CONTENT_TYPE, thus:
diff --git a/django/http/response.py b/django/http/response.py
index c8d6930..40186b5 100644
--- a/django/http/response.py
+++ b/django/http/response.py
@@ -54,8 +54,8 @@ class HttpResponseBase(six.Iterator):
self._reason_phrase = reason
self._charset = charset
if content_type is None:
- content_type = '%s; charset=%s' % (settings.DEFAULT_CONTENT_TYPE,
- self.charset)
+ content_type = getattr(self, 'default_content_type', settings.DEFAULT_CONTENT_TYPE)
+ content_type = '%s; charset=%s' % (content_type, self.charset)
self['Content-Type'] = content_type