Fixed #29353 -- Made StaticFilesHandler return a 404 response when settings.DEBUG is False

This commit is contained in:
Claude Paroz 2018-04-25 10:35:54 +02:00
parent c591bc3cce
commit a9189d27ef
2 changed files with 15 additions and 1 deletions

View File

@ -4,6 +4,7 @@ from urllib.request import url2pathname
from django.conf import settings from django.conf import settings
from django.contrib.staticfiles import utils from django.contrib.staticfiles import utils
from django.contrib.staticfiles.views import serve from django.contrib.staticfiles.views import serve
from django.core.handlers.exception import response_for_exception
from django.core.handlers.wsgi import WSGIHandler, get_path_info from django.core.handlers.wsgi import WSGIHandler, get_path_info
@ -59,6 +60,7 @@ class StaticFilesHandler(WSGIHandler):
if settings.DEBUG: if settings.DEBUG:
from django.views import debug from django.views import debug
return debug.technical_404_response(request, e) return debug.technical_404_response(request, e)
return response_for_exception(request, e)
return super().get_response(request) return super().get_response(request)
def __call__(self, environ, start_response): def __call__(self, environ, start_response):

View File

@ -16,7 +16,7 @@ from django.contrib.staticfiles.management.commands import (
) )
from django.core.exceptions import ImproperlyConfigured from django.core.exceptions import ImproperlyConfigured
from django.core.management import CommandError, call_command from django.core.management import CommandError, call_command
from django.test import override_settings from django.test import RequestFactory, override_settings
from django.test.utils import extend_sys_path from django.test.utils import extend_sys_path
from django.utils import timezone from django.utils import timezone
from django.utils._os import symlinks_supported from django.utils._os import symlinks_supported
@ -44,6 +44,18 @@ class TestRunserver(StaticFilesTestCase):
command.get_handler(use_static_handler=True, insecure_serving=True) command.get_handler(use_static_handler=True, insecure_serving=True)
self.assertEqual(mocked.call_count, 1) self.assertEqual(mocked.call_count, 1)
def test_404_response(self):
command = runserver.Command()
handler = command.get_handler(use_static_handler=True, insecure_serving=True)
missing_static_file = os.path.join(settings.STATIC_URL, 'unknown.css')
req = RequestFactory().get(missing_static_file)
with override_settings(DEBUG=False):
response = handler.get_response(req)
self.assertEqual(response.status_code, 404)
with override_settings(DEBUG=True):
response = handler.get_response(req)
self.assertEqual(response.status_code, 404)
class TestFindStatic(TestDefaults, CollectionTestCase): class TestFindStatic(TestDefaults, CollectionTestCase):
""" """