【问题标题】:How do I pass command line arguments to my Python manage.py shell script?如何将命令行参数传递给我的 Python manage.py shell 脚本?
【发布时间】:2019-07-14 15:52:20
【问题描述】:

我有一个使用 auth 模块的 Python 3.7 / Django 项目。我想写一个脚本来创建用户,但我很困惑如何去做。我已经创建了这个

from django.contrib.auth.models import User
import sys

firstarg=sys.argv[1]
secondarg=sys.argv[2]

user=User.objects.create_user(firstarg, password=secondarg)
user.is_superuser=False
user.is_staff=False
user.save()

我想将用户名和密码参数传递给这个脚本。我尝试了以下

localhost:dental davea$ source venv/bin/activate; python manage.py shell < create_users.py "user1" "password"
/Users/davea/Documents/workspace/dental/venv/lib/python3.7/site-packages/psycopg2/__init__.py:144: UserWarning: The psycopg2 wheel package will be renamed from release 2.8; in order to keep installing from binary please use "pip install psycopg2-binary" instead. For details see: <http://initd.org/psycopg/docs/install.html#binary-install-from-pypi>.
  """)
usage: manage.py shell [-h] [--no-startup] [-i {ipython,bpython,python}]
                       [-c COMMAND] [--version] [-v {0,1,2,3}]
                       [--settings SETTINGS] [--pythonpath PYTHONPATH]
                       [--traceback] [--no-color]
manage.py shell: error: unrecognized arguments: user1 password

但是您可以看到它导致的错误。如何从命令行调用我的脚本,同时创建它应该运行的虚拟环境?

【问题讨论】:

    标签: django python-3.x shell authentication command-line


    【解决方案1】:

    您应该通过在目录&lt;app&gt;/management/commands/&lt;your_cmd.py&gt; 中创建一个名为Command 的类来编写custom admin command

    from django.core.management.base import BaseCommand, CommandError
    from django.contrib.auth.models import User
    
    class Command(BaseCommand):
        help = 'Adds a user to django'
    
        def add_arguments(self, parser):
            parser.add_argument('username')
            parser.add_argument('password')
    
        def handle(self, *args, **options):
            if User.objects.create_user(options['username'], password=options['password']):
                self.stdout.write("Successfully added user {}.".format(options['username']))
    

    这允许你调用

    python manage.py your_cmd <username> <password>
    

    创建一个新用户。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2015-01-21
      • 2022-10-04
      • 2018-04-02
      • 1970-01-01
      • 2013-10-11
      • 2022-01-23
      • 1970-01-01
      相关资源
      最近更新 更多