首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >只在开发和生产中执行Django代码

只在开发和生产中执行Django代码
EN

Stack Overflow用户
提问于 2018-12-21 11:53:04
回答 2查看 545关注 0票数 0

我需要执行一些内务代码,但只在开发或生产环境中。不幸的是,所有管理命令的执行方式都类似于runserver。是否有任何干净的方法来分类什么是执行环境和有选择地运行代码。

我在sys.argv中看到了一些解决方案,比如'runserver‘,但是它不适用于生产。看起来不太干净。django提供了什么来对正在执行的所有不同场景代码进行分类吗?

编辑

真正的问题是,一旦应用程序加载了一些经常被访问的数据,我们就需要初始化本地缓存。通常,我希望获取一些特定信息的DB并缓存它(当前在内存中)。问题是,当它试图获取DB时,可能不会创建表,实际上可能根本没有创建迁移文件。因此,当我运行makemigrations/迁移时,它将运行以下代码,尝试从DB获取,并抛出错误声明表不存在。但是,如果我不能运行table迁移/迁移,就不会有表,这是我想要避免的一个循环。这部分代码将为所有管理命令运行,但我想将它的执行限制在应用程序实际上是在服务请求时(即当需要缓存时),而不是针对任何管理命令(包括用户定义的命令)。

代码语言:javascript
复制
```javascript

从django.apps导入AppConfig

从my_app.signals导入app_created

类MyAppConfig(AppConfig):

代码语言:javascript
复制
name = 'my_app'
代码语言:javascript
复制
def ready(self):
代码语言:javascript
复制
    import my_app.signals
代码语言:javascript
复制
    # Code below should be executed only in actual app execution
代码语言:javascript
复制
    # And not in makemigration/migrate etc management commands
代码语言:javascript
复制
    app_created.send(sender=MyAppConfig, sent_by="MyApp")
代码语言:javascript
复制

( Q)发送应用程序创建的执行信号,而不是执行,因为管理命令,如制造,迁移等。

EN

回答 2

Stack Overflow用户

发布于 2018-12-21 12:02:42

做这件事有很多不同的方法。但是通常,当我创建一个生产(或分阶段,或开发)服务器时,我会设置一个环境变量。并根据该环境变量动态地决定要加载哪个设置文件。

想象一下Django设置文件中的如下内容:

代码语言:javascript
复制
import os

ENVIRONMENT = os.environ.get('ENVIRONMENT', 'development')

然后你可以用

代码语言:javascript
复制
from django.conf import settings

if settings.ENVIRONMENT == 'production':
    # do something only on production
票数 1
EN

Stack Overflow用户

发布于 2019-01-11 10:50:38

因为,我没有得到一个令人信服的答案,我设法找到了一个解决办法,虽然不是100%干净。我想我应该和你分享我的解决方案。

代码语言:javascript
复制
import sys
from django.conf import settings

if (settings.DEBUG and 'runserver' in sys.argv) or not settings.DEBUG:
     """your code to run only in development and production"""

其基本原理是,如果代码不处于调试模式,则不管发生什么情况,都可以运行它。但是,如果处于调试模式,则检查进程执行是否在参数中包含runserver。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/53884363

复制
相关文章

相似问题

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