1. ホーム
  2. パイソン

[解決済み】Djangoの起動時にコードを実行するのは1回だけ?

2022-04-07 22:33:13

質問

私は Django Middleware クラスを書いていて、起動時に一度だけ実行し、他の arbritary コードを初期化したいのです。私は sdolan が投稿したとても素晴らしい解決策に従いました。 ここで しかし、ターミナルに "Hello" というメッセージが出力されます。 2回 . 例

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" が2回表示されるのか、何か思い当たることはありませんか?ありがとうございます。

解決方法を教えてください。

以下のPyklerの回答から更新しました。Django 1.7 では このためのフック


こんなやり方はやめましょう。

一度だけ起動するものには、"middleware"は必要ないでしょう。

トップレベルの urls.py . そのモジュールはインポートされて一度だけ実行されます。

urls.py

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

urlpatterns = ...

one_time_startup()