Flask-模板说明

本文介绍了Flask框架中的模板使用,包括jinja2模板引擎、渲染、变量、过滤器、控制代码块和模板继承。同时,文章详细讲解了CSRF的概念、攻击流程及Flask中防止CSRF的方法,提供了设置secret_key和使用CSRFProtect的步骤。

Flask_模板

    定义:包含响应文本文件,使用占位符标识动态,可以从使用的数据中获取

    渲染的定义:使用真实数据替换变量,并返回最终的字符串

    Flask:使用的是jinja2模板引擎进行渲染

    好处:

        视图函数负责:业务逻辑和数据处理

        模板负责:接收视图函数结果进行展示

        代码清晰,低耦合

    样式:{{ 变量代码块 }}  {% 控制代码块 %}

    注释:{{# 注释结果不会被渲染 #}}

 

    传递值至模板

        创建:templates 文件夹    【设置为指定文件夹,修改html模板语言为jinja2】

        视图中导入:rander_template

        视图函数返回值:return rander_template("模板文件名.html",变量名,x2...)

        变量可以是字符串,列表,字典

        该跳转后,浏览器显示的还是访问路径不是模板路径

 

    过滤器:

        概述:修改变量显示以及格式化运算等

        应用:变量名 | 过滤器        【{{variable | filter_name(*args)}}】

        支持链式调用:{{ 值 | 过滤器1 | 过滤器2 }}按照顺序从左至右执行过滤器

        内置过滤器:

            safe:禁用转义,因为标签默认转换[lt;h1gt = <h1>]

            capitalize:变量首字母大写,其余小写

            lower:转换为小写

            upper:转换为大写

            title:值中每个单词的首字母转大写 ??

            reverse:字符串反转

            format:格式化输出    【<p>{{ '%s is %d' | format('name',17) }}</p>】

            striptags:渲染前清除所有HTML标签

            truncate:字符串截断

        列表操作:

            first:取第一个元素

            last:取最后一个元素

            length:列表长度

            sum:列表求和

            sort:列表排序

        语句块过滤:

            {% filter upper%}

                #文字块#

            {% endfilter %}

        自定义过滤器

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

            创建方式:

                1.调用实例的 add_template_filter 方法,参数一(规则函数的函数名),参数二(自定义过滤器名称)

                2.装饰器实现,参数是自定义的过滤器名称

            应用:{{ 值 | 过滤器 }}

 

    控制代码块

        Jinja2的语法稍有不同,但本质一致,返回结果为布尔值

        {%if  else if  else   endif(结束) %}

        {% for endfor(结束) %}

        两者可以一起使用,在for循环中可以用到:

            loop.index          当前循环次数,从1开始

            loop.index()        当前循环次数,从0开始

            loop.revindex     当前循环结束需要迭代的次数,从1开始

            loop.revindex()   当前循环结束需要迭代的次数,从1开始

            loop.first             第一次迭代,为True

            loop.last             最后一次迭代,为True

            loop.length        序列中的项目数

            loop.cycle          在一串序列间期取值的辅助函数

 

    模板继承

        场景:存在相同的htnl代码块,以及部分相同的顶部和底部内容

        作用:重用模板的公共内容

        {% block xx %}  {% endblock %}

        子模板使{% extends  'xxxx'%} 声明父模板继承

        重写:与父模板的block 名称一致

        注意

            不支持多继承

            子模板使用extends时,尽量在模板第一行

            不能再一个模板文件定义多个相同名字的block标签

            使用多个block标签时,建议给结束标签取名使用

 

    特有变量和函数

        Flask内置的函数和变量

        作用:使用内置对象,无需动态传递值,页面直接使用

        config:偶去当前config对象

        request:代表当前请求的request对象

        session:为Flask的session对象

        g:全局临时变量

        url_for:根据传入的路由函数名,返回路由对应的url

 

    CSRF

        概述:跨站请求伪造,攻击者盗用用户身份发送恶意请求,盗取账号以及私密资料造成隐私泄露和财产安全问题

        攻击流程:

            

            

        防止步骤:

            1.客户端发送请求时,在响应中添加csrf_token值

            2.在form表单中添加隐藏字段,值是csrf_token

            3.用户提交时,带上连个值向后台发送请求

            4.后端接收后:

                a.从cookie中取出csrf_token

                b.从表单中取出隐藏的 csrf_token 的值

                c.进行对比

            5.验证条件,值一致则正常请求,没有取到则不执行下一步

        Flask中解决CSRF

            1.设置程序的secret_key:用于加密生成 csrf_token 的值

                app.secret_key = "随机字符串"

            2.导入 flask_wtf.csrf 的CSRFProtect类,初始化并关联app

                from flask.ext.wtf import CSRFProtect

                CSRFProtect(app)

            3.如果模板中有表单,在表单中添加

                {{  form.csrf_token }}

            没有表单则自己设置

                <form method='post' action="/">

                    <input type"hidden" name="csrf_token" value="{{  csrf_token() }}">

                </form>

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值