美文网首页
Django 搭建博客项目(9)-缓存的使用

Django 搭建博客项目(9)-缓存的使用

作者: 零星瓢虫 | 来源:发表于2020-08-27 20:41 被阅读0次

对于博客项目中目前的设计,假设每一次去点击博客的分类,都会去分类的数据库中去查询对应的博客分类数据。这样的每次都去查询数据库效率比较低,所以对于一些不需要及时更新的数据,就需要使用到缓存,同时隔一定的时间对相应的缓存进行更新。

效果图_1.png

这里对右上角分类模块的请求做缓存处理。

django 中的缓存大致分为全站缓存、views 层级缓存和模板层级缓存。下面对此一一进行分析。

全站缓存:

全站缓存,即对整个项目中所有的请求都进行缓存策略。
首先,配置 setting.py 中的缓存中间件配置:

MIDDLEWARE = [
    'django.middleware.cache.UpdateCacheMiddleware',  # 必须放在第一位
    'django.middleware.security.SecurityMiddleware',
    'django.contrib.sessions.middleware.SessionMiddleware',
    'django.middleware.common.CommonMiddleware',
    'django.middleware.csrf.CsrfViewMiddleware',
    'django.contrib.auth.middleware.AuthenticationMiddleware',
    'django.contrib.messages.middleware.MessageMiddleware',
    'django.middleware.clickjacking.XFrameOptionsMiddleware',
    'django.middleware.cache.FetchFromCacheMiddleware',  # 必须放在最后一个
]

UpdateCacheMiddleware 中间件需要放在首位最先进行更新缓存,经过了下面的安全认证后,才能够通过 FetchFromCacheMiddleware 中间件获取到这个请求,所以放在最后面。

setting.py 中缓存的相关设置:

CACHES = {
    'default': {
        'BACKEND': 'django.core.cache.backends.locmem.LocMemCache',
    }
}

CACHE_MIDDLEWARE_KEY_PREFIX = ''
CACHE_MIDDLEWARE_SECONDS = 600
CACHE_MIDDLEWARE_KEY_PREFIX = 'default'

上述配置表示默认缓存存在本地的内存信息,缓存时间为 10 min,同时指定缓存的 key 为 default。 此时则使用了 django 提供的缓存中间件对每个请求进行了缓存处理。

views 层级的缓存:

view 层级中的缓存在 view.py 问价代码中进行实现:


def cache_wrapper(func):
    def _wrapper(request, *args, **kwargs):
        # 从缓存对象中获取数据
        data = cache.get(request.path)
        # 判断缓存中是否存在数据
        if data:
            print('读取缓存中的数据')
            return HttpResponse(data)
        # 从数据库中获取数据
        print('从数据库中获取数据')
        response = func(request, *args, **kwargs)

        # 将数据库中查询到的数据存入缓存
        cache.set(request.path, response.content)
        return response
    return _wrapper

# 根据类别id查询所有帖子
@cache_wrapper
def queryPostByCid(request, cid):
    postList = Post.objects.filter(category_id=cid)
    # Post.objects.filter(category__id=cid)
    return render(request, 'article.html', {'postList': postList})

可以看到,views 层级利用缓存对 queryPostByCid 方法进行了包装。此时我们分别对分类中的第一个分类点击两次,查看对应的输出情况。

效果图_2.png

正常进行缓存,后续操作均从缓存中读取信息。对于动态需要及时进行改变的内容这里并不适用。

欢迎关注公众号 【python面面观】,在聊天对话框回复「博客」获取源码地址以及其他 python 相关知识。

模板层级缓存

模板层级,即对相应 html 模板进行缓存,这里在 article.html 模板中进行举例。

{% extends 'base.html' %}

{% block title %}
    帖子列表
{% endblock %}
{% block left %}
    <div id="main">
        {% load cache %}
        {% cache 10000 archives %} {# 这里缓存名称为 archives 时间为 10s #}
            <div class="archives">
            {% for post in postList %}
                <article class="archive-article archive-type-post">
                    <div class="archive-article-inner">
                        <header class="archive-article-header">
                            <a href="#" class="archive-article-date">
                                <time>{{ post.created|date:'Y-m' }}</time>
                            </a>
                            <h1 itemprop="name">
                                <a class="archive-article-title" target="_blank"
                                   href="/post/{{ post.id }}">{{ post.title }}</a>
                            </h1>
                        </header>
                    </div>
                </article>
            {% endfor %}
        {% endcache %}
        </div>
    </div>
{% endblock %}

通过在模板中使用 loadcache 标签即相关配置,即在模板层级进行相关数据的缓存。

相关文章

  • Django 搭建博客项目(9)-缓存的使用

    对于博客项目中目前的设计,假设每一次去点击博客的分类,都会去分类的数据库中去查询对应的博客分类数据。这样的每次都去...

  • 在django-admin中使用django-ckeditor

    在最新学习python中,使用django搭建博客系统,管理后台直接使用django自带的admin模块,所以遇到...

  • Django博客搭建集合

    用Django搭建博客 欢迎访问 www.treehl.top ,此博客仅作为项目展示 简介 项目主要是记录学...

  • Django新手入门

    使用Django搭建项目 创建并运行Django项目 第一种方式: 1. django-admin startpr...

  • Django 快速搭建博客(开发环境的搭建)

    使用Django搭建博客 Django 是 python 的一个 web 框架,属于相当全能的那种。官方文档介绍的...

  • Django搭建博客页面

    Django基本使用以及博客搭建的准备工作,请参考Django入门与实践 博客主页面编写 编写思路 取出数据库中所...

  • 如何正确安装xadmin

    今天搭建新的django 项目,使用pip install django-xadmin 命令发现提示GBK 编码错...

  • Django笔记01-环境搭建

    环境搭建 在经过几个django教程的洗礼之后,决定自己动手使用django搭建一个个人博客,并写下笔记作为记录 ...

  • python Django学习资料

    Django资源: Django 最佳实践 Django搭建简易博客教程 The Django Book 中文版 ...

  • Django之旅:1

    包含内容 Django简介 Django环境搭建 Django创建项目 访问Django项目 Django简介 在...

网友评论

      本文标题:Django 搭建博客项目(9)-缓存的使用

      本文链接:https://www.haomeiwen.com/subject/sirsdktx.html