一个服用类固醇的django'cache_page'decorator
django-fancy-cache的Python项目详细描述
版权所有Peter Bengtsson,mail@peterbe.com,2013-2016
许可证:BSD
关于Django Fancy Cache
类固醇的djangocache_page装饰剂。
不像股票django.views.decorators.cache.change_page这个 decorator使设置一个key_prefixer成为可能 可呼叫。这个可调用的被传递给请求,如果它返回None 该页未缓存。
另外,还可以设置另一个可调用的名为post_process_response (通过响应和请求)可以做一些 在缓存中设置响应之前对其进行的其他更改。
最后,可以设置post_process_response_always=True,以便 post_process_responsecallable始终被调用,即使 响应来自缓存。
如何使用
在您的django视图中:
fromfancy_cacheimportcache_page@cache_page(60*60)defmyview(request):returnrender(request,'page1.html')defprefixer(request):ifrequest.method!='GET':returnNoneifrequest.GET.get('no-cache'):returnNonereturn'myprefix'@cache_page(60*60,key_prefixer=prefixer)defmyotherview(request):returnrender(request,'page2.html')defpost_processor(response,request):response.content+='<!-- this was post processed -->'returnresponse@cache_page(60*60,key_prefixer=prefixer,post_process_response=post_processor)defyetanotherotherview(request):returnrender(request,'page3.html')
可选用途
如果您愿意,可以让django-fancy-cache记录每个url 储藏室。这对无效或好奇的事情很有用 统计检验。
你可以在装饰器上打开这个开关。像这样:
fromfancy_cacheimportcache_page@cache_page(60*60,remember_all_urls=True)defmyview(request):returnrender(request,'page1.html')
或者,更方便地将其应用于^{tt1}的所有用途$ decorator您可以使用以下命令在设置中设置默认值:
FANCY_REMEMBER_ALL_URLS=True
现在,假设您启用了这个选项。现在你可以做事了 像这样:
>>>fromfancy_cache.memoryimportfind_urls>>>list(find_urls(['/some/searchpath','/or/like/*/this.*']))>>># or, to get all:>>>list(find_urls([]))
还有另一个选择,这是清除(又名。 无效)记住的URL。你只是所有的purge=True 这样的选项:
>>>fromfancy_cache.memoryimportfind_urls>>>list(find_urls([],purge=True))
注意:由于find_urls()返回一个生成器,因此清除不会 除非你把发电机排气。例如,在其上循环或 把它变成清单。
检查所有记录的url的第二种方法是使用 fancy-cache管理命令。只有当你有 已将fancy_cache添加到INSTALLED_APPS设置中。现在你可以了 这个:
$ ./manage.py fancy-cache --help $ ./manage.py fancy-cache $ ./manage.py fancy-cache /some/searchpath /or/like/*/this.* $ ./manage.py fancy-cache /some/place/* --purge $ # or to purge them all! $ ./manage.py fancy-cache --purge
注意,它只会打印出如果找到(并清除,如果 适用的)。
检查记录的url的第三种方法是将其添加到您的根目录中 urls.py:
url(r'fancy-cache',include('fancy_cache.urls')),
现在,如果您访问http://localhost:8000/fancy-cache,您将得到一个表 列出django-fancy-cache记录的每个url。
可选用途(对于特别好奇的人)
如果已启用FANCY_REMEMBER_ALL_URLS,则还可以启用 FANCY_REMEMBER_STATS_ALL_URLS在您的设置中。这是做什么的 它试图计算缓存命中数和缓存未命中数 每个url都有。
这种命中和未命中的计数被配置为持续“很长时间”。 可能比缓存视图还要长。所以,随着时间的推移 因为您的视图缓存过期并且 从头开始。
无论何时使用 上面的部分。例如:
>>>fromfancy_cache.memoryimportfind_urls>>>found=list(find_urls([]))[0]>>>found[0]'/some/page.html'>>>found[2]{'hits':1235,'misses':12}
显然,使用 FANCY_REMEMBER_ALL_URLS和/或FANCY_REMEMBER_STATS_ALL_URLS输入 你的项目只有在你没有更聪明的方法 无效,用于调试,或者如果您真的希望 运行网站升级或 一些东西。
运行测试套件
最简单的方法是简单地运行:
$ pip install tox $ tox
或者不需要tox就可以运行:
$ export PYTHONPATH=`pwd` $ export DJANGO_SETTINGS_MODULE=fancy_tests.tests.settings $ django-admin.py test
更改日志
(抱歉,我没能很好地维护它。现在就开始吧)
- 0.11.0
- 修复python 2和python 3之间的parse_qs错误
- 0.10.0
- 修复了在查询字符串中保留空字符串的问题。#39
- 0.9.0
- django 1.10支持
- 0.8.2
- 删除在Python3.5中定义URL模式和测试的不推荐方法
- 0.8.1
- 能够指定要使用的不同缓存后端 https://github.com/peterbe/django-fancy-cache/pull/31
- 0.8.0
- 开始保存更改日志