request.DATA should use empty QueryDict for no data, not None.

This commit is contained in:
Tom Christie 2013-02-14 13:02:28 +00:00
parent 9d3153ed04
commit af686ec11a
2 changed files with 11 additions and 6 deletions

View File

@ -11,7 +11,9 @@ The wrapped request then offers a richer API, in particular :
""" """
from __future__ import unicode_literals from __future__ import unicode_literals
from django.conf import settings from django.conf import settings
from django.http import QueryDict
from django.http.multipartparser import parse_header from django.http.multipartparser import parse_header
from django.utils.datastructures import MultiValueDict
from rest_framework import HTTP_HEADER_ENCODING from rest_framework import HTTP_HEADER_ENCODING
from rest_framework import exceptions from rest_framework import exceptions
from rest_framework.compat import BytesIO from rest_framework.compat import BytesIO
@ -297,7 +299,9 @@ class Request(object):
media_type = self.content_type media_type = self.content_type
if stream is None or media_type is None: if stream is None or media_type is None:
return (None, None) empty_data = QueryDict('', self._request._encoding)
empty_files = MultiValueDict()
return (empty_data, empty_files)
parser = self.negotiator.select_parser(self, self.parsers) parser = self.negotiator.select_parser(self, self.parsers)
@ -311,7 +315,8 @@ class Request(object):
try: try:
return (parsed.data, parsed.files) return (parsed.data, parsed.files)
except AttributeError: except AttributeError:
return (parsed, None) empty_files = MultiValueDict()
return (parsed, empty_files)
def _authenticate(self): def _authenticate(self):
""" """

View File

@ -62,17 +62,17 @@ class TestMethodOverloading(TestCase):
class TestContentParsing(TestCase): class TestContentParsing(TestCase):
def test_standard_behaviour_determines_no_content_GET(self): def test_standard_behaviour_determines_no_content_GET(self):
""" """
Ensure request.DATA returns None for GET request with no content. Ensure request.DATA returns empty QueryDict for GET request.
""" """
request = Request(factory.get('/')) request = Request(factory.get('/'))
self.assertEqual(request.DATA, None) self.assertEqual(request.DATA, {})
def test_standard_behaviour_determines_no_content_HEAD(self): def test_standard_behaviour_determines_no_content_HEAD(self):
""" """
Ensure request.DATA returns None for HEAD request. Ensure request.DATA returns empty QueryDict for HEAD request.
""" """
request = Request(factory.head('/')) request = Request(factory.head('/'))
self.assertEqual(request.DATA, None) self.assertEqual(request.DATA, {})
def test_request_DATA_with_form_content(self): def test_request_DATA_with_form_content(self):
""" """