Python Flask 编程 | 连载 08 - Jinja2 过滤器

Flask项目安全防护实战:从SQL注入到CSRF的全面防御指南 在Web开发领域,安全防护是构建可靠应用的核心基础。其原理在于通过分层防御体系,在数据输入、业务处理、输出响应等各环节实施安全控制,从而保障应用免受恶意攻击。从技术价值看,有效的安全措施能防止数据泄露、服务中断和财产损失,是项目成功上线的关键保障。无论是电商平台、内容管理系统还是API服务,安全都是不可或缺的要素。本文聚焦Flask框架,针对SQL注入、CSRF等常见漏洞,提供从输入验证到生产环境配置的完整解决方案,帮助开发者构建坚固的Web应用防线。 阅读详情

一、过滤器

模板中的过滤器

模板中的过滤器可以对来自响应中数据进行处理,过滤器有以下几种使用方式:

  • 使用管道符 |,可以进行链式调用,也可以通过 () 进行传参
  • 使用 filter 标签

在 app.py 中新增视图函数 filter。

python
复制代码
@app.route('/filter')
def filter():
    name = 'Thor'
    heros = {'stark', 'clint', 'loki'}
    return render_template('filter.html', name=name, heros=heros)

在 templates 文件夹下新建 filter.html 页面。

html
复制代码
<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8"/>
    <title>Filter</title>
</head>
<body>
    <h2>使用管道符 |</h2>
    <p>{{ name|upper }}</p>
    <p>{{ name|lower }}</p>
    <p>{{ heros|length }}</p>
    <p>{{ heros|join('-') }}</p>
    <p>{{ heros|join('-')|length }}</p>
</body>
</html>

重新启动应用,浏览器访问 /filter,页面数据经过管道符 | 的过滤,显示结果如下:

image.png

修改 filter.html,改为通过标签方式使用过滤器,内容如下:

