Django REST framework 实现缓存机制以优化性能
Django REST framework 实现缓存机制以优化性能
页面首页中,导航菜单或轮播广告在项目中每一个页面都会被用户频繁访问到,所以我们可以实现缓存,减少MySQL数据库的查询压力,使用内存缓存可以加快数据查询速度。
cache_page 装饰器
根据django官方文档,
试图缓存:https://docs.djangoproject.com/zh-hans/5.0/topics/cache/#the-per-view-cache
示例:
使用缓存框架的通用办法是缓存视图结果。django.views.decorators.cache 定义了一个 cache_page 装饰器,它将自动缓存视图的响应:
from django.views.decorators.cache import cache_page@cache_page(60 * 15)
def my_view(request): ...
method_decorator与@ 装饰器
装饰类视图:https://docs.djangoproject.com/zh-hans/3.2/topics/class-based-views/intro/#decorating-the-class
@装饰器语法(直接装饰器)
- 直接应用:装饰器直接应用于函数或方法的定义上。
- 作用域:装饰器的作用域仅限于被装饰的函数或方法。
- 继承性:如果一个方法被装饰,那么它的直接子类继承该方法时,不会自动继承装饰器。子类需要显式地添加相同的装饰器。
- 可读性:代码更直观,因为装饰器直接位于方法定义之前,易于理解和追踪。
- 限制:如果需要在继承链中多个级别应用相同的装饰器,需要在每个类中重复相同的装饰器代码。
method_decorator(类级别装饰器)
- 动态应用:装饰器在类定义之后、方法定义之前动态应用。
- 作用域:可以为类中的一个或多个方法添加装饰器。
- 继承性:通过
method_decorator应用的装饰器会被所有继承该类的子类继承,无需在子类中重复添加。- 灵活性:可以在不修改原始方法定义的情况下,为类的方法添加装饰器。
- 复杂性:可能稍微降低代码的可读性,因为装饰器的应用与方法定义分离。
代码实现
前提是的settings中配置好了CACHE
from django.utils.decorators import method_decorator
from django.views.decorators.cache import cache_page
from rest_framework.generics import ListAPIView
import constantsclass CacheListAPIView(ListAPIView):"""列表缓存视图"""@method_decorator(cache_page(time_out=constants.LIST_PAGE_CACHE_TIME))def get(self,request, *args, **kwargs):# 重写ListAPIView的get方法,但是不改动源代码。仅仅装饰而已return super().get(request, *args, **kwargs)
此时,主页视图中的头部脚部轮播图等api接口都可以继承该类,实现缓存
import constants
from views import CacheListAPIView
from .models import Nav, Banner
from .serializers import NavModelSerializer, BannerModelSerializerclass NavHeaderListAPIView(CacheListAPIView):"""顶部导航视图"""queryset = Nav.objects.filter(position=constants.NAV_HEADER_POSITION, is_show=True, is_deleted=False).order_by("orders", "-id")[:constants.NAV_HEADER_SIZE]serializer_class = NavModelSerializerclass NavFooterListAPIView(CacheListAPIView):"""脚部导航视图"""queryset = Nav.objects.filter(position=constants.NAV_FOOTER_POSITION, is_show=True, is_deleted=False).order_by("orders", "-id")[:constants.NAV_FOOTER_SIZE]serializer_class = NavModelSerializerclass BannerListAPIView(CacheListAPIView):"""轮播广告视图"""queryset = Banner.objects.filter(is_show=True, is_deleted=False).order_by("orders", "-id")[:constants.BANNER_SIZE]serializer_class = BannerModelSerializer
此时,访问试图后,缓存数据库中就有缓存好的信息了。

