Skip to content

Commit 101fd29

Browse files
authored
Do not include uploads in request.POST (#4407)
1 parent 785b206 commit 101fd29

File tree

2 files changed

+12
-1
lines changed

2 files changed

+12
-1
lines changed

rest_framework/request.py

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -373,7 +373,7 @@ def POST(self):
373373
if not _hasattr(self, '_data'):
374374
self._load_data_and_files()
375375
if is_form_media_type(self.content_type):
376-
return self.data
376+
return self._data
377377
return QueryDict('', encoding=self._request._encoding)
378378

379379
@property

tests/test_request.py

Lines changed: 11 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -7,6 +7,7 @@
77
from django.contrib.auth import authenticate, login, logout
88
from django.contrib.auth.models import User
99
from django.contrib.sessions.middleware import SessionMiddleware
10+
from django.core.files.uploadedfile import SimpleUploadedFile
1011
from django.test import TestCase, override_settings
1112
from django.utils import six
1213

@@ -78,6 +79,16 @@ def test_request_POST_with_form_content(self):
7879
request.parsers = (FormParser(), MultiPartParser())
7980
self.assertEqual(list(request.POST.items()), list(data.items()))
8081

82+
def test_request_POST_with_files(self):
83+
"""
84+
Ensure request.POST returns no content for POST request with file content.
85+
"""
86+
upload = SimpleUploadedFile("file.txt", b"file_content")
87+
request = Request(factory.post('/', {'upload': upload}))
88+
request.parsers = (FormParser(), MultiPartParser())
89+
self.assertEqual(list(request.POST.keys()), [])
90+
self.assertEqual(list(request.FILES.keys()), ['upload'])
91+
8192
def test_standard_behaviour_determines_form_content_PUT(self):
8293
"""
8394
Ensure request.data returns content for PUT request with form content.

0 commit comments

Comments
 (0)