Скрипт Python для запуска команд Django - PullRequest
1 голос
/ 18 августа 2011

Я хочу запустить скрипты Python, которые должны делать:

  1. Создать проект django: django-admin startproject foobar
  2. Создать приложение в проекте: python manage.py barfoo
  3. Добавить запись недавно созданного приложения barfoo в настройках INSTALLED_APP.

Как мне этого добиться?

Ответы [ 3 ]

10 голосов
/ 18 августа 2011

Кажется, есть питонский способ сделать # 1 и # 2

https://docs.djangoproject.com/en/dev/ref/django-admin/#running-management-commands-from-your-code

from django.core import management
management.call_command('flush', verbosity=0, interactive=False)
management.call_command('loaddata', 'test_data', verbosity=0)
2 голосов
/ 18 августа 2011

Прочитайте немного о нашем подпроцессе и методе Попена.Это может быть то, что вы ищете.

  1. Popen(["django-admin", "startproject", "%s" % your_name ], stdout=PIPE).communicate()

  2. Popen(["python", "manage.py", "%s" % your_app_name ], stdout=PIPE).communicate()

3.Я знаю, что это не идеальный код, но я просто даю идею.

with open("settings.py", 'r') as file:
    settings = file.readlines()

new_settings = []
for line in settings:
    if "INSTALLED APPS" in line:
        new_settings.append(line.replace("INSTALLED_APPS = (", "INSTALLED_APPS = (\n'%s'," % your_app_name))
    else:
        new_settings.append(line)
with open("settings.py", 'w') as file:
    file.write("".join(new_settings))
1 голос
/ 07 января 2017

6 лет спустя я наткнулся на этот вопрос, пытаясь выяснить, как написать несколько тестов для приложения, которые только добавляют пользовательский тег шаблона, который взаимодействует с другими приложениями в проекте.Надеюсь, что это кому-нибудь поможет.

Опираясь на ответ @groovehunter: официальная документация сейчас (Django 1.10) включает эту функцию вне dev.

Обратите внимание, что вам нужно изменитьтекущий каталог созданного проекта перед вызовом startapp.См. этот ответ для получения более подробной информации

from django.core import management
import os

management.call_command('startproject', 'foobar')
os.chdir('foobar')
management.call_command('startapp', 'barfoo')

или вы можете использовать дополнительный аргумент для startproject, чтобы создать проект в текущем каталоге, если вы уверены, что не будетбыть проблемы:

from django.core import management

management.call_command('startproject', 'foobar', '.')
management.call_command('startapp', 'barfoo')
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...