浏览代码

Fixed #22770 -- Removed create_superuser from post_migrate signals.

Moved logic to syncdb command for backwards compatibility.
Tim Graham 10 年之前
父节点
当前提交
93d05536fd

+ 1 - 30
django/contrib/auth/management/__init__.py

@@ -7,15 +7,13 @@ import getpass
 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")

+ 23 - 0
django/core/management/commands/syncdb.py

@@ -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

+ 1 - 34
docs/intro/tutorial01.txt

@@ -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.
 

+ 32 - 4
docs/intro/tutorial02.txt

@@ -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

+ 2 - 3
docs/ref/django-admin.txt

@@ -1435,9 +1435,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

+ 1 - 3
docs/topics/auth/default.txt

@@ -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