Как передать аргументы командной строки в мой сценарий оболочки Python manage.py? - PullRequest
0 голосов
/ 20 февраля 2019

У меня есть проект Python 3.7 / Django, использующий модуль auth.Я хочу написать скрипт для создания пользователей, но я очень озадачен тем, как это сделать.Я создал это

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

, но вы можете увидеть ошибку, к которой это приводит. Как мне вызвать мой скрипт из командной строки при создании виртуальной среды, в которой он будет работать?

1 Ответ

0 голосов
/ 21 февраля 2019

Вы должны написать пользовательскую команду администратора , создав класс Command в каталоге <app>/management/commands/<your_cmd.py>:

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>

для создания нового пользователя.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...