从以下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()
文件: myapp/apps.py
from django.apps import AppConfig
class MyAppConfig(AppConfig):
name = 'myapp'
verbose_name = "My Application"
def ready(self):
pass # startup code here
default_app_config = 'myapp.apps.MyAppConfig'
第一个答案似乎不再起作用,在首次请求时加载urls.py。
最近起作用的是将启动代码放入你的INSTALLED_APPS 初始化 .py 中的任何一个中,例如myapp/__init__.py
def startup():
pass # load a big thing
startup()
使用./manage.py runserver...
时,它将执行两次,但这是因为runserver具有一些技巧,可以首先验证模型等…常规部署,甚至在runserver自动重新加载时,也仅执行一次。