Permalink
Browse files

[1.7.x] Fixed #22770 -- Removed create_superuser from post_migrate si…

…gnals.

Moved logic to syncdb command for backwards compatibility.

Backport of 93d0553 from master
  • Loading branch information...
1 parent d232a5f commit 0767055dfc255ba120811f6d9cba2c7e593b0731 @timgraham timgraham committed Jun 10, 2014
@@ -7,15 +7,13 @@
import unicodedata
from django.apps import apps
-from django.contrib.auth import (models as auth_app, get_permission_codename,
- get_user_model)
+from django.contrib.auth import models as auth_app, get_permission_codename
from django.core import exceptions
from django.core.management.base import CommandError
from django.db import DEFAULT_DB_ALIAS, router
from django.db.models import signals
from django.utils.encoding import DEFAULT_LOCALE_ENCODING
from django.utils import six
-from django.utils.six.moves import input
def _get_all_permissions(opts, ctype):
@@ -119,30 +117,6 @@ def create_permissions(app_config, verbosity=2, interactive=True, using=DEFAULT_
print("Adding permission '%s'" % perm)
-def create_superuser(app_config, verbosity=2, interactive=True, using=DEFAULT_DB_ALIAS, **kwargs):
- try:
- apps.get_model('auth', 'Permission')
- except LookupError:
- return
-
- UserModel = get_user_model()
-
- from django.core.management import call_command
-
- if not UserModel._default_manager.exists() and interactive:
- msg = ("\nYou have installed Django's auth system, and "
- "don't have any superusers defined.\nWould you like to create one "
- "now? (yes/no): ")
- confirm = input(msg)
- while 1:
- if confirm not in ('yes', 'no'):
- confirm = input('Please enter either "yes" or "no": ')
- continue
- if confirm == 'yes':
- call_command("createsuperuser", interactive=True, database=using)
- break
-
-
def get_system_username():
"""
Try to determine the current system user's username.
@@ -207,6 +181,3 @@ def get_default_username(check_db=True):
signals.post_migrate.connect(create_permissions,
dispatch_uid="django.contrib.auth.management.create_permissions")
-signals.post_migrate.connect(create_superuser,
- sender=apps.get_app_config('auth'),
- dispatch_uid="django.contrib.auth.management.create_superuser")
@@ -1,10 +1,13 @@
import warnings
from optparse import make_option
+from django.apps import apps
+from django.contrib.auth import get_user_model
from django.db import DEFAULT_DB_ALIAS
from django.core.management import call_command
from django.core.management.base import NoArgsCommand
from django.utils.deprecation import RemovedInDjango19Warning
+from django.utils.six.moves import input
class Command(NoArgsCommand):
@@ -22,3 +25,23 @@ class Command(NoArgsCommand):
def handle_noargs(self, **options):
warnings.warn("The syncdb command will be removed in Django 1.9", RemovedInDjango19Warning)
call_command("migrate", **options)
+
+ try:
+ apps.get_model('auth', 'Permission')
+ except LookupError:
+ return
+
+ UserModel = get_user_model()
+
+ if not UserModel._default_manager.exists() and options.get('interactive'):
+ msg = ("\nYou have installed Django's auth system, and "
+ "don't have any superusers defined.\nWould you like to create one "
+ "now? (yes/no): ")
+ confirm = input(msg)
+ while 1:
+ if confirm not in ('yes', 'no'):
+ confirm = input('Please enter either "yes" or "no": ')
+ continue
+ if confirm == 'yes':
+ call_command("createsuperuser", interactive=True, database=options['database'])
+ break
View
@@ -206,40 +206,7 @@ The :djadmin:`migrate` command looks at the :setting:`INSTALLED_APPS` setting
and creates any necessary database tables according to the database settings
in your :file:`mysite/settings.py` file and the database migrations shipped
with the app (we'll cover those later). You'll see a message for each
-migration it applies, and you'll get a prompt asking you if you'd like to
-create a superuser account for the authentication system.
-
-First, you'll be asked if you would like to create a superuser. Type the word
-``yes`` and hit enter.
-
-.. code-block:: text
-
- You have installed Django's auth system, and don't have any superusers defined.
- Would you like to create one now? (yes/no): yes
-
-Next, enter a username. By default, this will be your system username. Enter
-your desired username and press enter.
-
-.. code-block:: text
-
- Username (leave blank to use 'your_username'): admin
-
-You will then be prompted for your desired email address:
-
-.. code-block:: text
-
- Email address: admin@example.com
-
-The final step is to enter your password. You will be asked to enter your
-password twice, the second time as a confirmation of the first.
-
-.. code-block:: text
-
- Password: **********
- Password (again): *********
- Superuser created successfully.
-
-With that done, if you're interested, run the command-line client for your
+migration it applies. If you're interested, run the command-line client for your
database and type ``\dt`` (PostgreSQL), ``SHOW TABLES;`` (MySQL), or
``.schema`` (SQLite) to display the tables Django created.
View
@@ -21,6 +21,37 @@ automatically-generated admin site.
The admin isn't intended to be used by site visitors. It's for site
managers.
+Creating an admin user
+======================
+
+First we'll need to create a user who can login to the admin site. Run the
+following command:
+
+.. code-block:: bash
+
+ $ python manage.py createsuperuser
+
+Enter your desired username and press enter.
+
+.. code-block:: text
+
+ Username: admin
+
+You will then be prompted for your desired email address:
+
+.. code-block:: text
+
+ Email address: admin@example.com
+
+The final step is to enter your password. You will be asked to enter your
+password twice, the second time as a confirmation of the first.
+
+.. code-block:: text
+
+ Password: **********
+ Password (again): *********
+ Superuser created successfully.
+
Start the development server
============================
@@ -59,10 +90,7 @@ browser's settings and on whether Django has a translation for this language.
Enter the admin site
====================
-Now, try logging in. You created a superuser account in the first part of this
-tutorial, remember? If you didn't create one or forgot the password you can
-:ref:`create another one <topics-auth-creating-superusers>`.
-
+Now, try logging in with the superuser account you created in the previous step.
You should see the Django admin index page:
.. image:: _images/admin02.png
@@ -1420,9 +1420,8 @@ This command is only available if Django's :doc:`authentication system
</topics/auth/index>` (``django.contrib.auth``) is installed.
Creates a superuser account (a user who has all permissions). This is
-useful if you need to create an initial superuser account but did not
-do so during the first :djadmin:`migrate`, or if you need to programmatically
-generate superuser accounts for your site(s).
+useful if you need to create an initial superuser account or if you need to
+programmatically generate superuser accounts for your site(s).
When run interactively, this command will prompt for a password for
the new superuser account. When run non-interactively, no password
@@ -66,9 +66,7 @@ interactively <auth-admin>`.
Creating superusers
-------------------
-:djadmin:`manage.py migrate <migrate>` prompts you to create a superuser the
-first time you run it with ``'django.contrib.auth'`` installed. If you need to
-create a superuser at a later date, you can use a command line utility::
+Create superusers using the :djadmin:`createsuperuser` command::
$ python manage.py createsuperuser --username=joe --email=joe@example.com

0 comments on commit 0767055

Please sign in to comment.