Неправильно помещать код в settings.py
, кроме назначений.Она лучше подходит для команды управления:
from django.core.management.base import BaseCommand
from django.core.cache import cache
class Command(BaseCommand):
def handle(self, *args, **kwargs):
cache.clear()
self.stdout.write('Cleared cache\n')
, которую вы можете добавить в свой проект, вставив его в someapp/management/commands
.Например, вы можете создать новое приложение с именем utils
и добавить его к вашему INSTALLED_APPS
, и структура каталогов будет выглядеть следующим образом:
utils
├── __init__.py
└── management
├── __init__.py
└── commands
├── __init__.py
└── clearcache.py
Теперь вы можете очистить кеш, выполнив ./manage.py clearcache
.Если вы хотите запускать clearcache каждый раз, когда запускаете сервер, вы можете просто написать псевдоним оболочки, чтобы сделать это:
alias runserver='./manage.py clearcache && ./manage.py runserver'
В качестве альтернативы, я думаю, что вы можете написать его как отдельный скрипт и настроить параметрыэто требует от руки :
from django.conf import settings
# obviously change CACHES to your settings
CACHES = {
'default': {
'BACKEND': 'django.core.cache.backends.locmem.LocMemCache',
'LOCATION': 'unique-snowflake'
}
}
settings.configure(CACHES=CACHES) # include any other settings you might need
from django.core.cache import cache
cache.clear()
Написание такого автономного скрипта предотвратит циклический импорт и позволит вам импортировать его из вашего settings.py.Хотя нет никакой гарантии, что settings.py будет импортирован только один раз, так что в целом я бы этого избегал.Было бы хорошо, если бы сигнальная структура могла запускать событие один раз при каждом запуске приложения, после загрузки настроек для подобных вещей.