Skip to content

Django项目中某个脚本中调用Django环境

about

所谓的在脚本中调用Django环境,说的是,在Django项目中的某个py脚本文件中,要进行一些代码测试,这些脚本要单独运行,但是脚本中又想调用Django的环境,比如使用orm,或者调用settings.py中的某个配置项,这些都是必须在导入Django环境之后,才可以。 本篇就说说如何在Django项目中,某个脚本文件中,调用Django的环境。 前提 必须是在现成的Django项目中的某个py文件中才能行。

usage

导入Django环境的代码也非常简单:

python
# 所有不涉及Django项目的导入动作,都可以先导入
import random
import os


# 下面这三行就是在脚本中导入Django环境的重点代码,这三行代码只要能成功,就说明你能在脚本中正常调用Django中的各种配置和组件了
import django
os.environ.setdefault("DJANGO_SETTINGS_MODULE", "orderapi.settings")  # orderapi:项目名称
django.setup()  # 这一步执行完就在脚本中加载了Django环境

# 注意,必须是django.setup()之后才可以,要注意先后顺序的问题
from django.conf import settings
from django_redis import get_redis_connection
from api.models import GoodsID

conn = get_redis_connection('default')
q = random.choice(settings.QUEUE_)

def foo():
    queryset = GoodsID.objects.all()
    for i in queryset:
        print(i)


if __name__ == '__main__':
    foo()

运行正常:

1832669409940865024.png

注意!注意!!注意!!!

好多同学都会犯的一个错误,就是导包时的顺序错误,那就是还没有导入Django环境呢,就先用上了Django环境中的配置了,比如一个经典的报错误截图:

1832669410771337216.png

解决办法参考图片中的说明,就是先导入Django环境,你再进行导入操作。

无需创建Django项目,直接在脚本中使用Django的orm

前面说的脚本中使用Django环境,它必要的前提是Django项目必须存在。而现在要说的是,我只想在某个Python脚本中,单独使用Django的某个功能组件,比如使用Django的orm。

参考:https://www.cnblogs.com/sriba/p/13815176.html

sql
CREATE DATABASE  t1 DEFAULT CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci;
USE t1;
CREATE TABLE userinfo (
  id bigint NOT NULL AUTO_INCREMENT,
  name varchar(64) COLLATE utf8mb4_unicode_ci NOT NULL,
  pwd varchar(128) COLLATE utf8mb4_unicode_ci NOT NULL,
  email varchar(128) COLLATE utf8mb4_unicode_ci NOT NULL,
  PRIMARY KEY (id)
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci;