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

时间:2014-12-07 01:22:41

标签: 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)

任何提示?

2 个答案:

答案 0 :(得分:1)

为了加载app中的一些静态数据,为获取数据创建一个单独的文件 // file /app_util.py
def get_country():
    if Student.objects.all().count == 0:
       //your code
    else:
       //your code
导入app_util并从url.py中调用它 //文件/url.py
admin.autodiscover()
urlpatterns = patterns('equity_funds_investor_app',
                       # Examples:
                       url(r'^$', 'views.index'),
                      )
//make a call to save/get method
app_util.get_country()
注意:当你想在你的应用程序开始时保存/获取一些数据时,你可以遵循相同的过程 当你在runserver之后发出第一个请求时,url.py文件只处理一次 并调用您的自定义函数

答案 1 :(得分:0)

嗯,文档(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
    ...

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