把代碼放在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
堅持把它添加到您的項目。通過做./manage.py clearcache
utils
├── __init__.py
└── management
├── __init__.py
└── commands
├── __init__.py
└── clearcache.py
您可以立即清除緩存:例如,你可以創建一個名爲utils
新的應用程序,並添加到您的INSTALLED_APPS
和目錄結構是這樣的。如果你想每次運行clearcache您RUNSERVER你可以寫一個shell別名做到這一點:
alias runserver='./manage.py clearcache && ./manage.py runserver'
或者我認爲你可以把它寫成一個獨立的腳本和configure the settings it requires by hand:
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只能導入一次,所以一般情況下我會避免這種情況。如果信號框架可以在每次啓動應用程序時觸發一次事件,那麼在爲這樣的東西加載設置之後,它會很好。
當我在外部對服務器進行HUP操作時不起作用,無論如何重新啓動/重新加載服務器,我都希望它調用清除緩存。我在生產中使用'runit'來啓動/停止cherrypy。在這種情況下,你的建議不起作用。我希望解決方案可用於不同的設置。 – 2011-05-09 22:49:02
我不知道'runit'是什麼,但是你可以隨時使用管理命令。 – zeekay 2011-05-09 22:49:51
我假設你有某種初始化腳本?只需添加一個對clearcache的調用即可。 – zeekay 2011-05-09 22:51:08