create_superuser.py 2.9 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384
  1. """
  2. Helper function for creating superusers in the authentication system.
  3. """
  4. from django.core import validators
  5. from django.contrib.auth.models import User
  6. import getpass
  7. import os
  8. import sys
  9. def createsuperuser(username=None, email=None, password=None):
  10. """
  11. Helper function for creating a superuser from the command line. All
  12. arguments are optional and will be prompted-for if invalid or not given.
  13. """
  14. try:
  15. import pwd
  16. except ImportError:
  17. default_username = ''
  18. else:
  19. # Determine the current system user's username, to use as a default.
  20. default_username = pwd.getpwuid(os.getuid())[0].replace(' ', '').lower()
  21. # Determine whether the default username is taken, so we don't display
  22. # it as an option.
  23. if default_username:
  24. try:
  25. User.objects.get(username=default_username)
  26. except User.DoesNotExist:
  27. pass
  28. else:
  29. default_username = ''
  30. try:
  31. while 1:
  32. if not username:
  33. input_msg = 'Username'
  34. if default_username:
  35. input_msg += ' (Leave blank to use %r)' % default_username
  36. username = raw_input(input_msg + ': ')
  37. if default_username and username == '':
  38. username = default_username
  39. if not username.isalnum():
  40. sys.stderr.write("Error: That username is invalid. Use only letters, digits and underscores.\n")
  41. username = None
  42. try:
  43. User.objects.get(username=username)
  44. except User.DoesNotExist:
  45. break
  46. else:
  47. sys.stderr.write("Error: That username is already taken.\n")
  48. username = None
  49. while 1:
  50. if not email:
  51. email = raw_input('E-mail address: ')
  52. try:
  53. validators.isValidEmail(email, None)
  54. except validators.ValidationError:
  55. sys.stderr.write("Error: That e-mail address is invalid.\n")
  56. email = None
  57. else:
  58. break
  59. while 1:
  60. if not password:
  61. password = getpass.getpass()
  62. password2 = getpass.getpass('Password (again): ')
  63. if password != password2:
  64. sys.stderr.write("Error: Your passwords didn't match.\n")
  65. password = None
  66. continue
  67. if password.strip() == '':
  68. sys.stderr.write("Error: Blank passwords aren't allowed.\n")
  69. password = None
  70. continue
  71. break
  72. except KeyboardInterrupt:
  73. sys.stderr.write("\nOperation cancelled.\n")
  74. sys.exit(1)
  75. u = User.objects.create_user(username, email, password)
  76. u.is_staff = True
  77. u.is_active = True
  78. u.is_superuser = True
  79. u.save()
  80. print "Superuser created successfully."