一个服用类固醇的django'cache_page'decorator

django-fancy-cache的Python项目详细描述


版权所有Peter Bengtsson,mail@peterbe.com,2013-2016

Travis

许可证: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
0.8.0
  • 开始保存更改日志

欢迎加入QQ群-->: 979659372 Python中文网_新手群

推荐PyPI第三方库


热门话题
java利用Android的surfaceView   服务器不通过socket接受java中的客户端请求   带有文本标签和文本字段的用户界面java fx验证问题   java是否可以使用Wine在Linux上运行Eclipse Portable?   运行时的java意图参数   java不支持新的白俄罗斯卢布。util。通货   java Struts2文件上载NullPointerException   为什么PowerShell显示“找不到符号”错误,而VS代码Java进程控制台运行得很好?   创建意图的java空指针异常   ArrayList的java打印索引<String[]>   xpath java。伊奥。IOException:服务器返回了URL:http://www.w3.org/TR/html4/strict.dtd   java KeyListener未激活   java导入编译为jar的包:坏的类文件,类文件包含错误的类,包不存在错误   java将图像路径从onActivityResult传递到onClick函数   java Catch block不允许用户继续执行程序   java Spring Mvc不适用于除`/`