html
复制代码
<h2>使用filter标签</h2>
{% filter upper %}
    <p>{{ name }}</p>
{% endfilter %}
{% filter lower %}
    <p>{{ name }}</p>
{% endfilter %}
{#    注意空格#}
{% filter join('-') %}{{ name }}{% endfilter %}

保存代码后浏览器再次访问 /filter 路径,页面显示结果如下:

image.png

内置的过滤器函数生效。

常用的内置过滤器

Jinja2 模板引擎中内置了一些常用的过滤器,如:

  • {{ value | abs}}:获取 value 的绝对值
  • {{ value | default('默认值') }} 或 {{ value | d('默认值') }}:默认值显示
  • {{ value | escape }} 或 {{ value | e }}:HTML 转义
  • {{ value | safe }} :富文本内容转义
  • {{ value | reverse }} :反转

在 app.py 中的 filter 函数中增加一些变量,用于测试 abs 和 default 过滤器。

Python
复制代码
@app.route('/filter')
def filter():
    name = 'Thor'
    heros = {'stark', 'clint', 'loki'}
    abs_value = -1
    d_value = 1
    d_none_value = None
    return render_template('filter.html', name=name, heros=heros,
                           abs_value = abs_value, d_value = d_value,
                           d_none_value = d_none_value)

在 filter.html 页面中使用这些变量,只需在 body 标签中添加如下内容:

html
复制代码
<h2>内置过滤器</h2>
<h3>获取绝对值过滤器</h3>
<p>{{ abs_value | abs }}</p>

<h3>默认值过滤器</h3>
<p>{{ d_value | default(0) }}</p>
<p>{{ d_value_2 | default(0) }}</p>
<p>{{ d_none_value | default(0) }}</p>
<h4> defalut 过滤器默认 None 值生效</h4>
<p>{{ d_none_value | default(0, True) }}</p>

保存代码,浏览器访问 /filter,页面显示结果如下:

image.png

可以看出 default 过滤器只会对没有定义的变量起作用,当变量的值为 None 时无效。

如果先要使用默认值来取代 None 的值只需要在 default 函数中再增加一个 Bool 参数且值为 True 即可,在 filter.html 中的 body 标签中增加如下内容:

html
复制代码
<h4> defalut 过滤器默认 None 值生效</h4>
<p>{{ d_none_value | default(0, True) }}</p>

保存代码,浏览器再次访问 /filter,页面显示结果如下:

image.png

None 值已经被默认值取代。

Jinja2 模板中使用 autoescape 标签设置全局是否自动转义,如果要局部设置需要使用 escape 过滤器。

在 filter 函数中将一段 html 代码保存到变量中,并存放在上下文中。

python
复制代码
@app.route('/filter')
def filter():
    # 其余代码保持不变
    html_code = "<h4>这是一段 HTML 代码</h4>"
    return render_template('filter.html', name=name, heros=heros,
                           abs_value = abs_value, d_value = d_value,
                           d_none_value = d_none_value, html_code = html_code)

在 filter.html 中使用 escape 过滤器渲染上下文中的变量。

html
复制代码
<h2>内置过滤器</h2>
<h3>escape 过滤器</h3>
{% autoescape false %}
<p> {{ html_code | e}} </p>
<p> {{ html_code }} </p>
{% endautoescape %}

image.png

默认开启了 autoescape,因此转义 html 时加不加 escape 过滤器结果都是会被自动转义。

更多内置过滤器的使用可查看 Jinja2 官网中列出的过滤器清单。

image.png

自定义过滤器

如果模板中提供的过滤器都无法满足需求,那么就需要自定义过滤器,比如个人信息脱敏等。

自定义过滤器有两种方式,以自定义一个隐藏个人真实姓名的过滤器 name_masking 为例。

第一种方式,使用装饰器注册自定义过滤器

在 app.py 中新增函数 name_masking_filter,使用装饰器 @app.template_filter 将该函数注册为一个过滤器,装饰器后的括号中指定过滤器的名字,既可以在模板中使用的名字。

python
复制代码
@app.template_filter('name_masking')
def name_masking_filter(name):
    return name[0] + '**'

在 filter.html 页面中使用该过滤器,在 body 标签中增加如下内容:

html
复制代码
<h2>自定义过滤器使用</h2>
<p>{{ '特朗普' | name_masking }}</p>

保存代码,浏览器访问 /filter。

image.png

名字已经被替换为 **

第二种方式,使用函数注册自定义过滤器

将上面使用装饰器注册过滤器的代码注释掉,只需要将装饰器注释即可,通过 Flask 对象 app 调用 jinja_env 函数来注册自定义的过滤器。

python
复制代码
def name_masking_filter(name)
    return return name[0] + '**'
    
# 注册自定义过滤器
app.jinja_env.filters['name_masking'] = name_masking_filter

保存代码,浏览器访问 /filter。

image.png

过滤器生效,名字已经被替换为 **。

这里给大家分享一份Python全套学习资料,包括学习路线、软件、源码、视频、面试题等等,都是我自己学习时整理的,希望可以对正在学习或者想要学习Python的朋友有帮助!

优快云大礼包:全网最全《全套Python学习资料》免费分享🎁

😝有需要的小伙伴,可以点击下方链接免费领取或者V扫描下方二维码免费领取🆓

👉优快云大礼包🎁:全网最全《Python学习资料》免费分享(安全链接,放心点击)👈

​

1️⃣零基础入门

① 学习路线

对于从来没有接触过Python的同学,我们帮你准备了详细的学习成长路线图。可以说是最科学最系统的学习路线,你可以按照上面的知识点去找对应的学习资源,保证自己学得较为全面。
在这里插入图片描述

② 路线对应学习视频

还有很多适合0基础入门的学习视频,有了这些视频,轻轻松松上手Python~在这里插入图片描述

③练习题

每节视频课后,都有对应的练习题哦,可以检验学习成果哈哈!
在这里插入图片描述
因篇幅有限,仅展示部分资料

2️⃣国内外Python书籍、文档

① 文档和书籍资料

在这里插入图片描述

3️⃣Python工具包+项目源码合集

①Python工具包

学习Python常用的开发软件都在这里了!每个都有详细的安装教程,保证你可以安装成功哦!
在这里插入图片描述

②Python实战案例

光学理论是没用的,要学会跟着一起敲代码,动手实操,才能将自己的所学运用到实际当中去,这时候可以搞点实战案例来学习。100+实战案例源码等你来拿!
在这里插入图片描述

③Python小游戏源码

如果觉得上面的实战案例有点枯燥,可以试试自己用Python编写小游戏,让你的学习过程中增添一点趣味!
在这里插入图片描述

4️⃣Python面试题

我们学会了Python之后,有了技能就可以出去找工作啦!下面这些面试题是都来自阿里、腾讯、字节等一线互联网大厂,并且有阿里大佬给出了权威的解答,刷完这一套面试资料相信大家都能找到满意的工作。
在这里插入图片描述
在这里插入图片描述

5️⃣Python兼职渠道

而且学会Python以后,还可以在各大兼职平台接单赚钱,各种兼职渠道+兼职注意事项+如何和客户沟通,我都整理成文档了。
在这里插入图片描述
在这里插入图片描述
上述所有资料 ⚡️ ,朋友们如果有需要 📦《全套Python学习资料》的,可以扫描下方二维码免费领取 🆓
😝有需要的小伙伴,可以点击下方链接免费领取或者V扫描下方二维码免费领取🆓

👉优快云大礼包🎁:全网最全《Python学习资料》免费分享(安全链接,放心点击)👈

​

Python Web安全实战:四大核心漏洞原理与防御详解 Web安全是软件开发的基石,其核心在于正确处理用户输入与系统信任边界。从原理层面看,SQL注入、XSS、CSRF和SSRF等漏洞均源于对用户输入数据的过度信任或不当处理。理解这些漏洞的成因与利用方式,不仅能提升代码安全性,更是进行渗透测试、漏洞挖掘等安全实践的基础。在工程实践中,参数化查询、输出编码、CSRF Token和请求过滤等技术构成了有效的防御体系。例如,针对SQL注入,应强制使用参数化查询而非字符串拼接;对于XSS,需在输出时进行HTML实体编码。这些防护措施与安全HTTP头、依赖库管理等共同构建 阅读详情

相关推荐

JinJia2 过滤器

自定义过滤器在Jinja2模板引擎中是一项强大的功能,它允许开发者定义自己的函数来处理和转换模板中的变量。这些自定义过滤器可以像Jinja2的内置过滤器一样,在模板中被管道符()调用。首先,你需要在Python中定义一个函数,这个函数将作为你的自定义过滤器。这个函数应该接受至少一个参数(即模板中传递给过滤器的变量),并返回处理后的结果。# 对value进行处理# 例如,将字符串转换为大写。

优快云全栈领域优秀博主,阿里云博客专家,工信部权威认证物联网技术开发工程师,曾30分钟高分通过C语言二级,两天手撸代码完成EasyX飞机大战,靠接软件私活一个月换苹果电脑 1176

Jinja2模板过滤器

Jinja2模板过滤器的介绍和使用示例。

TCatTime的博客 2827

从字符串到序列:Jinja2 过滤器的终极指南(Jinja2 filter过滤器的使用方法整理与总结)

从字符串到序列:Jinja2 过滤器的终极指南(Jinja2 filter过滤器的使用方法整理与总结)

XiaoqiangClub的博客 763

Jinja2 中常用的过滤器

Jinja2 是 Python 中流行的模板引擎之一,具有可扩展性和灵活性。在 Jinja2 中,过滤器是一种特殊的功能,它可以用于修改变量的输出。本文将介绍 Jinja2 中常用的过滤器以及如何使用它们。

flower_drop的博客 2199

JinJia2 模板

Jinja2 是一个功能强大、易于使用的 Python 模板语言。它提供了丰富的语法特性和高级功能,使得模板设计更加灵活和高效。无论是在 Flask 还是其他 Web 框架中,Jinja2 都是一个值得推荐的选择。

优快云全栈领域优秀博主,阿里云博客专家,工信部权威认证物联网技术开发工程师,曾30分钟高分通过C语言二级,两天手撸代码完成EasyX飞机大战,靠接软件私活一个月换苹果电脑 762

36. 路由和模板——《跟老吕学Python·初级开发者》

在Web应用开发中,路由和模板是两个核心概念,它们共同工作来处理客户端请求并提供响应。路由决定了浏览器的URL如何关联到应用的代码。在Flask中,路由通过装饰器来实现。 36.1.2 动态路由 动态路由允许你根据URL中的参数来定义路由。 36.1.3 路由的HTTP方法 指定路由应响应的HTTP方法(GET、POST、PUT、DELETE等)。 36.1.4 路由的变量规则 使用来定义路由变量的类型。 36.2 模板(Templates) 模板是渲染HTML页面的工具,Flask使用Jinja2作为其模

Python老吕的博客 261

【Flask框架】——12 Jinja2模板-过滤器

什么是过滤器? 实质上就是一个转换函数。变量可以通过“过滤器”进行修改,过滤器可以理解为是jinja2里面的内置函数和字符串处理函数。

Python全栈系列 1105

#智慧文旅#文创商城管理系统,一站式文旅商品营销管理平台

#智慧文旅#文创商城管理系统满足景区、运营公司或者全域文旅对文创店铺、商品的全流程管理需求,提供文创商品的线上线下产品销售、会员管理、促销管理等服务。包括文创店铺的基本信息管理、文创商品的分类管理、标签管理、上下架管理、库存案例、配送管理等功能。

数字赋能,开启智慧文旅新时代 1177

【python-flask学习笔记】2.4 Jinja2模版-过滤器

1、过滤器的介绍和语法 * 介绍:过滤器可以处理变量,把原始的变量经过处理后在展示出来。作用的对象是变量。 * 语法:{{ avatar | default('xxx') }} 1.1 default()过滤器 <body> <p>过滤器模板文件</p> <img src="{{ img_url | default('http:...

Aboil的博客 472

Stata实战:DID平行趋势检验完整操作指南(附reghdfe+coefplot代码)

本文提供了一份使用Stata进行DID平行趋势检验的完整实战指南。文章详细讲解了从数据准备、生成相对时间变量,到利用reghdfe命令构建动态效应模型,以及使用coefplot命令进行结果可视化的全流程操作。核心在于通过检验政策前交互项的显著性,验证处理组与对照组是否满足平行趋势假设,为后续因果推断奠定可靠基础。

weixin_29231725的博客 1383

基于Java的高校校园点餐系统

本文介绍了一个基于Java技术开发的高校校园点餐系统,该系统以B/S结构为基础,采用MySQL作为数据库,实现了一个高效、便捷的在线点餐平台。系统主要面向三类用户:管理员、用户和食堂工作人员,提供包括用户管理、食堂管理、菜单管理、订单管理等在内的多项功能。通过系统的具体测试,验证了其可行性和有效性,为高校师生提供了一个科学化、系统化的点餐服务。高校校园点餐系统的开发和实现,不仅提高了校园餐饮服务的效率和质量,也为师生提供了一个更加便捷的点餐体验。

a632341031的博客 841

解决使用 Jinja2 插入 JSON 数据时出现的乱码

2019独角兽企业重金招聘Python工程师标准>>> ...

weixin_34283445的博客 2051

DIY音乐播放器:用VS1053模块+Arduino打造你的专属MP3播放器(附完整代码)

本文详细介绍了如何使用VS1053音频解码模块与Arduino开发板,从零开始构建一个功能完备的桌面级MP3播放器。内容涵盖硬件架构设计、SPI总线共享、底层驱动编写、双缓冲区数据流管理以及用户交互实现,并提供完整的代码示例与性能优化建议,帮助创客打造高度可定制的专属音乐播放设备。

weixin_29189003的博客 290

知了课堂python_Python框架Flask系列课程(2)—全栈开发[知了课堂]

教程目录:课时01.【Flask预热】课程介绍.flv课时02.【Flask预热】Flask课程准备工作.flv课时03.【Flask预热】URL组成部分详解.flv课时04.【Flask预热】web服务器+应用服务器+web应用框架.flv课时05.【Flask.URL】第一个flask程序详解.flv课时06.【Flask.URL】debug模式详解.flv课时07.【Flask.URL】配置...

weixin_39566864的博客 1182

【NIFI】实现HANA->ORACLE数据同步

实现 HANA->ORACLE数据同步。

weixin_43159039的博客 1510

Python爬虫实战:逆向工程与异步处理攻克Pinterest无限滚动瀑布流

我们将从零开始,逐步分析其数据接口,构建一个功能完整的爬虫,并深入探讨反爬虫策略的应对、性能优化以及数据存储等高级主题。: 在实际爬取中,你需要先访问一次Pinterest主页,获取初始的Cookie和CSRF Token,然后再发起API请求。: Python爬虫,Pinterest,无限滚动,瀑布流,异步IO,httpx,逆向工程,API接口,动态内容,反爬虫。你会很快发现一些关键的请求模式。:页面初始加载有限内容,随着用户滚动,新的图片块通过AJAX动态加载,实现“永无止境”的浏览。

2201_76125261的博客 552

python操作html5日期控件_[已解决]Flask中的templates的html中格式化datetime

现在已有对应的Flask的templates的html中的python的datetime变量:todayEvent.start_date{% for todayEvent in todayEventList %}{{ todayEvent.title }}发起人:{{ todayEvent.user.nickname }}时间:{{ todayEvent.start_date }} – {{ to...

weixin_39565300的博客 376

STM32开发 -- LIS3DH三轴加速度计开发详解

这次要讲一下LIS3DH三轴加速度计的开发使用,之前是有讲过 MPU6050开发 的,但当时是在Linux下做的。额,还是个半成品,哈哈。现在手边有STM32的开发板,可以实实在在的来实现以下卡尔曼滤波了。 一、LIS3DH初识 依照惯例,先看一下手册,大致先了解一下,LIS3DH是什么模块。 下载:LIS3DH datasheet 1、描述 LIS3DH是一款超低功耗高性能三轴线性加速度计,属于...

不积跬步,无以至千里 2万+

flask之--钩子,异常,上下文,flask-script,模板,过滤器,csrf_token

一.请求钩子 在客户端和服务器交互的过程中,有些准备工作或扫尾工作需要处理,比如: - 在请求开始时,建立数据库连接; - 在请求开始时,根据需求进行权限校验; - 在请求结束时,指定数据的交互格式; 为了让每个视图函数避免编写重复功能的代码,Flask提供了通用设施的功能,即请求钩子。 请求钩子是通过装饰器的形式实现,Flask支持如下四种请求钩子: - bef...

weixin_30279751的博客 252

《QT+PCL》点云配准进阶——GROR配准

GROR点云配准

阁楼 1318

jre9下载 jdk9

(Java SE Runtime Environment 9.0) 9.0u175 官方最新版 【x86|x64】

【Python】Flask系列-模板笔记

Jinja2模板 Jinja2模板传参 如何渲染模板: 模板放在templates文件夹下 从flask中导入render_template函数。 在视图函数中,使用render_template函数,渲染模板。注意:只需要填写模板的名字,不需要填写templates这个文件夹的路径。 模板传参: 如果只有一个或者少量参数,直接在render_template函数中添加关键字参数...

weixin_30877755的博客 159

VB摄像头监控

该VB模块可对摄像头捕获的画面进行录像等,可在创建的窗口进行控制

Flask系列-模板笔记

Jinja2模板 Jinja2模板传参 如何渲染模板: 模板放在templates文件夹下 从flask中导入render_template函数。 在视图函数中,使用render_template函数,渲染模板。注意:只需要填写模板的名字,不需要填写templates这个文件夹的路径。 模板传参: 如果只有一个或者少量参数,直接在render_template函数中添加关键字参数就可以了...

17bdw的编程备份笔记 181

霍尼韦尔SoftMaster使用说明

霍尼韦尔SoftMaster使用说明

数学建模模型总结

这是本人在两年内准备参加数学建模竞赛搜集到的模型资料,已经经过了本人的筛选和整理,希望能够对准备参加数学建模竞赛的学弟学妹们提供一些帮助!

Flask基础教程(第一阶段)

Flask是一个用Python编写的微框架,它主要用于构建Web应用。由于其简单性和灵活性,Flask在初学者和专业开发者中都受到欢迎。

蜡笔小新星的博客 2763

Flask 使用小结

Flask 使用小结 2016-08-15 Python开发者 来源:伯乐在线专栏作者 - wklken 链接:http://python.jobbole.com/84003/ flask 使用的一些整理 最简单的hello world #!/usr/bin/

淡蓝 5775

Flask生产环境性能优化全链路实战指南

Flask作为轻量级Python Web框架,其性能瓶颈往往不在业务代码本身,而深藏于WSGI协议实现、Gunicorn进程调度、缓存策略设计及数据库交互等底层环节。理解WSGI如何作为请求入口的‘资源调度中枢’,掌握Gunicorn worker类型与数量对I/O密集型应用的实际影响,是突破响应延迟的关键。结合Redis缓存选型、三层缓存架构(响应级/视图级/数据级)以及缓存穿透/击穿/雪崩的工程化防御,可系统性提升高并发场景下的吞吐与稳定性。本文聚焦Flask在真实SaaS与图书管理系统的千次压测经验,

weixin_33858485的博客 447

2021.11.08【web刷题记录】

SSTI模板注入 模板引擎注入 twig、flask注入

Aemilia的博客 241
上一篇: 多达3263页学习资料,一本在手,Python不愁!
下一篇: 【顶级干货】从小白到大牛的Python学习路线,太实在!
Llama-Turbo
博客等级 码龄4年 9901粉丝 2024原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值