diff --git a/django/core/management/commands/runserver.py b/django/core/management/commands/runserver.py index c4a0b78cd4..f5a701cd23 100644 --- a/django/core/management/commands/runserver.py +++ b/django/core/management/commands/runserver.py @@ -40,6 +40,11 @@ class Command(BaseCommand): return get_internal_wsgi_application() def handle(self, addrport='', *args, **options): + from django.conf import settings + + if not settings.DEBUG and not settings.ALLOWED_HOSTS: + raise CommandError('You must set settings.ALLOWED_HOSTS if DEBUG is False.') + self.use_ipv6 = options.get('use_ipv6') if self.use_ipv6 and not socket.has_ipv6: raise CommandError('Your Python does not support IPv6.') diff --git a/tests/admin_scripts/tests.py b/tests/admin_scripts/tests.py index 9e6b1f557b..df8a8becf6 100644 --- a/tests/admin_scripts/tests.py +++ b/tests/admin_scripts/tests.py @@ -1192,6 +1192,21 @@ class ManageRunserver(AdminScriptTestCase): self.cmd.handle(addrport="deadbeef:7654") self.assertServerSettings('deadbeef', '7654') +class ManageRunserverEmptyAllowedHosts(AdminScriptTestCase): + def setUp(self): + self.write_settings('settings.py', sdict={ + 'ALLOWED_HOSTS': [], + 'DEBUG': False, + }) + + def tearDown(self): + self.remove_settings('settings.py') + + def test_empty_allowed_hosts_error(self): + out, err = self.run_manage(['runserver']) + self.assertNoOutput(out) + self.assertOutput(err, 'CommandError: You must set settings.ALLOWED_HOSTS if DEBUG is False.') + ########################################################################## # COMMAND PROCESSING TESTS