所谓的离线脚本就是不在django运行时执行
一般使用
一般直接运行脚本会报错,这是因为找不到django的配置文件,所以只需要将Django的配置文件放到环境变量中就可以了。
import os
import sys
import django
project_name = "xxx" # 项目名称,根据自己情况而定
base_dir = os.path.dirname(os.path.dirname(os.path.abspath(__file__)))
sys.path.append(base_dir)
os.environ.setdefault("DJANGO_SETTINGS_MODULE", "%s.settings" % project_name)
django.setup() # os.environ['DJANGO_SETTINGS_MODULE']
例子
比如目录结构(部分)是这样的:
project_name
+--- manage.py
+--- scripts
| +--- init_db.py
+--- templates
+--- project_name
| +--- settings.py
+--- v1
| +--- admin.py
| +--- apps.py
| +--- models.py
脚本可以这样写:
# project_name/scripts/init_db.py
import os
import sys
import django
project_name = "project_name"
base_dir = os.path.dirname(os.path.dirname(os.path.abspath(__file__)))
sys.path.append(base_dir)
os.environ.setdefault("DJANGO_SETTINGS_MODULE", "%s.settings" % project_name)
django.setup() # os.environ['DJANGO_SETTINGS_MODULE']
def run():
from v1.models import Product
if Product.objects.filter(title="个人免费版", price=0).exists():
print("已经存在数据")
return
data = {
"title": "个人免费版",
"price": 0,
"project_count": 2,
"per_project_size": 10,
"per_project_member": 5,
"upload_file_size": 5,
}
Product.objects.create(**data)
print("创建成功")
if __name__ == '__main__':
run()
需要注意的是,导入其它模块如(model),必须在设置环境变量之后执行,也可将改变环境变量的代码写成一个py文件,导入即可立即使用