Скрипт Python для запуска команд Django

1

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

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

Как я могу это достичь?

Теги:
scripting
django-admin

3 ответа

2
Лучший ответ

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

  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))
  • 0
    Может быть для № 1, но не для № 2 или № 3. И то, и другое легко сделать в Python.
  • 0
    Я редактирую это прямо сейчас.
Показать ещё 1 комментарий
8

Кажется, что есть питонический способ сделать # 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)
0

Через 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')

Ещё вопросы

Сообщество Overcoder
Наверх
Меню