Bob_94 Bob_94 - 7 months ago 68
Python Question

Execute code when Django starts ONCE only?

I'm writing a Django Middleware class that I want to execute only once at startup, to initialise some other arbritary code. I've followed the very nice solution posted by sdolan here, but the "Hello" message is output to the terminal twice. E.g.

from django.core.exceptions import MiddlewareNotUsed
from django.conf import settings

class StartupMiddleware(object):
def __init__(self):
print "Hello world"
raise MiddlewareNotUsed('Startup complete')

and in my Django settings file, I've got the class included in the

But when I run Django using runserver and request a page, I get in the terminal

Django version 1.3, using settings 'config.server'
Development server is running at
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

Any ideas why "Hello world" is printed twice? Thanks.


Don't do it this way.

You don't want "middleware" for a one-time startup thing.

You want to execute code in the top-level That module is imported and executed once.

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

urlpatterns = ...