Flask学习四:补充

插件

flask-caching

简介
Flask-Caching 是一个 Flask 扩展,旨在为 Flask 应用程序添加缓存功能。缓存是一种提高应用性能的技术,通过将常用数据暂时存储在一个快速访问的位置(如内存或磁盘),从而减少对较慢资源(如数据库或网络服务)的重复访问。

Flask-Caching 提供了一种简单的方式来缓存视图函数的结果或者任何可调用对象的结果,并且支持多种缓存后端,包括内存缓存(如 SimpleCache)、文件系统缓存、Memcached 缓存以及 Redis 缓存等。这意味着开发者可以根据应用程序的需求和基础设施选择最适合的缓存方式。

通过 Flask-Caching,开发人员可以轻松实现诸如页面缓存、模板片段缓存、函数结果缓存等功能。此外,它还提供了灵活的配置选项,以便根据业务需求调整缓存行为,如设置过期时间、使用不同的缓存策略等。

使用
安装

pip install flask-caching

初始化

from flask_caching import Cache  # 缓存cache= Cache(config={'CACHE_TYPE': 'simple','CACHE_DEFAULT_TIMEOUT': 3600 ,# 设置过期时间为1小时,过期后会被自动删除
})  # 缓存cache.init_app(app=app) # 绑定缓存

使用
在视图函数上添加缓存

@cache.cached(timeout=60) # 1分钟后过期
@userManageBlue.route('/user-manage/')
def index():

使用场景

频繁访问的数据库查询结果:如果某个视图函数执行了复杂的数据库查询操作,并且这个查询结果在短时间内不会发生变化,那么可以使用Flask-Caching来缓存查询结果,避免每次请求都执行这个查询操作,提高响应速度。

渲染的页面内容:如果某个页面的内容不经常变化,并且需要花费较长时间来生成,那么可以使用Flask-Caching来缓存页面内容。这样,当多个用户请求同一个页面时,可以直接返回缓存的页面内容,减少服务器的负载和响应时间。

钩子函数(中间件)

钩子函数的使用
钩子函数是指在执行函数或者目标函数之间挂载的函数,框架开发者给调用方法提供一个point-挂载点,是一种AOP切面编程思想

常见的钩子函数有:

  • before_first_request:处理第一次请求时执行
  • before_request:在每次请求之前执行,通常使用这个钩子函数预处理一些变量,实现反爬虫
  • after_request:注册一个函数,如果没有未处理的异常抛出,在每次请求之后运行
  • teardown_appcontext:当app上下文被移除后执行的函数,可以进行数据库的提交或者回滚

示例:反爬虫策略

# 相同ip地址1秒内不允许重复访问
key = request.remote_addr + "before"
valeu = cache.get(key)
if value :return "别爬了,你被发现了~^~"
else :cache.set(key,'aa',timeout=1)# 防止非浏览器访问
ua = request.user_agent
if not ua:return "hello"
@baseBlue.before_request
def before():print("我是钩子函数")

与装饰器的区别

def login_required(f):@wraps(f)def decorated_function(*args, **kwargs):if session.get("id") is None:return jsonify({"code": 401, "data": '', "msg": "登录失效"})return f(*args, **kwargs)return decorated_function

上面的是一个简单的装饰器,用于判断是否登录失效。这段代码也可以通过钩子函数来实现,装饰器和钩子函数的区别是:

  • 装饰器方式:你需要在每一个路由函数前都加上@login_required装饰器,以确保在进入路由函数之前进行登录检查。这种方式灵活,可以选择性地对一部分路由函数进行登录检查,但是需要在每个路由函数上都添加装饰器。

  • 钩子函数方式:你只需要在应用程序的全局范围内定义一个before_request钩子函数,它会在每个请求处理之前被调用。这种方式更为简洁,只需要在一个地方定义登录检查逻辑,而不需要在每个路由函数上都添加装饰器。

使用钩子函数的优点是可以避免在每个路由函数上都添加装饰器的重复工作,提高了代码的可维护性。但是需要注意,在使用钩子函数时,登录检查逻辑将应用于所有的请求,可能需要进行一些额外的逻辑处理来排除不需要登录检查的请求。

内置对象

可以直接从flask中导入使用

  • request:请求对象
  • session:回话对象
  • gglobal全局对象
  • current_app:flask应用对象

静态文件目录

允许用户可以直接通过对应的链接来访问网站的静态文件,最常见的就是图片。在浏览器里输入图片路径可以直接访问服务器里图片文件。

默认情况下就是static目录和/static,如下图:
在这里插入图片描述
如果想要修改的话,可以使用下面的代码

