独立进程使用django模型(django.setup()使用)

2023-10-27

独立进程使用django模型

通过在独立进程中使用 Django 模型,你可以充分利用 Django 框架提供的数据库访问和模型层功能,更方便地进行数据处理、任务处理和与其他系统的集成。它提供了一种简单且高效的方式来利用 Django 强大的功能,并使你的代码更易于维护和扩展。

独立进程使用django模型 步骤

  1. 在独立进程的代码文件开头,需要设置 Django 的环境变量,以使其能够正确加载和使用 Django 框架。添加以下代码:
import os
import django

# 设置 DJANGO_SETTINGS_MODULE 环境变量(引入settings文件)
os.environ.setdefault('DJANGO_SETTINGS_MODULE', 'your_project.settings')

# 加载 Django 项目配置
django.setup()
  1. 在独立进程中导入需要使用的 Django 模型,可以直接使用 from your_app.models import YourModel 这样的导入语句来引入需要的模型类。

注意:在独立进程中使用 Django 模型需要确保你的 Django 项目已正确配置并且数据库连接可用。同时,你在独立进程中的代码修改不会自动触发 Django 的信号和中间件,因此需要手动处理相关逻辑。

django.setup()

django.setup() 是 Django 中的一个函数,主要用于设置 Django 的环境和配置。它需要在使用 Django 模型之前调用,以确保 Django 的各项功能能够正常工作。

第一个过程是从INSTALLED_APP中导入每一个内容,这个过程中代码不应该导入任何models,即使是间接的导入。
第二个过程Django尝试导入models中的子模块,并且必须通过models.py和models/init.py。
第三个过程是调用每个application的ready()方法。

os.environ['DJANGO_SETTINGS_MODULE'] = 'project.settings'
django.setup()

DJANGO_SETTINGS_MODULE环境变量已告知Django使用哪个settings.py文件。
Django会自动根据这个settings.py文件,加载其中的INSTALLED_APPS配置,完成必要的应用初始化。

RuntimeError: populate() isn’t reentrant

独立进程的入口调用了django.setup(),但是独立进程在import其他 模块.py文件,其他py文件中又import了其他django模型。
但是在这个引入的py中你又不能再调 django.setup(),因为这个东西只能调一次。

解决思路:
通过apps.get_model()来导入模型,避免重复调用django.setup()

apps.get_model() 是 Django 的一个方法,可以在没有调用 django.setup() 的情况下导入模型。

from django.apps import apps

Model = apps.get_model('app_label', 'model_name')
  • 取第一个参数 app_label 是应用的标签
  • 第二个参数 model_name 是模型的名称
    这个方法会直接从 Django 的注册表中获取模型类,而不会进行任何初始化。
    使用 apps.get_model() 的好处是:
  • 避免重复调用 django.setup()
  • 解决循环导入错误
  • 在 Django 初始化之前也可以导入模型
    总的来说:
    通过 apps.get_model() ,可以在无需调用 django.setup() 的情况下,安全地导入 Django 模型。
    它通过直接从注册表获取模型类,解决了导入模型前需要初始化的问题。

独立进程使用django模型报错:Apps aren’t loaded yet

问题描述:
独立进程使用django模型,导入模型的时候报错:django.core.exceptions.AppRegistryNotReady: Apps aren't loaded yet.

问题原因:
出现这个问题的原因可能有如下情况:

  1. 你根本没有调django.setup()
  2. 你调django.setup()的位置不对,在加载模型之前了。(应该放在独立进程最前面)
  3. 【隐藏的比较深】你调django.setup()时,应用名xxx和和某个文件名xxx.py重名了,而这个xxx.py中又用了django模型,但是这个模型对应的django应用还没执行到。

3个问题的本质都是django.setup() 没有执行完,就使用模型。

我们重点描述一下情况3:

django.setup() 会循环调传入你settings.py配置的应用名来调
django源码路径\django\apps\config.py 下的create方法,如下:

