首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >如何在django项目中使用自定义状态代码?

如何在django项目中使用自定义状态代码?
EN

Stack Overflow用户
提问于 2019-07-01 08:48:59
回答 1查看 85关注 0票数 0

然而,在我当前的项目中切换到gunicorn时,我明白我在启动时处理模型缓存的方式不是很好。

设置

  • 应用程序名称:网站
  • 项目名称: personal_cms

有几个模型我配备了一个load方法。

代码语言:javascript
运行
复制
class SomeModel(models.Model):
    something      = models.CharField(max_length=60)
    something_else = models.URLField()

    @classmethod
    def load(cls):
        cache.set('{}'.format(cls.__name__), cls.objects.all(), None)

通常,每次在模型中发生变化时,都会发出调用这些方法的信号。为了在启动服务器时加载这些,我只是在wsgi.py中添加了以下内容:

代码语言:javascript
运行
复制
import os

from django.core.wsgi import get_wsgi_application
os.environ.setdefault('DJANGO_SETTINGS_MODULE', 'personal_cms.settings')

from website.models import SomeModel, SomeOtherModel
SomeModel.load()
SomeOtherModel.load()

application = get_wsgi_application()

问题所在

上面的代码可以工作,但只在使用python manage.py runserver时使用,而不使用gunicorn personal_cms.wsgi:application。据我所知,原因是运行manage.py时附带了特定的上下文。如果没有它,当gunicorn攻击wsgi.py时,应用程序就不会加载

代码语言:javascript
运行
复制
django.core.exceptions.AppRegistryNotReady: Apps aren't loaded yet.

现在我已经考虑过了,从项目的wsgi.py加载应用程序的模型似乎是错误的。那么,我应该在哪里调用load方法,以便在启动时缓存模型--而不是选择wsgi服务器?

EN

Stack Overflow用户

回答已采纳

发布于 2019-07-01 10:40:38

所有启动代码都应该放在ready方法的AppConfig中。然后在IBSTALLED_APPS上引用config类,而不是应用程序名。这是保证在启动时调用。

AppConfig文档

票数 1
EN
查看全部 1 条回答
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/56832618

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档