与 Django 集成¶
0.9.2 新版功能.
这些函数提高了初始化 Django 配置中环境变量的效率,运行后即可从 Django 项目或者 Django 本身中提取环境变量,而不需要每次使用 fabfile 时都亲自设置环境变量,或者使用 manage.py
插件。
目前,这些函数仅支持 Fabric 和 fabfile 以及它能引用到的 Django 库交互。听起来限制了你的使用,其实不然。在下面的例子中,你可以像在本地一样使用 Fabric 作为作为“构建”工具:
from fabric.api import run, local, hosts, cd
from fabric.contrib import django
django.project('myproject')
from myproject.myapp.models import MyModel
def print_instances():
for instance in MyModel.objects.all():
print(instance)
@hosts('production-server')
def print_production_instances():
with cd('/path/to/myproject'):
run('fab print_instances')
由于两边都安装了 Fabric,你在本地执行 print_production_instances
将在生产服务器上触发 print_instances
函数,而它将会和远程环境中的 Django 数据库交互。
在下面这个例子中,如果本地和远程使用相同的 settings,那么你可以把数据库等设置放在 fabfile 中,这样在远程(无 Fabric)命令中也能使用。这保证即使只有本地安装了 Fabric 也能灵活地使用:
from fabric.api import run
from fabric.contrib import django
django.settings_module('myproject.settings')
from django.conf import settings
def dump_production_database():
run('mysqldump -u %s -p=%s %s > /tmp/prod-db.sql' % (
settings.DATABASE_USER,
settings.DATABASE_PASSWORD,
settings.DATABASE_NAME
))
上面的代码片段可以在本地开发环境运行,将本地的 settings.py
镜像到远程以共享数据库连接信息。
-
fabric.contrib.django.
project
(name)¶ 将
DJANGO_SETTINGS_MODULE
设置为'<name>.settings'
。该函数使用 Django 自带的 settings 文件或路径命名转换的功能提供了一个简便的常见问题解决方案。
使用
settings_module
—— 详细的使用和原理参见其文档。
-
fabric.contrib.django.
settings_module
(module)¶ 将
DJANGO_SETTINGS_MODULE
控制台环境变量设置为module
。由于 Django 的工作原理所限,从 Django 或者 Django 项目中导入对象必须保证
DJANGO_SETTINGS_MODULE
设置正确(参见 Django 设置文档 )。这个函数提供了一个简易的写法,只需要在 fabfile 或者 Fabric 调用的文件中调用它,之后从 Django 引用对象时便不再有问题。
注解
本函数通过修改
os.environ
来修改 shell 环境变量,并不会对 Fabric 的env
带来任何影响。