J'écris une classe Django Middleware que je veux exécuter une seule fois au démarrage, pour initialiser un autre code arbitraire. J'ai suivi la très belle solution postée par sdolan. aquí mais le message "Hello" est envoyé au terminal. deux fois . Par exemple
from django.core.exceptions import MiddlewareNotUsed
from django.conf import settings
class StartupMiddleware(object):
def __init__(self):
print "Hello world"
raise MiddlewareNotUsed('Startup complete')
et dans mon fichier de configuration Django, j'ai inclus la classe dans la section MIDDLEWARE_CLASSES
liste.
Mais lorsque j'exécute Django en utilisant runserver et que je demande une page, j'obtiens dans le terminal
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
Avez-vous une idée de la raison pour laquelle "Hello world" est imprimé deux fois ? Merci.
1 votes
Juste par curiosité, avez-vous compris pourquoi le code dans init .py est exécuté deux fois ?
12 votes
@Mutant il n'est exécuté que deux fois sous runserver ... c'est parce que runserver charge d'abord les applications pour les inspecter et ensuite démarre réellement le serveur. Même lors du chargement automatique de runserver, le code n'est exécuté qu'une fois.
4 votes
Wow j'ai été ici.... donc merci encore pour le commentaire @Pykler, c'est ce que je me demandais.