from flask import Flaskapp = Flask(__name__)# 设置静态文件夹的路径和URL路径
app.static_folder = 'static'
app.static_url_path = '/static'if __name__ == '__main__':app.run()

注意:static_folder static_url_path需要同时设置。但是一般情况下是不需要改变的,因为你网站本身需要的静态文件也会受到影响。

正确情况下可以通过钩子函数来判断有没有访问静态文件的权限

@app.before_request
def check_permission():# 获取请求的URLurl = request.path# 判断是否需要权限验证if '/static/' in url:# 获取用户的权限user_permission = session.get('permission')# 判断用户是否有权限访问静态文件if user_permission != app.config['USER_PERMISSION']:# 没有权限,返回 403 Forbiddenreturn '403 Forbidden', 403

另外就算是有访问权限也需要避免短时间里重复请求,从而提高网站的性能

# 设置一个钩子函数,避免被人重复请求静态文件
@app.route('/static/<path:filename>')
def static_files(filename):return send_from_directory(app.static_folder, filename)@app.after_request
def add_cache_control(response):response.headers['Cache-Control'] = 'max-age=3600'  # 设置缓存时间为1小时return response

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/234812.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

HarmonyOS应用开发实战—开箱即用的活动创建页面【ArkTS】【鸿蒙专栏-33】

一.HarmonyOS应用开发实战—开箱即用的个人主页页面【ArkTS】【鸿蒙专栏-32】 1.1 项目背景 HarmonyOS(鸿蒙操作系统)是华为公司推出的一种分布式操作系统。它被设计为一种全场景、全连接的操作系统,旨在实现在各种设备之间的无缝协同和共享,包括智能手机、平板电脑、智能…

Android排队预约系统(Java+SqLite+ZXing)

自己写的排队预约系统&#xff0c;可改写&#xff0c;添加功能&#xff0c;如管理用户&#xff0c;查询排队人数等功能。(由于是选修课课设&#xff0c;所以写的比较粗糙) 使用方法&#xff1a; 1.使用Android studio导入项目。 2.使用gradle加载build.gradle.kts中的依赖。…

【MySQL工具】pt-online-schema-change 详细介绍

下面文章基于 pt-online-schema-change 3.5.5 版本 简介 pt-online-schema-change - 无锁表修改表结构工具&#xff0c;这里无锁表也不是绝对的&#xff0c;在交互原表与中间表 表名的时候也会有元数据锁&#xff0c;只不过事件很短 语法 pt-online-schema-change [OPTIONS…

计算BMI指数-第11届蓝桥杯选拔赛Python真题精选

[导读]&#xff1a;超平老师的Scratch蓝桥杯真题解读系列在推出之后&#xff0c;受到了广大老师和家长的好评&#xff0c;非常感谢各位的认可和厚爱。作为回馈&#xff0c;超平老师计划推出《Python蓝桥杯真题解析100讲》&#xff0c;这是解读系列的第19讲。 计算BMI指数&…

智能优化算法应用:基于混沌博弈算法3D无线传感器网络(WSN)覆盖优化 - 附代码

智能优化算法应用&#xff1a;基于混沌博弈算法3D无线传感器网络(WSN)覆盖优化 - 附代码 文章目录 智能优化算法应用&#xff1a;基于混沌博弈算法3D无线传感器网络(WSN)覆盖优化 - 附代码1.无线传感网络节点模型2.覆盖数学模型及分析3.混沌博弈算法4.实验参数设定5.算法结果6.…

SQLturning:定位连续值范围起点和终点

在上一篇blog说到&#xff0c;如何去优化查询连续值范围&#xff0c;没看过的朋友&#xff0c;上篇blog链接[在此]。(https://blog.csdn.net/weixin_42575078/article/details/135067645?spm1001.2014.3001.5501) 那么今天来说说怎么将连续的数据合并&#xff0c;然后返回合并…

SpringSecurity入门

前言 Spring Security是一个用于在Java应用程序中提供身份验证和授权功能的强大框架。它构建在Spring框架之上&#xff0c;为开发人员提供了一套灵活且全面的安全性服务&#xff0c;本篇将为大家带来Spring Security的详细介绍及入门 一.安全框架 在学习了解Spring Security之…

MeterSphere files 任意文件读取漏洞复现 (CVE-2023-25573)

0x01 产品简介 MeterSphere 是一站式开源持续测试平台, 涵盖测试跟踪、接口测试、UI 测试和性能测试等功能,全面兼容 JMeter、Selenium 等主流开源标准。 0x02 漏洞概述 MeterSphere /api/jmeter/download/files 路径文件存在文件读取漏洞,攻击者可通过该漏洞读取系统重要…

[总线仲裁]

