2014-05-06 92 views
2

作爲自動化過程的一部分,我需要在CLI中通過python創建Django的超級用戶。CLI在Django中使用原生python創建超級用戶,沒有python shell

我可以考慮其他可能性來解決這個問題,但前提是他們很容易用可靠的方式進行操作。

無論如何,這是我迄今(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', '[email protected]', '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時,它已被明確設置..

回答

2

你看到的問題是因爲你運行它作爲兩個單獨的python命令。你先導入設置,然後python退出,然後你開始第二個(沒有導入設置)。

如果你把它們全部放入一個python -c調用,它應該工作。

它看起來好像沒有將正確數量的參數傳遞給.db_manager()。有關詳細信息,請參閱本:

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

+0

確實,非常感謝! – rix

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 protected] 
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 protected] 
+0

這對於Ansible來說有一個很好的Django模塊 - http://docs.ansible.com/django_manage_module.html – rix

+0

[rix](http://stackoverflow.com/users/1004781/rix) ,但使用該模塊時,您無法創建超級用戶,如果可能的話,請通過示例告訴我們。謝謝 –

+0

你可以用它來運行任何管理。py命令,雖然承認notuperuperuser。但是,在這種情況下,創建一個包含超級用戶詳細信息和密碼哈希的夾具會更有意義。使用可以安裝的夾具,並且您擁有超級用戶,而無需在版本控制中定義您的實際密碼,也無需創建自定義管理命令。 – rix

相關問題