@classmethod
def create(cls, entry):
    """
    Factory that creates an app config from an entry in INSTALLED_APPS.
    """
    # create() eventually returns app_config_class(app_name, app_module).
    app_config_class = None
    app_name = None
    app_module = None

    # If import_module succeeds, entry points to the app module.
    try:
        app_module = import_module(entry)
    except Exception:
        pass
    else:
        # If app_module has an apps submodule that defines a single
        # AppConfig subclass, use it automatically.
        # To prevent this, an AppConfig subclass can declare a class
        # variable default = False.
        # If the apps module defines more than one AppConfig subclass,
        # the default one can declare default = True.
  • entry 参数就是你应用名,比如三方的应用名叫:‘django.contrib.auth’,我们自己的应用名xxx。

import_module()存在一个限制就是:

  • 如果同时存在一个.py文件和一个包(包含__init__.py)具有相同的名称
  • 那么import_module()会优先导入.py文件

问题就出现在这里了,所以我们应用命名时候,注意这种情况- -!

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

独立进程使用django模型(django.setup()使用) 的相关文章

  • 为什么我不能导入 geopandas?

    我唯一的代码行是 import geopandas 它给了我错误 OSError Could not find libspatialindex c library file 以前有人遇到过这个吗 我的脚本运行得很好 直到出现此错误 请注意
  • 用 Python 编写一个无操作或虚拟类

    假设我有这样的代码 foo fooFactory create 由于种种原因 fooFactory create 可能无法创建实例Foo 如果可以的话我想要fooFactory create 返回一个虚拟 无操作对象 这个对象应该是完全惰性
  • Dask DataFrame 的逐行处理

    我需要处理一个大文件并更改一些值 我想做这样的事情 for index row in dataFrame iterrows foo doSomeStuffWith row lol doOtherStuffWith row dataFrame
  • 类属性在功能上依赖于其他类属性

    我正在尝试使用静态类属性来定义另一个静态类属性 我认为可以通过以下代码来实现 f lambda s s 1 class A foo foo bar f A foo 然而 这导致NameError name A is not defined
  • Python3 查找 2 个列表中有多少个差异才能相等

    假设我们有 2 个列表 always具有相同的长度和always包含字符串 list1 sot sot ts gg gg gg list2 gg gg gg gg gg sot 我们需要找到 其中有多少项list2应该改变 以便它等于lis
  • 唯一的图像哈希值即使 EXIF 信息更新也不会改变

    我正在寻找一种方法来为 python 和 php 中的图像创建唯一的哈希值 我考虑过对原始文件使用 md5 和 因为它们可以快速生成 但是当我更新 EXIF 信息 有时时区关闭 时 它会更改总和 并且哈希也会更改 有没有其他方法可以为这些文
  • 使用Python将图像转换为十六进制格式

    我的下面有一个jpg文件tmp folder upload path tmp resized test jpg 我一直在使用下面的代码 Method 1 with open upload path rb as image file enco
  • 在 Windows 上使用 IPython 笔记本时出现 500 服务器错误

    我刚刚在 Windows 7 Professional 64 位上全新安装了 IPython 笔记本 我采取的步骤是 从以下位置安装 Python 3 4 1http python org http python org gt pip in
  • Python int 太大,无法放入 SQLite

    我收到错误 OverflowError Python int 太大 无法转换为 SQLite INTEGER 来自以下代码块 该文件约25GB 因此必须分部分读取 length 6128765 Works on partitions of
  • 如何逐像素绘制正方形(Python,PIL)

    在空白画布上 我想使用 Pillow 逐像素绘制一个正方形 我尝试使用 img putpixel 30 60 155 155 55 绘制一个像素 但它没有执行任何操作 from PIL import Image def newImg img
  • FastText - 由于 C++ 扩展未能分配内存,无法加载 model.bin

    我正在尝试使用 FastText Python APIhttps pypi python org pypi fasttext https pypi python org pypi fasttext虽然 据我所知 此 API 无法加载较新的
  • ValueError:无法插入 ID,已存在

    我有这个数据 ID TIME 1 2 1 4 1 2 2 3 我想按以下方式对数据进行分组ID并计算每组的平均时间和规模 ID MEAN TIME COUNT 1 2 67 3 2 3 00 1 如果我运行此代码 则会收到错误 ValueE
  • 使用 lambda 函数更改属性值

    我可以使用 lambda 函数循环遍历类对象列表并更改属性值 对于所有对象或满足特定条件的对象 吗 class Student object def init self name age self name name self age ag
  • 是否可以写一个负的python类型注释

    这可能听起来不合理 但现在我需要否定类型注释 我的意思是这样的 an int Not Iterable a string Iterable 这是因为我为一个函数编写了一个重载 而 mypy 不理解我 我的功能看起来像这样 overload
  • Scrapy 蜘蛛无法工作

    由于到目前为止没有任何效果 我开始了一个新项目 python scrapy ctl py startproject Nu 我完全按照教程操作 创建了文件夹和一个新的蜘蛛 from scrapy contrib spiders import
  • 如何在单独的文件中使用 FastAPI Depends 作为端点/路由?

    我在单独的文件中定义了一个 Websocket 端点 例如 from starlette endpoints import WebSocketEndpoint from connection service import Connectio
  • 从 dask 数据框中的日期时间序列获取年份和星期?

    如果我有一个 Pandas 数据框和一个日期时间类型的列 我可以按如下方式获取年份 df year df date dt year 对于 dask 数据框 这是行不通的 如果我先计算 像这样 df year df date compute
  • 使用 Keras 和 fit_generator 绘制 TensorBoard 分布和直方图

    我正在使用 Keras 使用 fit generator 函数训练 CNN 这似乎是一个已知问题 https github com fchollet keras issues 3358TensorBoard 在此设置中不显示直方图和分布 有
  • 如何使用 Django (Python) 登录表单?

    我在 Django 中构建了一个登录表单 现在我遇到了路由问题 当我选择登录按钮时 表单不会发送正确的遮阳篷 我认为前端的表单无法从 查看 py 文件 所以它不会发送任何 awnser 并且登录过程无法工作 该表单是一个简单的静态 html
  • 使用 numpy 加速 for 循环

    下一个 for 循环如何使用 numpy 获得加速 我想这里可以使用一些奇特的索引技巧 但我不知道是哪一个 这里可以使用 einsum 吗 a 0 for i in range len b a numpy mean C d e f b i

