zoukankan      html  css  js  c++  java
  • django视图缓存的实现

    django视图缓存的实现

    1,安装

    pip install django-redis

    setting.py

    CACHES = {
        "default":{
            "BACKEND":"django_redis.cache.RedisCache",
            "LOCATION":"redis://127.0.0.1:6379/1",
            "OPTIONS":{
                "CLIENT_CLASS":"django_redis.client.DefaultClient"
            }
        }
    }

    2.视图函数中使用缓存

    from django.utils.decorators import method_decorator
    from django.views.decorators.cache import cache_page
    class ArticleView(View):
        @method_decorator(cache_page(60 * 15))
        def get(self,request):
        return render(request, 'article/index.html', context=context)

    注意:

    给视图添加缓存是有风险的,如果视图所展示的网页中有经常动态变动的信息,那么被添加缓存命不可取。

    缓存整个视图最实用的场景应该是这个视图所展示的网页的内容基本上不怎么变动,或者说在很长一段时间内不需要变动,这样使用缓存就非常有效。

    3.URLconf中使用缓存

    上面说了函数视图使用缓存,但是我们可能还有一种场景,那就是多个 URL 指向同一个函数视图,但是我只想缓存一部分的 URL,

    这时候就可以采用在 URLconf 中使用缓存,这样就指定了哪些 URL 需要缓存。

    下面分别表示了函数视图类视图的路由中使用缓存的方式,基本一致:

    from django.views.decorators.cache import cache _page
    
    urlpatterns = [
        url(r'^foo/([0-9]{1,2})/$',cache_page(60 * 15)(my_view)),
        url(r'^$', cache_page(60 * 30)(IndexView.as_view()), name='index'),
    ]

    4,模板中使用缓存(推荐


    模板中使用缓存是我比较推荐的一种缓存方式,因为使用这种方式可以充分的考虑缓存的颗粒度,细分颗粒度,可以保证只缓存那些适合使用缓存的 HTML 片段。

    具体的使用方式如下,首先加载 cache 过滤器,然后使用模板标签语法把需要缓存的片段包围起来即可。

    {% load cache %}
    {
    % cache 500 ‘cache_name’ %}
    <div>container</div>
    {
    % endcache %}

    下面这些时候可以用缓存:

    • 纯静态页面
    • 读取了数据库信息,但是不经常变动的页面,比如文章热门排行榜,这个调用数据库信息并且还要排序的完全可以使用缓存,因为不需要实时展现最新的
    • HTML 的片段,比如整个页面都经常变动,但是有个侧边栏不经常变动,就可以缓存侧边栏
    • 需要使用复杂逻辑生成的 HTML 片段,使用缓存可以减少多次重复操作
  • 相关阅读:
    Git failed with a fatal error. Authentication failed
    HttpClient 获取json,即使返回状态不成功也返回json
    win10恢复Windows Media Player
    .NET Core部署到linux(CentOS)最全解决方案
    EasyNetQ 相关问题和解决方法
    RabbitMQ And EasyNetQ
    打爆你的 CPU
    通过代码实现 OutOfMemory
    如何写一段死锁代码
    docker 容器(container)使用ssh服务登录一段时间无操作后自动断开问题解决
  • 原文地址:https://www.cnblogs.com/lvye001/p/10256844.html
Copyright © 2011-2022 走看看