Fixed #16822 -- Added RawPostDataException
Thanks jaylett for the patch.
This commit is contained in:
parent
ddb53856b6
commit
58d555caf5
|
@ -1,6 +1,6 @@
|
||||||
from django.http.cookie import SimpleCookie, parse_cookie
|
from django.http.cookie import SimpleCookie, parse_cookie
|
||||||
from django.http.request import (HttpRequest, QueryDict, UnreadablePostError,
|
from django.http.request import (HttpRequest, QueryDict, RawPostDataException,
|
||||||
build_request_repr)
|
UnreadablePostError, build_request_repr)
|
||||||
from django.http.response import (HttpResponse, StreamingHttpResponse,
|
from django.http.response import (HttpResponse, StreamingHttpResponse,
|
||||||
HttpResponseRedirect, HttpResponsePermanentRedirect,
|
HttpResponseRedirect, HttpResponsePermanentRedirect,
|
||||||
HttpResponseNotModified, HttpResponseBadRequest, HttpResponseForbidden,
|
HttpResponseNotModified, HttpResponseBadRequest, HttpResponseForbidden,
|
||||||
|
|
|
@ -31,6 +31,15 @@ class UnreadablePostError(IOError):
|
||||||
pass
|
pass
|
||||||
|
|
||||||
|
|
||||||
|
class RawPostDataException(Exception):
|
||||||
|
"""
|
||||||
|
You cannot access raw_post_data from a request that has
|
||||||
|
multipart/* POST data if it has been accessed via POST,
|
||||||
|
FILES, etc..
|
||||||
|
"""
|
||||||
|
pass
|
||||||
|
|
||||||
|
|
||||||
class HttpRequest(object):
|
class HttpRequest(object):
|
||||||
"""A basic HTTP request."""
|
"""A basic HTTP request."""
|
||||||
|
|
||||||
|
@ -192,7 +201,7 @@ class HttpRequest(object):
|
||||||
def body(self):
|
def body(self):
|
||||||
if not hasattr(self, '_body'):
|
if not hasattr(self, '_body'):
|
||||||
if self._read_started:
|
if self._read_started:
|
||||||
raise Exception("You cannot access body after reading from request's data stream")
|
raise RawPostDataException("You cannot access body after reading from request's data stream")
|
||||||
try:
|
try:
|
||||||
self._body = self.read()
|
self._body = self.read()
|
||||||
except IOError as e:
|
except IOError as e:
|
||||||
|
|
|
@ -12,7 +12,8 @@ from django.db import connection, connections, DEFAULT_DB_ALIAS
|
||||||
from django.core import signals
|
from django.core import signals
|
||||||
from django.core.exceptions import SuspiciousOperation
|
from django.core.exceptions import SuspiciousOperation
|
||||||
from django.core.handlers.wsgi import WSGIRequest, LimitedStream
|
from django.core.handlers.wsgi import WSGIRequest, LimitedStream
|
||||||
from django.http import HttpRequest, HttpResponse, parse_cookie, build_request_repr, UnreadablePostError
|
from django.http import (HttpRequest, HttpResponse, parse_cookie,
|
||||||
|
build_request_repr, UnreadablePostError, RawPostDataException)
|
||||||
from django.test import SimpleTestCase, TransactionTestCase
|
from django.test import SimpleTestCase, TransactionTestCase
|
||||||
from django.test.client import FakePayload
|
from django.test.client import FakePayload
|
||||||
from django.test.utils import override_settings, str_prefix
|
from django.test.utils import override_settings, str_prefix
|
||||||
|
@ -263,7 +264,7 @@ class RequestsTests(SimpleTestCase):
|
||||||
'CONTENT_LENGTH': len(payload),
|
'CONTENT_LENGTH': len(payload),
|
||||||
'wsgi.input': payload})
|
'wsgi.input': payload})
|
||||||
self.assertEqual(request.read(2), b'na')
|
self.assertEqual(request.read(2), b'na')
|
||||||
self.assertRaises(Exception, lambda: request.body)
|
self.assertRaises(RawPostDataException, lambda: request.body)
|
||||||
self.assertEqual(request.POST, {})
|
self.assertEqual(request.POST, {})
|
||||||
|
|
||||||
def test_non_ascii_POST(self):
|
def test_non_ascii_POST(self):
|
||||||
|
@ -308,7 +309,7 @@ class RequestsTests(SimpleTestCase):
|
||||||
'CONTENT_LENGTH': len(payload),
|
'CONTENT_LENGTH': len(payload),
|
||||||
'wsgi.input': payload})
|
'wsgi.input': payload})
|
||||||
self.assertEqual(request.POST, {'name': ['value']})
|
self.assertEqual(request.POST, {'name': ['value']})
|
||||||
self.assertRaises(Exception, lambda: request.body)
|
self.assertRaises(RawPostDataException, lambda: request.body)
|
||||||
|
|
||||||
def test_body_after_POST_multipart_related(self):
|
def test_body_after_POST_multipart_related(self):
|
||||||
"""
|
"""
|
||||||
|
|
Loading…
Reference in New Issue