我正在编写一个Django中间件类,该类只想在启动时执行一次,以初始化一些其他人工代码。我遵循了sdolan 在此处发布的非常好的解决方案,但是“ Hello”消息两次输出到终端。例如
from django.core.exceptions import MiddlewareNotUsed
from django.conf import settings
class StartupMiddleware(object):
def __init__(self):
print "Hello world"
raise MiddlewareNotUsed('Startup complete')
在我的Django设置文件中,该类已包含在MIDDLEWARE_CLASSES
列表中。
但是当我使用runserver运行Django并请求页面时,我进入了终端
Django version 1.3, using settings 'config.server'
Development server is running at http://127.0.0.1:8000/
Quit the server with CONTROL-C.
Hello world
[22/Jul/2011 15:54:36] "GET / HTTP/1.1" 200 698
Hello world
[22/Jul/2011 15:54:36] "GET /static/css/base.css HTTP/1.1" 200 0
有什么想法为什么要打印两次“ Hello world”?谢谢。
文件: myapp/apps.py
from django.apps import AppConfig
class MyAppConfig(AppConfig):
name = 'myapp'
verbose_name = "My Application"
def ready(self):
pass # startup code here
文件: myapp/__init__.py
default_app_config = 'myapp.apps.MyAppConfig'
对于Django <1.7
第一个答案似乎不再起作用,在首次请求时加载urls.py
。
最近起作用的是将启动代码放入你的INSTALLED_APPS 初始化 .py
中的任何一个中,例如myapp/__init__.py
def startup():
pass # load a big thing
startup()
使用./manage.py runserver...
时,它将执行两次,但这是因为runserver具有一些技巧,可以首先验证模型等…常规部署,甚至在runserver
自动重新加载时,也仅执行一次。
问题内容: 我正在编写一个Django中间件类,该类只想在启动时执行一次,以初始化一些其他人工代码。我遵循了sdolan 在此处发布的非常好的解决方案,但是“ Hello”消息两次输出到终端。例如 在我的Django设置文件中,该类已包含在列表中。 但是当我使用runserver运行Django并请求页面时,我进入了终端 有什么想法为什么要打印两次“ Hello world”?谢谢。 问题答案:
问题内容: 我正在使用Camel&Spring进行Java项目。在Spring完成其工作并且Camel完成所有路径的构建之后,我们想在单例bean上触发一个initialize方法。 我们无法在类创建时调用该方法,因为它具有从@Component spring批注中拾取的与其他类的动态链接,并且我们不知道何时/是否已加载这些类,而尚未真正将init方法作为a的一部分运行构造函数。 我如何才能在Ca
如果必须保证一个方法在spring boot应用程序启动时只执行一次,那么的最佳替代方案是什么?
问题内容: 我很难弄清楚为什么while循环实际上不会循环。它运行一次并停止。 我正在尝试使其循环,以便用户能够多次转换单位。任何帮助都欢迎! 问题答案: 问题在于,当您呼叫时,它会占用该号码,但不会占用该号码之后的换行符。要解决此问题,只需在调用后放一行代码。 示例和完整说明: 假设您输入“ km”,按回车,“ 123”,按回车。从程序的角度来看,输入流为。 该代码获取值,并且使输入超出第一个。
问题内容: 我想知道是否有一种方法可以像使用bash的.bash_profile或.profile脚本那样在进入python shell时自动运行命令。我想自动导入一些模块,这样我每次跳入shell时都不必键入整个shebang。 谢谢, 问题答案: 是的,你可以使用环境变量来做到这一点所概述这里
问题内容: 尝试实现Spring批处理,但遇到一个奇怪的问题,我们的 类仅执行一次。 以下是详细信息。 如果我们在数据库中有1000行。 我们的项目读取器从数据库中获取1000行,并将列表传递给 成功删除所有项目。 现在,ItemReader再次尝试从数据库获取数据,但是没有找到,因此返回NULL,因此执行停止。 但是我们已将批处理配置为使用调度程序执行,即每分钟执行一次。 现在,如果我们通过转储