• django给视图添加缓存功能


    在开发过程中,有些视图只是查询数据,而且查询的数据一般不会变化。例如,做地址模块时,省市县都是不会变的。如果用户每次请求地址视图时,都要执行视图返回数据,会给服务端带来不必要的压力。这时候可以用到缓存。

    • 视图缓存的原理

    当第一个用户访问地址视图时,返回所有省市县。如果用redis来做缓存存储的话,那么会以键对的方式把数据保存在redis。键是url,值是数据。(当然,两者都会被编码)。接下来有用户访问地址视图时,会先在redis上找,找到的话直接返回。如果找不到,才会到达视图,执行查询等操作,返回给用户。(同时也继续存储在redis)

    • 使用前的配置

    (1)安装视图缓存拓展包

    pip install drf-extensions

    (2)在settings.py上配置

    # drf扩展: 缓存配置, 获取省份和区县接口使用到
    REST_FRAMEWORK_EXTENSIONS = {
        # 缓存时间(1小时)
        'DEFAULT_CACHE_RESPONSE_TIMEOUT': 60 * 60,
        # 缓存到哪里 (caches中配置的default)
        'DEFAULT_USE_CACHE': 'default',
    }
    • 怎么用

    使用方式有两种。

    • 方式一:在类的方法上添加装饰器实现缓存

    示例:

    class CityView(views.APIView):
        # 如果在使用cache_response装饰器时未指明timeout或者cache参数,则会使用配置文件中的默认配置
        @cache_response(timeout=60*60, cache='default')
        def get(self, request, *args, **kwargs):
            pass
    • 方式二:使用drf-extensions提供的扩展类

    1. ListCacheResponseMixin
        用于缓存返回列表数据的视图,与ListModelMixin扩展类配合使用,实际是为list方法添加了cache_response装饰器

    2. RetrieveCacheResponseMixin
        用于缓存返回单一数据的视图,与RetrieveModelMixin扩展类配合使用,实际是为retrieve方法添加了cache_response装饰器

    3. CacheResponseMixin
        为视图集同时补充List和Retrieve两种缓存,与ListModelMixin和RetrieveModelMixin一起配合使用。

    示例:

    class AreasViewSet(CacheResponseMixin, ReadOnlyModelViewSet):
        ...
  • 相关阅读:
    六 .Flask 案例
    五 .Flask 蓝图(文件目录结构)
    四 .Flask 模板 中间件 特殊装饰器 CBV 正则 基础知识(使用)
    七 .Django 模板(template)
    三 .Flask 登录案例认证装饰器 session
    二 .Flask 配置文件 路由 视图 请求 响应 cookie session 闪现 基础知识(使用)
    一 .Flask介绍和基本使用
    一 .微信消息推送
    二 .redis在django中使用
    一 python+redis使用(字典 列表)
  • 原文地址:https://www.cnblogs.com/chichung/p/9993317.html
Copyright © 2020-2023  润新知