Fixed #27796 -- Prevented middleware being loaded twice with runserver

Thanks Tim Graham for the review.
This commit is contained in:
Claude Paroz 2017-08-18 21:18:24 +02:00
parent f2b93b509c
commit 09b3e46635
2 changed files with 17 additions and 1 deletions

View File

@ -21,6 +21,11 @@ class StaticFilesHandler(WSGIHandler):
self.base_url = urlparse(self.get_base_url()) self.base_url = urlparse(self.get_base_url())
super().__init__() super().__init__()
def load_middleware(self):
# Middleware are already loaded for self.application; no need to reload
# them for self.
pass
def get_base_url(self): def get_base_url(self):
utils.check_settings() utils.check_settings()
return settings.STATIC_URL return settings.STATIC_URL

View File

@ -11,7 +11,9 @@ from admin_scripts.tests import AdminScriptTestCase
from django.conf import settings from django.conf import settings
from django.contrib.staticfiles import storage from django.contrib.staticfiles import storage
from django.contrib.staticfiles.management.commands import collectstatic from django.contrib.staticfiles.management.commands import (
collectstatic, runserver,
)
from django.core.exceptions import ImproperlyConfigured from django.core.exceptions import ImproperlyConfigured
from django.core.management import call_command from django.core.management import call_command
from django.test import override_settings from django.test import override_settings
@ -34,6 +36,15 @@ class TestNoFilesCreated:
self.assertEqual(os.listdir(settings.STATIC_ROOT), []) self.assertEqual(os.listdir(settings.STATIC_ROOT), [])
class TestRunserver(StaticFilesTestCase):
@override_settings(MIDDLEWARE=['django.middleware.common.CommonMiddleware'])
def test_middleware_loaded_only_once(self):
command = runserver.Command()
with mock.patch('django.middleware.common.CommonMiddleware') as mocked:
command.get_handler(use_static_handler=True, insecure_serving=True)
self.assertEqual(mocked.call_count, 1)
class TestFindStatic(TestDefaults, CollectionTestCase): class TestFindStatic(TestDefaults, CollectionTestCase):
""" """
Test ``findstatic`` management command. Test ``findstatic`` management command.