当前位置: 首页 > 面试题库 >

Django在启动时加载资源

印劲
2023-03-14
问题内容

当Django启动时,如何从mysql数据库加载资源并将其放入内存(Redis)中,以供所有应用程序使用。

我已经看到了这个
[https://docs.djangoproject.com/en/dev/ref/applications/#django.apps.AppConfig.ready]

class MyAppConfig(AppConfig):
        def ready(self):

但是他们提到在ready函数中不使用db连接。我的网站启动时该怎么办?

我还可以在ready里面设置缓存值吗?

from django.core.cache import cache
cache.set()

问题答案:

由于您仅加载到Redis中,而不是创建保存在内存中并由您网站中所有应用共享的模型实例,因此最好的方法可能是使用自定义管理命令。

第二种解决方案是创建Django CLI,如e4c5在前文档中所述:

假设您已经设置了一个django项目,并且设置文件在名为main的应用程序中,这就是初始化代码的方式

import os, sys

# Setup environ
sys.path.append(os.getcwd())
os.environ.setdefault("DJANGO_SETTINGS_MODULE", "main.settings")

# Setup django
import django
django.setup()

# rest of your imports go here

from main.models import MyModel

# normal python code that makes use of Django models go here

for obj in MyModel.objects.all():
    print obj

上面可以执行为

python main/cli.py

由于您正在使用Redis,您是否真的也需要将内容存储在内存缓存中?但是,如果您也需要这样做,则可以通过CLI进行操作



 类似资料:
  • 问题内容: 我希望IPython或Python解释器在启动它们时自动加载模块。 可能吗? 例如,当我启动IPython时: 在教程页面中可以找到类似SymPy的live shell的 东西。 问题答案: 检查文件-您可以列出要在启动时加载的所有模块。

  • 问题内容: 我正在尝试从启动时自动加载模块,目前我在IPython启动库中有一个简单的脚本,其内容如下: 直接从外壳运行时可以正常工作,但是从脚本运行该行时,该模块似乎没有加载,我通过向其添加一些任意变量分配来确保已加载启动脚本: 并在启动IPython时(如预期的那样)预先分配了变量。 我试图在这里和这里寻找一些解决方案,但无处可寻,任何帮助将不胜感激,谢谢 问题答案: 我找到了一个解决方案,在

  • 问题内容: EJB似乎是延迟加载的-每当访问时。 但是,我想热切地初始化它们-即每当容器启动时。如何实现的(特别是在JBoss中) 该主题提供了一些提示,但并不令人满意。 问题答案: 从EJB 3.1开始,可以将模块启动和停止通知单例bean: 在EJB 3.1之前,没有标准的纯EJB解决方案。我建议将WAR添加到您的EAR并使用servlet-context-listener。

  • 问题内容: 是否可以在运行时动态加载Django应用?通常,应用是在初始化时使用settings.py中的INSTALLED_APPS元组加载的。但是,是否可以在运行时加载其他应用程序?我在不同情况下遇到此问题。例如,一种情况是在测试期间出现的,当时我想动态加载或卸载应用程序。 为了使问题更具体,想象一下我有一个名为我放置应用程序的目录,并且我想自动安装安装在其中的任何新应用程序,而无需手动编辑s

  • 问题内容: 我一点都不懂javascript。引导文档说 通过javascript调用模式:$(’#myModal’)。modal(options) 我不知道如何在页面加载时调用它。使用引导页面上提供的代码,我可以在元素单击时成功调用Modal,但是我希望它在页面加载时立即加载。 问题答案: 只需将要在页面加载时调用的模式包装在文档头部的jQuery 事件内,它就会弹出,如下所示: JS 的HTM

  • 问题内容: 我正在使用spring-cache来改善数据库查询,如下所示可以正常工作: 但是现在我想在启动时预先填充完整的图书缓存。这意味着我要调用并将所有值放入缓存。该例程应仅定期进行安排。 但是在使用时如何显式填充缓存? 问题答案: 像以前一样使用缓存,添加调度程序以更新缓存,下面是代码段。 确保你将为一个参数返回对象(默认)。否则,请公开其中的方法,以避免直接使用cacheManager。