Python Flask 实现 HTML 文件压缩案例代码(9 级压缩)
作者:梦想橡皮擦 发布时间:2021-05-22 15:22:13
本博客详细为你解释 Python Flask 框架下的 HTML 文件压缩内容,其第三方模块也可用在其他框架中。
本案例是基于 Python Flask 进行搭建,所以需要提前搭建一个 Flask 项目环境,有 app.py 文件和 templates/index.html 文件即可。
🧩 第三方库 Flask-compress
Flask 框架可以使用第三方库 Flask-compress 来实现 HTML 压缩。
安装 Flask-compress :
pip install Flask-compress
在 Flask 应用中使用 Flask-compress:
from flask_compress import Compress
app = Flask(__name__)
compress = Compress()
compress.init_app(app)
🎯 配合 render_template() 函数实现压缩
在使用 Flask-compress 和 render_template() 函数时,只需要确保在使用 render_template() 函数之前已经初始化了 Flask-compress。
但是这里测试的时候需要注意 Flask-compress 默认使用等级为 6 的压缩,并且默认不会对小于 150 bytes 的响应进行压缩。这意味着,如果响应的大小小于 150 bytes,Flask-compress 将不会对其进行压缩。所以测试 html 文件需要大一些。
除此之外,Flask-compress 默认对 html 使用的压缩类型是 br
,这里还需要进行一下配置。
app = Flask(__name__)
app.config['COMPRESS_ALGORITHM'] = 'gzip'
代码编写完毕,接下来我们查看一下各种情况下的数据对比吧。
上图中的 Content-Encoding
和 Vary
是使用压缩之后新增的响应参数。
🎯 Flask-compress 实例化时的其他参数
如果想使用其他压缩类型,可以使用 Flask-compress 的 Compress
类来进行设置。
COMPRESS_REGISTER
COMPRESS_REGISTER 参数默认为 True, 表示对所有视图返回的数据进行压缩,可以将其设置为 False,然后再对应视图上添加 @compress.compressed()
装饰器进行单视图压缩。
COMPRESS_MIMETYPES
COMPRESS_MIMETYPES 规定了对那些类型的返回数据进行压缩,默认值为:
['text/html', 'text/css', 'text/xml','application/json','application/javascript']
在实例化的时候,可以通过匿名函数进行设置
from flask_compress import Compress
compress = Compress()
compress.init_app(app, compress_level=9, compress_min_size=500,
compress_filter=lambda r: r.content_type.startswith('text/'))
COMPRESS_MIN_SIZE
该参数默认值是 500 bytes ,如果低于该值,不压缩,该值可以在实例化的时候进行配置。
compress = Compress()
compress.init_app(app, compress_level=9, compress_min_size=500)
使用上述初始化代码,就可以使用 9 级压缩了,即当响应体大小大于 500 bytes 时才进行压缩。
🎯 flask-compress 模块原理
在 flask-compress 内部,利用 app 的 after_request()
方法为 flask 服务注册了一个钩子,当请求结束时就会执行 Comporess 的 after_request 方法。
插件中的代码如下:
app.after_request(self.after_request)
🎯 compress.init_app() 详细参数表
使用 Flask-compress 时,你可以通过在初始化时传递参数来配置压缩行为。compress.init_app()
函数可用的参数列表如下所示:
app
: Flask 应用程序实例;compress_level
: 压缩级别,取值范围为 1-9,默认为 6,压缩级别越高,压缩效率越高,但是压缩时间也会越长;compress_min_size
:最小压缩字节数,取值为整数,默认为 500;compress_filter
: 一个可选的函数,用于确定哪些响应应该被压缩。
来源:https://dream.blog.csdn.net/article/details/128759348
猜你喜欢
- 本机环境: Windows 10服务器环境: Windows Server 2012 R2背景:公司需要我开发一个简单的web应用。开发的时
- 前期准备1、机器人框架的下载和配置首先需要一个qq机器人框架,我使用的是基于mirai 以及 MiraiGo 开发的go-cqhttp(里面
- 具体代码如下所示:#coding=utf8from urllib import requestimport reimport urllib,
- 1.在myblog中的urls.py中from django.urls import includefrom django.conf.url
- 前言今天继续分享mayfly-go开源代码中代码或者是包组织形式。犹豫之后这里不绘制传统UML图来描述,直接用代码或许能更清晰。开源项目地址
- 知道python有这几个内置方法,但一直以来用的都不多,最近重新看了一下,重新记录一下。map()会根据提供的函数对指定序列进行映射,pyt
- Python 面向对象方法没有重载#在其他语言中,可以定义多个重名的方法,只要保证方法签名唯一即可。方法签名包含3个部分:方法名、参数数量、
- 你同样可以使用cache标签来缓存模板片段。 在模板的顶端附近加入{% load cache %}以通知模板存取缓存标签。模板标签{% ca
- 对json数据进行查询及修改使用 字段->'$.json属性' 进行查询条件使用 json_extract 函数查询,
- 想要用python自已手动序列化嵌套类,就要明白两个问题:1.Json是什么?2.Json支持什么类型?答案显而易见Json就是嵌套对象Js
- JS中作用域的概念: 表示变量或函数起作用的区域,指代了它们在什么样的上下文中执行,亦即上下文执行环境。Javascript的作用域只有两种
- 一、普通进度条import sysimport time# 普通进度条# 在代码迭代运行中进行统计计算,并使用格式化字符串输出代码运行进度d
- 说明1、导入模块pyplot,并指定别名plt,以避免重复输入pyplot。模块化pyplot包含许多用于制作图表的功能。2、将绘制的直线坐
- 误区 #13.在SQL Server 2000兼容模式下不能使用DMV错误 对
- 共同点: 1.它们都是python的核心类型,是python语言自身的一部分核心类型与非核心类型 多数核心类型可通过特定语法来生成其对象,比
- 本文实例总结了Python正则表达式常用函数。分享给大家供大家参考,具体如下:re.match()函数原型:match(pattern, s
- 项目现状项目是一个数据监测平台,引入了ehcart和three.js 负责项目的数据可视化;打包后,体积高达2.1M,这个体积相比于我的项目
- 本文实例为大家分享了python实现彩色图转换成灰度图的具体代码,供大家参考,具体内容如下from PIL import Imageimpo
- 有时候想为我们的网页提供多语言支持,如果一种语言用一张网页来做实在太麻烦了,幸好Google提供了语言工具功能,下面介绍如何利用它来实现网页
- 写爬虫是一项复杂、枯噪、反复的工作,考虑的问题包括采集效率、链路异常处理、数据质量(与站点编码规范关系很大)等。整理自己写一个爬虫程序,单台