目录 一. 集中仲裁方式1.1 链式查询方式1.2 计数器查询方式1.3 独立请求方式 二. 分布式仲裁方式 总线仲裁是为了解决多个设备争用总线这个问题 \quad 一. 集中仲裁方式 \quad 集中仲裁方式: 就像是霸道总裁来决定谁先获得总线控制权 分布仲裁方式: 商量着谁先获得总线控制权 …

国产670亿参数的DeepSeek:超越Llama2,全面开源

模型概述 DeepSeek&#xff0c;一款国产大型语言模型&#xff08;LLM&#xff09;&#xff0c;凭借其670亿参数的规模&#xff0c;正引领着人工智能领域的新浪潮。这款模型不仅在多项中英文公开评测榜单上超越了700亿参数的Llama 2&#xff0c;而且在推理、数学和编程能力方面…

JDK各个版本特性讲解-JDK16特性

JDK各个版本特性讲解-JDK16特性 一、JAVA16概述二、语法层面变化1.JEP 397&#xff1a;密封类&#xff08;第二次预览&#xff09;2.JEP 394&#xff1a;instanceof 的模式匹配3.JEP 395&#xff1a;记录4_JEP 390&#xff1a;基于值的类的警告 三、API层面变化1.JEP 338&#…

(备战2024)三天吃透Java面试八股文,面试通过率高达90%

什么样的求职者能够获得面试官的青睐&#xff1f;求职者需要准备哪些内容来面对形形色色的面试官&#xff1f;这两份资料是我在几十场面试中被面试官问到的问题&#xff0c;比其他复制粘贴的面试题强一百倍&#xff0c;堪称全网最强&#xff08;我不太喜欢“全网最强”这样的字…

车辆违规开启远光灯检测系统:融合YOLO-MS改进YOLOv8

1.研究背景与意义 项目参考AAAI Association for the Advancement of Artificial Intelligence 研究背景与意义 随着社会的不断发展和交通工具的普及&#xff0c;车辆违规行为成为了一个严重的问题。其中&#xff0c;车辆违规开启远光灯是一种常见的违规行为&#xff0c;给其…

贝蒂快扫雷~(C语言)

✨✨欢迎大家来到贝蒂大讲堂✨✨ ​​​​&#x1f388;&#x1f388;养成好习惯&#xff0c;先赞后看哦~&#x1f388;&#x1f388; 所属专栏&#xff1a;贝蒂的游戏 贝蒂的主页&#xff1a;Betty‘s blog 引言&#xff1a; 扫雷相信大家小时候到玩过吧&#xff0c;那…

数据库故障Waiting for table metadata lock

场景&#xff1a;早上来发现一个程序&#xff0c;链接mysql数据库有点问题&#xff0c;随后排查&#xff0c;因为容器在k8s里面。所以尝试重启了pod没有效果 一、重启pod: 这里是几种在Kubernetes中重启Pod的方法: 删除Pod,利用Deployment重建 kubectl delete pod mypodDepl…

python爬虫进阶篇:利用Scrapy爬取同花顺个股行情并发送邮件通知

一、前言 上篇笔记我记录了scrapy的环境搭建和项目创建和第一次demo测试。本篇我们来结合现实场景利用scrapy给我们带来便利。 有炒股或者其它理财产品的朋友经常会关心每日的个股走势&#xff0c;如果结合爬虫进行实时通知自己&#xff0c;并根据自己预想的行情进行邮件通知&…

跟着我学Python进阶篇:01.试用Python完成一些简单问题

往期文章 跟着我学Python基础篇&#xff1a;01.初露端倪 跟着我学Python基础篇&#xff1a;02.数字与字符串编程 跟着我学Python基础篇&#xff1a;03.选择结构 跟着我学Python基础篇&#xff1a;04.循环 跟着我学Python基础篇&#xff1a;05.函数 跟着我学Python基础篇&#…

Nodejs 第三十章(防盗链)

防盗链&#xff08;Hotlinking&#xff09;是指在网页或其他网络资源中&#xff0c;通过直接链接到其他网站上的图片、视频或其他媒体文件&#xff0c;从而显示在自己的网页上。这种行为通常会给被链接的网站带来额外的带宽消耗和资源浪费&#xff0c;而且可能侵犯了原始网站的…

听一些大神说测试前途是IT里最差的,真的是这样吗?

一&#xff1a;行业经历 测试行业爬模滚打7年&#xff0c;从点点点的功能测试到现在成为高级测试&#xff0c;工资也翻了几倍&#xff1b;个人觉得&#xff0c;测试的前景并不差&#xff0c;只要自己肯努力&#xff1b;我刚出来的时候是在鹅厂做外包的功能测试&#xff0c;天天…