我想在每次重启/重装django服务器时刷新memcached。我使用cherrypy进行生产和内置服务器进行开发。
我会在CACHES之后将它添加到settings.py:
from django.core.cache import cache
cache.clear()
但它会进行递归导入:
Error: Can't find the file 'settings.py' in the directory containing 'manage.py'. It appears you've customized things.
You'll have to run django-admin.py, passing it your settings module.
(If the file settings.py does indeed exist, it's causing an ImportError somehow.)
make: *** [server] Error 1
还有其他建议吗?感谢。
答案 0 :(得分:54)
将代码置于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,你可以编写一个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只会导入一次,所以一般情况下我都会避免这种情况。如果信号框架可以在每次启动应用程序时触发一次事件,在为这样的内容加载设置之后,这将是很好的。
答案 1 :(得分:5)
答案 2 :(得分:1)
如果代码以需要新缓存的方式更改,通常不会使缓存无效。不在每次重启。
最好使用Django功能处理:guard let urlW = URL(string: "https://en.wikipedia.org/wiki/\(place.name)") else { return }
let svc = SFSafariViewController.init(url: urlW)
self.navigationController?.pushViewController(svc, animated: true)
[1],并在每次更改更改缓存数据格式的代码时增加该数字。
这样,在部署时,您在部署新代码时会自动使用新缓存,但如果您的代码与以前的代码缓存兼容,请保留缓存。
[1](https://docs.djangoproject.com/en/2.0/ref/settings/#std:setting-CACHES-VERSION)
答案 3 :(得分:0)
这个怎么样?在settings.py
中定义一个布尔值,例如CLEAR_CACHE_ON_RESTART = True
,然后在其他地方检查它是否为True
。如果是,则清除缓存并将其设置为False
。此代码可以放在任何视图中(如主视图),甚至可能放在manage.py
或urls.py
中(虽然我没有检查这个但看起来不太好)。试一试!
答案 4 :(得分:0)
如果您有多个缓存后端,则print(file_search(['/home', ['user1'], ['user2', ['my pictures'],
['desktop', 'not this', 'and not this', ['new folder',
'hereiam.py']]], 'work.ovpn', 'prometheus.7z', ['user3',
['temp'], ], 'hey.py'], 'hereiam.py'))
仅清除默认缓存。为确保您的django.core.cache.cache.clear()
命令清除所有后端的缓存,您应使用以下命令:
clear_cache