若有错误与不足请指出,关注DPT一起进步吧!!!
相关文章:
Django REST framework 实现缓存机制以优化性能
Django REST framework 实现缓存机制以优化性能 页面首页中,导航菜单或轮播广告在项目中每一个页面都会被用户频繁访问到,所以我们可以实现缓存,减少MySQL数据库的查询压力,使用内存缓存可以加快数据查询速度。 cache_page 装饰…...
快速了解高并发解决方案
对《高并发的哲学原理》的个人总结,原书地址如下 https://pphc.lvwenhan.com/ 本书的核心思想就是拆分,服务细化拆分多资源并行。 通用设计方法 例子:每秒100万次http请求 通过架构解决性能问题,在面对并发需求时ÿ…...
SpringBoot框架下的房产销售系统设计与实现
摘 要 随着科学技术的飞速发展,各行各业都在努力与现代先进技术接轨,通过科技手段提高自身的优势;对于房产销售系统当然也不能排除在外,随着网络技术的不断成熟,带动了房产销售系统,它彻底改变了过去传统的…...
基于RFID的门禁系统的设计(论文+源码)
1系统方案设计 通过需求分析,基于RFID的门禁系统总体设计框图。系统采用STM32单片机作为系统主控核心,利用独立按键与RFID识别模块能够实现门禁系统密码与IC卡开门功能。WiFi模块实现系统与手机APP的通信,用户可以通过手机APP进行门禁开关操…...
湖仓一体-Paimon篇-简介
什么是Paimon? 2021年末,Flink官方提出打造一个全新的存储 Flink Table Store,一个 Flink 完全内置的存储。 为了让 Flink Table Store 能够有更大的发展,Flink PMC经过讨论决定将其捐赠Apache进行独立孵化。 2023 年 3 月 12 日…...
React Native 0.76版本发布
关于 React Native 的 New Architecture 概念,最早应该是从 2018 年 RN 团队决定重写大量底层实现开始,因为那时候 React Native 面临各种结构问题和性能瓶颈,最终迫使 RN 团队开始进行重构。 而从 React Native 0.68 开始,New A…...
yolo自动化项目实例解析(一)日志格式输出、并发异步多线程、websocket、循环截图、yolo推理、3d寻路
本系列是为了学习自动化操作相关知识点,对开源项目原神ai的技术理解,开源地址如下,拉取版本号为1.78 https://gitee.com/LanRenZhiNeng/lanren-genshin-impact-ai 一、main入口主要函数说明 vi main.py 封装的函数较多,我们拆分…...
获取无人机经纬度是否在指定禁飞区内
1. 计算公式: (AB X AE ) * (CD X CE) >= 0 && (DA X DE ) * (BC X BE) >= 0 参考: 判断点是否在矩形框(多边形)内_qt opencv 判断一点是否在矩形内-CSDN博客 2.测试结果: 3.实现完整代码: #include<cstd...
解读:以RTC为基,AI为脑的“超拟人”AI实时互动解决方案
我们打造了一款满足想象与应用的智能体——AI实时互动。 谈谈AI智能体 当AI变得足够聪明时,用户与AI的交互将变得真实自然。于是,构建高拟真AI与用户的实时交互,已经成为企业提升数智化生产力的新思路。 在这个交互过程中,存在一…...
软件测试学习笔记丨Postman基础使用
本文转自测试人社区,原文链接:https://ceshiren.com/t/topic/32096 一、Postman基础使用 1.1 简介 Postman是一款流行的API测试工具和开发环境,旨在简化API开发过程、测试和文档编制。优势: Postman可以快速构建请求,…...
HTML5+CSS3面试题:(第一天)
目录 1.HTML5有哪些新特性,移除了那些元素?如何处理HTML5新标签的浏览器兼容问题?如何区分HTML和HTML5? 2.谈谈iframe标签的优缺点? iframe的优点: iframe的缺点: 3.CSS3有哪些新特性? 4.让chrome支持小于12px的…...
微信小程序中的模块化、组件化开发:完整指南
文章目录 前言一、模块化与组件化开发的优势1.1模块化开发的优势1.2 组件化开发的优势 二、组件的抽离标准及规范2.1 抽离组件的标准2.2 组件化开发规范 三、模块化规范的种类及优劣比较3.1 CommonJS3.2 ES6 Modules3.3 优劣对比 四、组件封装:全局组件、分包组件、…...
9.第二阶段x86游戏实战2-初识易语言
免责声明:内容仅供学习参考,请合法利用知识,禁止进行违法犯罪活动! 本次游戏没法给 内容参考于:微尘网络安全 工具下载: 链接:https://pan.baidu.com/s/1rEEJnt85npn7N38Ai0_F2Q?pwd6tw3 提…...
Cortex-A7:__disable_irq和GIC_DisableIRQ、__enable_irq和GIC_EnableIRQ的区别(1)API介绍
0 相关资料 ARM Generic Interrupt Controller Architecture version 2.0.pdf 1 API介绍 1.1 __disable_irq __disable_irq函数的作用是失能IRQ,也就是不响应中断。实现代码如下: /**\brief Disable IRQ Interrupts\details Disables IRQ interrupt…...
MATLAB在嵌入式系统设计中的最佳实践
嵌入式系统设计是一个复杂的过程,涉及硬件和软件的紧密集成。MATLAB提供了一套全面的解决方案,从算法开发到代码生成,再到硬件验证,极大地简化了这一过程。本文将探讨使用MATLAB进行嵌入式系统设计的最佳实践,包括模型…...
wpf 使用Oxyplot 库制作图表示例
方法: InitTable 方法:负责初始化图表模型,包括设置图表的样式、坐标轴、系列和注释。这个方法包括多个 Init 方法的调用,表示图表的初始化过程可以分步骤进行。 InitGoalPoint 方法:当前未实现,但预留了子…...
CSS3中的@media查询
CSS3的media查询是一种强大的功能,允许我们根据不同的媒体类型和设备特性来应用不同的样式规则。这使得我们能够创建响应式设计,确保网站或应用在各种设备和屏幕尺寸上都能提供良好的用户体验。本文将详细探讨media查询的定义、语法、使用场景及常见问题…...
fly专享
要逐步熟悉实验中的各个步骤,下面是详细的说明,包括如何下载软件以及相关操作步骤。 1. 熟悉VMware 15虚拟机的使用 步骤说明: 下载VMware Workstation 15: 打开浏览器,访问VMware官方网站:VMware Workst…...
初识Linux · 进程(3)
目录 前言: 进程的创建 前言: 继上文介绍了着重介绍了进程的内部属性,以及在操作系统层面进程如何被组织起来的,如何调用系统接口,有关task_struct,进程的部分理解等,今天,我们就…...
【spring】spring bean对象生命周期,spring容器如何管理bean,spring容器的名称是叫什么
【spring】spring bean对象生命周期,spring容器如何管理bean,spring容器的名称是叫什么 DefaultListableBeanFactory开始 spring 容器 DefaultListableBeanFactory DefaultListableBeanFactory是Spring的核心BeanFactory实现,它负责Bean的创…...
3步搞定黑苹果配置:OpCore-Simplify让EFI构建效率提升80%的智能方案
3步搞定黑苹果配置:OpCore-Simplify让EFI构建效率提升80%的智能方案 【免费下载链接】OpCore-Simplify A tool designed to simplify the creation of OpenCore EFI 项目地址: https://gitcode.com/GitHub_Trending/op/OpCore-Simplify 你是否经历过这些痛苦…...
避坑指南:ESTUN Editor安装后,TP虚拟示教器bricks.ini配置文件到底在哪?
ESTUN Editor安装后TP虚拟示教器配置文件定位全解析 当你在工业机器人编程中同时安装了ESTUN Editor集成环境和独立TP软件包时,最让人头疼的问题莫过于找不到正确的bricks.ini配置文件。这个问题看似简单,却直接影响着虚拟示教器与机器人控制器的连接稳定…...
BURSTER 9235 (85437090) 应变片信号放大器
BURSTER 9235 (85437090) 应变片信号放大器品牌:BURSTER(德国波司特,精密测量技术专家)型号:9235内部订货号:85437090类型:直连式(In-Line)应变片传感器信号放大器一、核…...
Anything V5图像生成效果实测:高清画质与丰富风格展示
Anything V5图像生成效果实测:高清画质与丰富风格展示 1. 引言:惊艳的二次元创作体验 1.1 模型核心能力概述 Anything V5作为Stable Diffusion生态中的明星模型,专为动漫风格图像生成优化。经过大规模高质量二次元数据训练,它能…...
OpenClaw极简部署:nanobot镜像+手机Termux方案
OpenClaw极简部署:nanobot镜像手机Termux方案 1. 为什么要在手机上部署OpenClaw? 去年夏天,我在咖啡馆等朋友时突发奇想:如果能用手机随时调用AI助手处理文件该多好。当时尝试了几款云端AI工具,但要么功能受限&#…...
小白友好!FunASR语音识别镜像部署教程,开箱即用
小白友好!FunASR语音识别镜像部署教程,开箱即用 1. 快速了解FunASR语音识别 FunASR是由阿里云推出的开源语音识别工具包,它就像是一个能听懂人说话的智能助手。想象一下,你对着手机说话,它能立刻把你说的话变成文字—…...
Greasy Fork:用户脚本管理的一站式开源解决方案
Greasy Fork:用户脚本管理的一站式开源解决方案 【免费下载链接】greasyfork An online repository of user scripts. 项目地址: https://gitcode.com/gh_mirrors/gr/greasyfork 从脚本新手到社区贡献者的进阶指南 一、功能探索:解锁浏览器增强新…...
保姆级教程:用QPST+QFIL给小米/一加备份基带qcn文件(防丢失IMEI必备)
高通机型基带备份与恢复全指南:从QCN文件操作到通信模块保护 在智能手机深度定制与系统优化的过程中,基带数据的安全往往是最容易被忽视却至关重要的环节。我曾亲眼见证一位开发者因为误操作导致IMEI丢失,花费整整两周时间与运营商周旋恢复服…...
Sonic数字人效果展示:看静态图片如何“开口说话”生成流畅视频
Sonic数字人效果展示:看静态图片如何"开口说话"生成流畅视频 1. 数字人视频生成技术概览 数字人视频技术正在改变内容创作的方式。传统方法需要复杂的3D建模和动画制作,而现在的AI技术只需一张静态图片和一段音频,就能让图片中的…...
如何用kill-doc解决30+文档平台下载难题:免费高效的文档获取方案
如何用kill-doc解决30文档平台下载难题:免费高效的文档获取方案 【免费下载链接】kill-doc 看到经常有小伙伴们需要下载一些免费文档,但是相关网站浏览体验不好各种广告,各种登录验证,需要很多步骤才能下载文档,该脚本…...
