Лучшее место для инициализации переменной из таблицы базы данных postgres после запуска проекта django

У меня есть проект на django, в котором у меня есть несколько таблиц базы данных.

Одна из таблиц базы данных предназначена для хранения сообщений и их заголовков. Это помогает мне создавать /изменять эти сообщения с помощью моего django-администратора.

Теперь я хочу инициализировать переменную (как словарь) из этой таблицы следующим образом:

MY_MSGS = {record.name : {'title':record.title, 'message':record.message} for record in MyTable.objects.all()}

На данный момент это должно произойти при запуске сервера. MY_MSGS должен быть доступен для различных файлов просмотра.

К вашему сведению, у меня есть несколько файлов просмотра, которые все импортированы из views.py

Я думаю, что основная проблема заключается в том, что вы должны запускать запрос не сразу, а после того, как Django инициализирует модели и т.д.

Мы можем сделать это, отложив процедуру загрузки, и сделать это, когда нам действительно понадобится сообщение, с помощью:

def get_message(name):
    cache = get_message.cache
    if cache is None:
        cache = get_message.cache = {
            record.name: {'title': record.title, 'message': record.message}
            for record in MyTable.objects.all()
        }
    return cache.get(name)


get_message.cache = None

и, таким образом, использовать это как функцию, например:

get_message(my_record_name)

тогда, конечно, все еще важно убедиться, что вы никогда не вызываете функцию во время инициализации, поэтому не передавайте это как default=… < sup>[Django-doc] и т.д. из поля метода, например.

Дополнительным преимуществом является то, что до тех пор, пока вам не понадобится какое-либо сообщение, вы не будете получать их. Если мы это сделаем, мы не будем делать это во второй раз.

Но обычно это может быть проблемой: обычно вы не часто перезапускаете сервер Django в процессе работы, поэтому сообщения могут оставаться старыми в течение нескольких месяцев.

Вернуться на верх