From 415e899dc46c2f8d667ff11d3e54eff759eaded4 Mon Sep 17 00:00:00 2001 From: Mariusz Felisiak Date: Thu, 13 Jun 2019 10:11:41 +0200 Subject: [PATCH] Refs #30451 -- Added HttpRequest._set_content_type_params() hook. --- django/core/handlers/wsgi.py | 12 ++---------- django/http/request.py | 13 +++++++++++++ 2 files changed, 15 insertions(+), 10 deletions(-) diff --git a/django/core/handlers/wsgi.py b/django/core/handlers/wsgi.py index 47b008a004..1bca717304 100644 --- a/django/core/handlers/wsgi.py +++ b/django/core/handlers/wsgi.py @@ -1,5 +1,3 @@ -import cgi -import codecs import re from io import BytesIO @@ -80,14 +78,8 @@ class WSGIRequest(HttpRequest): self.META['PATH_INFO'] = path_info self.META['SCRIPT_NAME'] = script_name self.method = environ['REQUEST_METHOD'].upper() - self.content_type, self.content_params = cgi.parse_header(environ.get('CONTENT_TYPE', '')) - if 'charset' in self.content_params: - try: - codecs.lookup(self.content_params['charset']) - except LookupError: - pass - else: - self.encoding = self.content_params['charset'] + # Set content_type, content_params, and encoding. + self._set_content_type_params(environ) try: content_length = int(environ.get('CONTENT_LENGTH')) except (ValueError, TypeError): diff --git a/django/http/request.py b/django/http/request.py index e62e2272b2..804db6bf66 100644 --- a/django/http/request.py +++ b/django/http/request.py @@ -1,3 +1,5 @@ +import cgi +import codecs import copy import re from io import BytesIO @@ -69,6 +71,17 @@ class HttpRequest: def headers(self): return HttpHeaders(self.META) + def _set_content_type_params(self, meta): + """Set content_type, content_params, and encoding.""" + self.content_type, self.content_params = cgi.parse_header(meta.get('CONTENT_TYPE', '')) + if 'charset' in self.content_params: + try: + codecs.lookup(self.content_params['charset']) + except LookupError: + pass + else: + self.encoding = self.content_params['charset'] + def _get_raw_host(self): """ Return the HTTP host using the environment or request headers. Skip