Flask框架-模板
---恢复内容开始---
概念:
- 模板是指包含响应文本的文件,不特指html格式的文件
基础语法:
- 变量:{{变量}} 接收视图函数返回的数据
- 语句:{% if 表达式%} {%endfif%} {%for v in key%} {{v}} {{%endfor%}}
过滤器:
- 本质是函数,对数据进行计算或格式化输出
- 语法:{{变量 | 过滤器名称}}
- 过滤器支持链式调用,从前到后依次执行
- (重要)自定义过滤器:两种形式
- 定义函数:app.add_tempalte_filte(函数名称,过滤器名称) ,如果和内置过滤器重名会覆盖内置过滤器
- @app_tempalte_filter(过滤器名称)
模板代码复用:
- 继承:本质是代码的替换,作用为了实现模板页面固定区域块替换。
- 相同内容下留下,不同的内容删除(让子模块填充)
- 灵活运用。
- 语法:{%extend 父模板%}{% block %}
- 宏 macro:本质是函数,作用为了实现模板也i按动态的功能代码块。
- 包含include:本质是复用,只能复用原始HTML字符串,不能复用通过扩展实习那的功能。
特殊变量和方法:
- 不仅可以在视图中使用,还可以在模板中使用
- url_for、config、request、session、g、flash消息闪现
CSRF:
- 口述(面试的角度)
- 实现保护:
- 本质是在请求的参数中加入混淆字符串;csrf_token。
- 服务器生成token写入到客户端浏览器的cookie中,如果使用模板在表单域中设置token,服务器会比较cookie和表单域中的token是否一致。
- 如果是异步的网络请求,ajax请求需要在请求的参数中加入token 。
- 服务器会比较请求体和cookie中的token是否一致,如果不一致是伪造的请求。
- 一般只会验证put、post、delete,不会验证get请求;get请求参数长度都是有限制的(根据浏览器的品牌和版本决定),post放在请求体中,原则上没有限制。