CLI使用raw python在Django中创建超级用户,没有python shell

时间:2014-05-06 18:11:30

标签: django ansible

作为自动化过程的一部分,我需要在CLI中通过python为Django创建超级用户。

我可以考虑这个问题的其他可能性,但前提是它们很容易用ansible进行研究。

无论如何,这是我到目前为止(对于Django 1.6)

python -c "import os; 
  os.environ.setdefault('DJANGO_SETTINGS_MODULE', 'my_proj.live_settings'); 
  from django.conf import settings;"

python -c "from django.contrib.auth import get_user_model; 
  user_model = get_user_model();
  user_model.objects.db_manager().create_superuser('admin', 'admin@admin.com', 'ad_pass')"

然而,当我运行这个时,我得到了这个错误。

django.core.exceptions.ImproperlyConfigured: Requested setting CACHES, but settings are not configured. You must either define the environment variable DJANGO_SETTINGS_MODULE or call settings.configure() before accessing settings.

知道什么是错的或者如何解决它吗?看来DJANGO_SETTINGS_MODULE在显式设置时会抱怨它似乎很奇怪。

4 个答案:

答案 0 :(得分:2)

您遇到的问题是因为您将其作为两个单独的python命令运行。你导入第一个,然后python出口的设置,然后你开始第二个(没有导入设置)。

如果你将它们全部放入一个python -c电话中,它应该有效。

看起来您还没有向.db_manager()传递正确数量的参数。有关详细信息,请参阅此处:

https://docs.djangoproject.com/en/1.6/topics/db/multi-db/#using-managers-with-multiple-databases

答案 1 :(得分:1)

如何添加自定义manage.py命令?

[APPNAME] /managment/commands/add_user.py:

from django.core.management.base import BaseCommand
from django.contrib.auth.models import User
from optparse import make_option

class Command(BaseCommand):
    option_list = BaseCommand.option_list + (
        make_option('--user',
            action='store',
            default=None,
            help='Username for new user'),
        make_option('--password',
            action='store',
            default=None,
            help='User Password'),
        make_option('--email',
            action='store',
            default=None,
            help='User Email Address'),
        )

    def handle(self, *args, **kwargs):
        user = User.objects.create_user(
            username = kwargs.get('user'),
            password = kwargs.get('password'),
            email = kwargs.get('email')
            )
        user.save( )               

从CLI添加具有以下命令的用户:

python manage.py add_user --user=tester --password=tester --email=tester@test.org

答案 2 :(得分:1)

使用shtuff.it指定的代码,成功运行并创建用户但我无法登录到创建的用户,因此我需要修改代码以创建超级用户。

P.S:我已经更改了参数的顺序,就像我把密码放在密码之前,它对我有用。

以下是我们可以用来从CLI创建django超级用户的完整代码:

[APPNAME] /managment/commands/add_user.py:

from django.core.management.base import BaseCommand
from django.contrib.auth.models import User
from optparse import make_option

class Command(BaseCommand):
    option_list = BaseCommand.option_list + (
        make_option('--user',
            action='store',
            default=None,
            help='Username for new user'),
        make_option('--password',
            action='store',
            default=None,
            help='User Password'),
        make_option('--email',
            action='store',
            default=None,
            help='User Email Address'),
        )

    def handle(self, *args, **kwargs):
        user = User.objects.create_superuser(
            username = kwargs.get('user'),
            email = kwargs.get('email'),
            password = kwargs.get('password').strip(),
            )
        user.save( )

然后使用以下命令从CLI添加用户:

python manage.py add_user --user=USERNAME --password=PASSWORD --email=mail@test.com

答案 3 :(得分:1)

根据我的需要,我创建了一个小应用程序,通过使用fixture或迁移来创建超级用户。 https://github.com/inirudebwoy/django-mksuperuser