小编典典

仅在 Django 启动 ONCE 时执行代码?

all

我正在编写一个 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”被打印两次?谢谢。


阅读 64

收藏
2022-06-10

共1个答案

小编典典

从下面 Pykler 的回答中更新:Django 1.7
现在有一个钩子


不要这样做。

您不希望一次性启动事物的“中间件”。

你想在顶层执行代码urls.py。该模块被导入并执行一次。

urls.py

from django.confs.urls.defaults import *
from my_app import one_time_startup

urlpatterns = ...

one_time_startup()
2022-06-10