随机推荐

  • ROS获取串口信息及后续处理(以惯导IMU XW-GI5651为例)

    一 问题简介 自动驾驶小车的底层的数据相当一部分是通过串口发送的 以惯导为例 惯导的定位信息大概如下所示 GPFPD 0 1666 330 0 000 0 015 0 129 0 00000000 0 00000000 0 000 0 00
  • Pycharm激活方法

    pycharm 激活 JetBrains IDEA 系列产品通用激活方法 1 打开激活窗口 2 选择 Activate new license with License server 用license server 激活 3 在 Licen
  • python子类继承父类参数传递的简便写法

    当父类参数较多 子类又要增加新的参数时 如果一个一个照抄一遍参数容易出错 这里可以借助 args来简便的进行父类初始化 利用 父类My sprit有一大堆参数 子类UAV需要增加三个新参数scout range communicate ra
  • Java多线程安全问题和锁

    多线程安全问题和锁 文章目录 多线程安全问题和锁 线程在jvm中的特点 锁的出现 synchronized 关键字 监视器锁monitor lock 死锁的产生和避免 什么是线程安全问题 当多个线程同时操作同一个数据时 可能会出现数据不一样
  • 第14天-ElasticSearch环境配置,构建检索服务及商品上架到ES库

    1 ElasticSearch概念 官网介绍 https www elastic co cn what is elasticsearch 官网学习文档 https www elastic co guide en elasticsearch
  • 三、Vite 文件系统 import.meta.glob

    文章目录 一 参考 二 import meta glob 介绍 2 1 import meta glob 的作用 2 2 eager true 一次引入所有 2 3 Glob 导入注意事项 三 遍历 import meta glob 文件系
  • 水库大坝安全管理主要问题和维护措施

    水库大坝作为防灾减灾 解决水资源流失和供需矛盾的重要利民工程 对于维护社会稳定 确保社会经济持续发展具有非常重要的作用 但由于我国大部分水库都建设于 20世纪 70 80 年代 如山东省棘洪滩水库其建设开工时间为1986 年 当时我国经济条
  • Spark数据类型SparseMatrix

    SparseMatrix Spark的mllib包中提供了机器学习的两种基本数据类型 DenseMatrix 稠密 和 SparseMatrix 稀疏 在初始化对象的时候可以使用Matrices伴生对象产生 先看下示例代码 import o
  • Linux-------------DNS域名解析:正反解析

    DNS域名解析 DNS简介 前期准备 正方解析实验 正向解析实验 反向解析实验 常见错误 修改resolv conf 修改hostname 检查DNS是否为ip地址 归纳总结 DNS简介 域名管理系统DNS Domain Name Syst
  • Pentaho Report Designer 入门教程(二)

    Pentaho Report Designer 入门教程 二 采用Pentaho Report Designer5 1版本 也是最新的版本 一 安装和介绍 介绍部分内容略 首先安装jdk 并配置java相关环境变量 下载pentaho re
  • stm32学习总结:2、搭建基于CLion的stm32开发环境

    stm32学习总结 2 搭建基于CLion的stm32开发环境 文章目录 stm32学习总结 2 搭建基于CLion的stm32开发环境 1 前言 2 相关工具和环境准备 2 1 STM32CubeMX 前置工程创建工具 2 2 CLion
  • 敏捷:什么是用户故事(User Story)

    摘要 一件用户通过系统完成他一个有价值的目标 买一罐饮料 的事 这样的过程就叫 用户案例 user case 或者 用户故事 user story 本文描述了敏捷开发的技巧 如何以用户故事管理项目 什么是用户故事 user story 假定
  • 内网渗透-frp 用于内网穿透的基本配置和使用

    frp 用于内网穿透的基本配置和使用 文章目录 frp 用于内网穿透的基本配置和使用 前言 frps frpc 后记 参考 前言 frp 是一个专注于内网穿透的高性能的反向代理应用 支持 TCP UDP HTTP HTTPS 等多种协议 可
  • 【开源介绍】命令行的艺术( the-art-of-command-line )

    1 概述 转载 命令行的艺术 the art of command line
  • Blob数据类型、数据库事务

    1 Bolb是二进制长对象的意思 通常用于存储大文件 通过二进制数据保存到数据库里 并可以从数据库里恢复指定文件 2 如果需要将图片插入数据库 不能通过普通的SQL语句完成 Bolb常量无法表示 所以将Bolb数据插入数据库需要使用Prep
  • 合成孔径SAR卫星影像专业术语

    转载自 http www kosmos image com index php m content c index a show catid 73 id 4132 目录 Across track Active Remote Sensing
  • 初学机器学习:直观解读KL散度的数学概念

    选自thushv com 作者 Thushan Ganegedara 机器之心编译 机器学习是当前最重要的技术发展方向之一 近日 悉尼大学博士生 Thushan Ganegedara 开始撰写一个系列博客文章 旨在为机器学习初学者介绍一些基
  • 深度学习(Deep Learning)读书思考六:循环神经网络一(RNN)

    概述 循环神经网络 RNN Recurrent Neural Network 是神经网络家族中的一员 擅长于解决序列化相关问题 包括不限于序列化标注问题 NER POS 语音识别等 RNN内容比较多 分成三个小节进行介绍 内容包括RNN基础
  • QT窗体间传值总结之Signal&Slot

    在写程序时 难免会碰到多窗体之间进行传值的问题 依照自己的理解 我把多窗体传值的可以使用的方法归纳如下 1 使用QT中的Signal Slot机制进行传值 2 使用全局变量 3 使用public形式的函数接口 4 使用QT中的Event机制
  • 独立进程使用django模型(django.setup()使用)

    文章目录 独立进程使用django模型 独立进程使用django模型 步骤 django setup RuntimeError populate isn t reentrant 独立进程使用django模型报错 Apps aren t lo