用于运行Django命令的Python脚本
我想运行一个Python脚本,这个脚本应该完成以下几件事:
- 创建一个Django项目:
django-admin startproject foobar
- 在这个项目中创建一个应用:
python manage.py barfoo
- 在设置中把新创建的应用
barfoo
添加到INSTALLED_APP
里。
我该怎么做呢?
3 个回答
4
六年后,我偶然看到这个问题,想弄清楚如何为一个只添加自定义模板标签并与项目中其他应用互动的应用写一些测试。希望这能帮助到某些人。
基于@groovehunter的回答:现在的官方文档(Django 1.10)已经包含了这个功能,可以在开发之外使用。
请注意,在调用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')
13
看起来有一种很“Python风”的方法可以做到第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
了解一下subprocess和Popen方法。这可能正是你需要的。
Popen(["django-admin", "startproject", "%s" % your_name ], stdout=PIPE).communicate()
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))