使用 Django 1.7 中的 AppConfig 就绪方法在 Django 启动时加载静态数据

Chi*_*mar 5 django django-1.7

我有一些静态位置数据要加载,以便它在整个应用程序中都可用,就像内存缓存一样。

我试图覆盖 AppConfig 上的 ready() 但数据没有从数据库加载,而且 ready() 也被调用了两次。

from django.apps import AppConfig


class WebConfig(AppConfig):
    name = 'useraccount'
    verbose_name = 'User Accounts'
    locations = []

   def ready(self):
        print("Initialising...")
        location = self.get_model('Location')
        all_locations = location.objects.all()
        print(all_locations.count())
        self.locations = list(all_locations)
Run Code Online (Sandbox Code Playgroud)

任何提示?

And*_*ows 1

好吧,文档(https://docs.djangoproject.com/en/1.7/ref/applications/#django.apps.AppConfig.ready)告诉您避免在ready()函数中使用数据库调用,而且它可能会被调用两次。

避免双重调用很容易:

def ready(self):
    if self.has_attr('ready_run'): return
    self.ready_run = True
    ...
Run Code Online (Sandbox Code Playgroud)

但我仍在尝试找到正确的方法来进行基于数据库的初始化。如果我发现任何东西,我会更新。