Fixed #27184 -- Allowed uploading TemporaryFile with the test client.
Thanks Federico Capoano for finishing the patch.
This commit is contained in:
parent
f94ce0d21d
commit
5549e89b84
|
@ -226,7 +226,12 @@ def encode_multipart(boundary, data):
|
||||||
def encode_file(boundary, key, file):
|
def encode_file(boundary, key, file):
|
||||||
def to_bytes(s):
|
def to_bytes(s):
|
||||||
return force_bytes(s, settings.DEFAULT_CHARSET)
|
return force_bytes(s, settings.DEFAULT_CHARSET)
|
||||||
filename = os.path.basename(file.name) if hasattr(file, 'name') else ''
|
|
||||||
|
# file.name might not be a string. For example, it's an int for
|
||||||
|
# tempfile.TemporaryFile().
|
||||||
|
file_has_string_name = hasattr(file, 'name') and isinstance(file.name, six.string_types)
|
||||||
|
filename = os.path.basename(file.name) if file_has_string_name else ''
|
||||||
|
|
||||||
if hasattr(file, 'content_type'):
|
if hasattr(file, 'content_type'):
|
||||||
content_type = file.content_type
|
content_type = file.content_type
|
||||||
elif filename:
|
elif filename:
|
||||||
|
|
|
@ -22,6 +22,8 @@ rather than the HTML rendered to the end-user.
|
||||||
"""
|
"""
|
||||||
from __future__ import unicode_literals
|
from __future__ import unicode_literals
|
||||||
|
|
||||||
|
import tempfile
|
||||||
|
|
||||||
from django.contrib.auth.models import User
|
from django.contrib.auth.models import User
|
||||||
from django.core import mail
|
from django.core import mail
|
||||||
from django.http import HttpResponse
|
from django.http import HttpResponse
|
||||||
|
@ -714,6 +716,11 @@ class ClientTest(TestCase):
|
||||||
with self.assertRaisesMessage(Exception, 'exception message'):
|
with self.assertRaisesMessage(Exception, 'exception message'):
|
||||||
self.client.get('/nesting_exception_view/')
|
self.client.get('/nesting_exception_view/')
|
||||||
|
|
||||||
|
def test_uploading_temp_file(self):
|
||||||
|
test_file = tempfile.TemporaryFile()
|
||||||
|
response = self.client.post('/upload_view/', data={'temp_file': test_file})
|
||||||
|
self.assertEqual(response.content, b'temp_file')
|
||||||
|
|
||||||
|
|
||||||
@override_settings(
|
@override_settings(
|
||||||
MIDDLEWARE=['django.middleware.csrf.CsrfViewMiddleware'],
|
MIDDLEWARE=['django.middleware.csrf.CsrfViewMiddleware'],
|
||||||
|
|
|
@ -5,6 +5,7 @@ from django.views.generic import RedirectView
|
||||||
from . import views
|
from . import views
|
||||||
|
|
||||||
urlpatterns = [
|
urlpatterns = [
|
||||||
|
url(r'^upload_view/$', views.upload_view, name='upload_view'),
|
||||||
url(r'^get_view/$', views.get_view, name='get_view'),
|
url(r'^get_view/$', views.get_view, name='get_view'),
|
||||||
url(r'^post_view/$', views.post_view),
|
url(r'^post_view/$', views.post_view),
|
||||||
url(r'^trace_view/$', views.trace_view),
|
url(r'^trace_view/$', views.trace_view),
|
||||||
|
|
|
@ -324,3 +324,8 @@ def nesting_exception_view(request):
|
||||||
|
|
||||||
def django_project_redirect(request):
|
def django_project_redirect(request):
|
||||||
return HttpResponseRedirect('https://www.djangoproject.com/')
|
return HttpResponseRedirect('https://www.djangoproject.com/')
|
||||||
|
|
||||||
|
|
||||||
|
def upload_view(request):
|
||||||
|
"""Prints keys of request.FILES to the response."""
|
||||||
|
return HttpResponse(', '.join(request.FILES.keys()))
|
||||||
|
|
Loading…
Reference in New Issue