作为自动化过程的一部分,我需要在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在显式设置时会抱怨它似乎很奇怪。
答案 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