Django离线脚本

  1. 一般使用
  2. 例子

所谓的离线脚本就是不在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文件,导入即可立即使用

作者: 忞翛

出处: https://www.lczmx.top/Python/16370a4a9c5d/

版权: 本作品采用「署名-非商业性使用-相同方式共享 4.0 国际」许可协议进行许可。

转载请注明来源,欢迎对文章中的引用来源进行考证,欢迎指出任何有错误或不够清晰的表达。

在线工具