aboutsummaryrefslogtreecommitdiffstats
path: root/rest_framework/request.py
diff options
context:
space:
mode:
authorTom Christie2013-02-06 00:53:41 -0800
committerTom Christie2013-02-06 00:53:41 -0800
commit72fe686623f63b79fa2b7f7de177c6d98bc1da3f (patch)
tree5d0834d4eb2caf21ed54a4dcba9a4a3a40e6fa99 /rest_framework/request.py
parent221e77d3575c182eb49d50546f844f392a5f7ba6 (diff)
parentbdc97c561147130b59c8cd8cc6bc735eab8b223d (diff)
downloaddjango-rest-framework-72fe686623f63b79fa2b7f7de177c6d98bc1da3f.tar.bz2
Merge pull request #636 from tomchristie/2.2
2.2 Release
Diffstat (limited to 'rest_framework/request.py')
-rw-r--r--rest_framework/request.py13
1 files changed, 8 insertions, 5 deletions
diff --git a/rest_framework/request.py b/rest_framework/request.py
index 1c28cd17..482c8688 100644
--- a/rest_framework/request.py
+++ b/rest_framework/request.py
@@ -9,10 +9,12 @@ The wrapped request then offers a richer API, in particular :
- full support of PUT method, including support for file uploads
- form overloading of HTTP method, content type and content
"""
-from StringIO import StringIO
-
+from __future__ import unicode_literals
+from django.conf import settings
from django.http.multipartparser import parse_header
+from rest_framework import HTTP_HEADER_ENCODING
from rest_framework import exceptions
+from rest_framework.compat import BytesIO
from rest_framework.settings import api_settings
@@ -20,7 +22,7 @@ def is_form_media_type(media_type):
"""
Return True if the media type is a valid form media type.
"""
- base_media_type, params = parse_header(media_type)
+ base_media_type, params = parse_header(media_type.encode(HTTP_HEADER_ENCODING))
return (base_media_type == 'application/x-www-form-urlencoded' or
base_media_type == 'multipart/form-data')
@@ -91,6 +93,7 @@ class Request(object):
if self.parser_context is None:
self.parser_context = {}
self.parser_context['request'] = self
+ self.parser_context['encoding'] = request.encoding or settings.DEFAULT_CHARSET
def _default_negotiator(self):
return api_settings.DEFAULT_CONTENT_NEGOTIATION_CLASS()
@@ -242,7 +245,7 @@ class Request(object):
elif hasattr(self._request, 'read'):
self._stream = self._request
else:
- self._stream = StringIO(self.raw_post_data)
+ self._stream = BytesIO(self.raw_post_data)
def _perform_form_overloading(self):
"""
@@ -277,7 +280,7 @@ class Request(object):
self._CONTENT_PARAM in self._data and
self._CONTENTTYPE_PARAM in self._data):
self._content_type = self._data[self._CONTENTTYPE_PARAM]
- self._stream = StringIO(self._data[self._CONTENT_PARAM])
+ self._stream = BytesIO(self._data[self._CONTENT_PARAM].encode(HTTP_HEADER_ENCODING))
self._data, self._files = (Empty, Empty)
def _parse(self):