我正在学习如何在我的简单Web应用程序中实现django缓存框架。
我使用了postgresql数据库,我创建了my_cache_table。 我尝试使用“每视图缓存”技术,但它不起作用。 my_cache_table上没有创建数据库条目。
#settings.py
MIDDLEWARE_CLASSES = [
'django.middleware.security.SecurityMiddleware',
'django.contrib.sessions.middleware.SessionMiddleware',
'django.middleware.common.CommonMiddleware',
'django.middleware.csrf.CsrfViewMiddleware',
'django.contrib.auth.middleware.AuthenticationMiddleware',
'django.contrib.auth.middleware.SessionAuthenticationMiddleware',
'django.contrib.messages.middleware.MessageMiddleware',
'django.middleware.clickjacking.XFrameOptionsMiddleware',
]
# Database
DATABASES = {
'default': {
'ENGINE': 'django.db.backends.postgresql_psycopg2',
'NAME': 'dbname',
'USER': 'username',
'PASSWORD': 'password',
'HOST': 'localhost',
'PORT': '',
}
}
CACHES = {
'default': {
'BACKEND': 'django.core.cache.backends.db.DatabaseCache',
'LOCATION': 'my_cache_table',
'TIMEOUT': 3600,
'OPTIONS': {
'MAX_ENTRIES': 1000
}
}
}
#urls.py
urlpatterns = [
url(r'^$', views.search_form),
url(r'^s', cache_page(60 * 60)(views.search)),
]
#views.py
from .scraper import scrape
from django.views.decorators.cache import cache_page
def search_form(request):
return render(request, 'scraper/search_form.html')
def search(request):
q = request.GET["k"]
ftitles, fprices, furls = scrape(q)
context = {'ftitles': ftitles, 'fprices': fprices , 'furls': furls , 'q': q}
return render(request, 'scraper/output.html', context)
这就是我的网络应用程序的工作原理 -
1.用户输入要搜索的关键字
2.Keyword被发送到脚本“scrape.py”并处理并输出并显示在页面output.html中。
我的问题 -
如果我可以缓存搜索视图响应,那么可以避免在搜索视图中发生的重大过程。
因此,当用户搜索已缓存的相同关键字时,可以从缓存中显示响应,从而避免该过程。
我尝试在网址中使用按视图缓存但不起作用
请指出我在这里缺少的东西。
感谢任何帮助。
答案 0 :(得分:0)
找到解决方案,我发布它,因为它可能会帮助某人。
问题是我忘了在url.py文件中导入缓存装饰器 我想知道为什么runserver之前没有给我一个错误。那么今天它确实给我带来了错误。
NameError: name 'cache_page' is not defined
更新后,我的urls.py per-view缓存工作得非常好。
from django.views.decorators.cache import cache_page
我学到的东西 - 重新启动你的cmd,然后重新启动你的服务器。