我正在编写一个Django中间件类,我只想在启动时执行一次,以初始化其他任意代码.我遵循了sdolan here发布的非常好的解决方案,但是"Hello"消息被输出到终端twice.例如.

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》要印两次吗?谢谢

推荐答案

Pykler的答案更新如下:Django 1.7现在有了hook for this个版本


不要这样做.

你不需要一次性启动的"中间件".

您希望在顶层urls.py中执行代码.该模块被导入并执行一次.

urls.py

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

urlpatterns = ...

one_time_startup()

Python相关问答推荐

有什么方法可以修复奇怪的y轴Python matplotlib图吗?

使用decorator 重复超载

自动编码器和极坐标

有没有方法可以修复删除了换码字符的无效的SON记录?

在for循环中仅执行一次此操作

如何在Deliveryter笔记本中从同步上下文正确地安排和等待Delivercio代码中的结果?

带条件计算最小值

如何让剧作家等待Python中出现特定cookie(然后返回它)?

从收件箱中的列中删除html格式

海运图:调整行和列标签

将数据框架与导入的Excel文件一起使用

Excel图表-使用openpyxl更改水平轴与Y轴相交的位置(Python)

从numpy数组和参数创建收件箱

在Python中,从给定范围内的数组中提取索引组列表的更有效方法

如何在TensorFlow中分类多个类

处理具有多个独立头的CSV文件

以逻辑方式获取自己的pyproject.toml依赖项

合并与拼接并举

如何删除重复的文字翻拍?

根据客户端是否正在传输响应来更改基于Flask的API的行为