testserver.py 2.0 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647
  1. from django.core.management.base import BaseCommand
  2. from optparse import make_option
  3. class Command(BaseCommand):
  4. option_list = BaseCommand.option_list + (
  5. make_option('--noinput', action='store_false', dest='interactive', default=True,
  6. help='Tells Django to NOT prompt the user for input of any kind.'),
  7. make_option('--addrport', action='store', dest='addrport',
  8. type='string', default='',
  9. help='port number or ipaddr:port to run the server on'),
  10. make_option('--ipv6', '-6', action='store_true', dest='use_ipv6', default=False,
  11. help='Tells Django to use an IPv6 address.'),
  12. )
  13. help = 'Runs a development server with data from the given fixture(s).'
  14. args = '[fixture ...]'
  15. requires_system_checks = False
  16. def handle(self, *fixture_labels, **options):
  17. from django.core.management import call_command
  18. from django.db import connection
  19. verbosity = int(options.get('verbosity'))
  20. interactive = options.get('interactive')
  21. addrport = options.get('addrport')
  22. # Create a test database.
  23. db_name = connection.creation.create_test_db(verbosity=verbosity, autoclobber=not interactive, serialize=False)
  24. # Import the fixture data into the test database.
  25. call_command('loaddata', *fixture_labels, **{'verbosity': verbosity})
  26. # Run the development server. Turn off auto-reloading because it causes
  27. # a strange error -- it causes this handle() method to be called
  28. # multiple times.
  29. shutdown_message = '\nServer stopped.\nNote that the test database, %r, has not been deleted. You can explore it on your own.' % db_name
  30. use_threading = connection.features.test_db_allows_multiple_connections
  31. call_command(
  32. 'runserver',
  33. addrport=addrport,
  34. shutdown_message=shutdown_message,
  35. use_reloader=False,
  36. use_ipv6=options['use_ipv6'],
  37. use_threading=use_threading
  38. )