flask学习记录

本文详细介绍了在Flask中使用Jinja2模板的实践心得,包括变量代码块、过滤器、列表操作、控制代码块、模板继承、模板中特有的变量和函数。强调了模板在分离业务逻辑和表现内容方面的重要性,以及如何自定义过滤器和利用Jinja2的控制结构实现复杂的逻辑。
摘要由CSDN通过智能技术生成

flask学习心得

-1 Jinja2模板的具体知识

1 视图函数主要有两个功能 处理业务逻辑返回响应内容。在大型应用中,把业务逻辑和表现内容放在一起,会增加代码的复杂度和维护成本,而模板的作用就是承担视图函数的另一个功能返回响应内容

模板是一个包含响应文本的文件,用占位符表示动态部分,告诉模板引擎其具体的值需要从使用的数据中获取。 使用真实值替换变量 在返回最终得到的字符串 这个过程称为渲染

这样视图函数只需要负责业务逻辑和数据处理 而模板则取到视图函数的数据结果进行展示 这些耦合度低 结构清晰

Flask提供的render_template函数封装了模块引擎也就是具体替换的功能 其核心还是运用了正则的替换

render_template函数的第一个参数是模板的文件名,后面的参数都是健值对,表示模板中变量对应的真实值

1变量代码块

1.{{}}来表示变量名 这种语法叫做变量代码块

2.jinjia2模板中的变量代码块可以是任意python类型或者对象,只要它能够被python的str方法转换为一个字符串就可以,

3.用{%%}定义来控制代码块 可以实现一些语言层次的功能,比如循环或者if语句

4 . 使用{##}进行注释,注释的内容不会在html中被渲染出来
模板变量的基本使用

在这里插入图片描述
1过滤器

过滤器的本质就是函数。不仅仅只需要输出变量的值,还需要修改变量的显示,甚至格式化 运算 但在模板中是不能直接调用Python中的某些方法,所以用过滤器

使用方法 变量名 | 过滤器
{{variable | filter_name(*args)}}

如果没有任何参数传给过滤器 ,则可以把括号省略掉
{{variable | filter_name}}

在jinja2中,过滤器是可以支持链式调用的
{{‘变量’ | reverse | upper} }

常见内置的过滤器

1 safe 禁止转义 因为jinja2默认是会对html字符进行自动转义 的 所以可以使用safe过滤器取消自动转义

2 . capitalize 把变量值的首字母转成大写其余字母转小写

3 . lower 把值转成小写

4 . upper 把值转成大写

5 . title 把值中的每个单词的首字母都转成大写

6 . reverse 字符串反转

7 . format 格式化输出

8 . striptags 渲染之前把值中所有的html标签都删掉

9 . truncate 字符串截断

2列表操作

1 first 取第一个元素

2 last 取最后一个元素

3 length 获取列表长度

4 sun 列表求和

5 sort 列表排序

在这里插入图片描述

3过滤代码块是怎么用的

4自定义过滤器
因为过滤器的本质是函数所以可以自定义

有两种实现方式
1 通过Flask应用对象的add_template_filter方法这个方法的第一个参数是函数名 第二个参数是自定义的过滤器名称

注意必须设置形参来接收模板变量的值
需要将转换后的内容返回

2 通过装饰器来实现自定义过滤器
(通过装饰器怎么实现过滤器)??

注意:自定义的过滤器名称如果和内置的过滤器重名 会覆盖内置的过滤器

比如说 自定义一个列表反转的过滤器

在这里插入图片描述

5控制代码块 重点
多敲几遍代码

if语句 在jinja2语法中的If语句跟python中if相似。返回布尔值的表达式决定代码中的哪个流程先执行

同时过滤器也可以被用在if语句中

for循环 在jinja2中 使用循环来迭代任何列表或者生成器函数

循环和If语句可以组合使用 以模拟python循环中的continue功能

1 loop.index 当前循环的次数 从1开始
2 loop.index() 当前循环的次数 从0开始
3 loop.revindex 当前循环倒数的次数 从1 开始
4 loop.revindex() 当前循环倒数的次数从0开始
5 loop.first 如果是第一次迭代 为True
6 loop.last 如果是最后一次迭代 为True
7 loop.length 循环的总次数
8 在一串序列期间取值的辅助函数,

cycle函数会在每次循环的时候,返回其参数中的下一个元素

6模板继承

1 模板继承是为了重用模板中的公共内容 一般web开发 继承主要使用在网站的顶部菜单,底部 这些内容可以定义在父模板中 子模版直接继承 不需要重复书写

就好比在父模板中挖个坑,当子模版继承父模板时 可以进行填充
子模版使用extends指令声明 这个模板继承自哪个模板
父模板中定义的块在子模版中被重新定义 在子模版中调用父模板的内容可以使用super()

模板继承时需要注意
1 不支持多继承
2 为了便于阅读 在子模板中是由extends时 尽量写在模板的第一行
3 不能在一个模板文件中定义多个相同名字的block标签
4 当在页面中使用多个block 标签时 建议给结束标签起个名字 当多个block嵌套时 阅读性更好

7模板中特有的变量和函数
可以在自己定义的模板中访问一些Flask默认内置的函数和对象

config 从模板中直接访问Flask当前的config对象

request 代表当前请求的request对象

session 为Flask的session对象

g 变量
在视图函数中设置g变量的name 属性的值 然后在模板中直接可以取出

url_for 它会根据传入的路由器函数名 返回该路由对应的url 在模板中始终使用url_for()就可以安全的修改路由绑定的url 则不必担心模板中渲染出错的链接

如果定义的Url 是带有参数的 则可以把它们作为关键字参数传入url_for() Flask 会把他们填充进最终生成的url中

get_flashed_messages()
这个函数会返回之前flask中通过flask()传入的消息的列表 或者说它可以取出通过flask()函数加入的数据

flask() 函数的功能是什么?
我的理解是把python的字符串 通过flask()加入到一个消息队列中

8前端渲染和后端渲染的区别

后端渲染 : 使用正则表达式在服务器端直接对Html进行替换

优点:有利于SEO(搜索引擎优化)
缺点:前后端不分离,开发效率低

前端渲染 前端使用Js对html内容进行更改
常用处理是发起ajax异步请求,后端以json形式返回数据 Js在根据返回的数据拼接html

优点 前后端分离,开发效率高 实现了局部动态刷新的效果

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值