flask与jinja2模板

3 模板(jinja2)

3.1 jinja2 模板

Jinja2模板是由Python实现的模板语言

设计思路:来源于Django的模板引擎

3.2 在flask中返回jinja2模板

from flask import Flask,render_template

flask与jinja2模板_第1张图片

flask与jinja2模板_第2张图片

展示:

flask与jinja2模板_第3张图片

3.3 过滤器

3.3.1 过滤器的格式
{{ 变量 | 过滤器 }} 
3.3.2 自带的过滤器

flask与jinja2模板_第4张图片

展示:

flask与jinja2模板_第5张图片

注意:多个过滤器之间,用 | 隔开

3.3.3 语句块过滤

flask与jinja2模板_第6张图片

展示:

在这里插入图片描述

3.3.4 自定义的过滤器

自定义的过滤器,过滤器本质上就是一个函数,当自带的过滤器不满足要求的时候,我们进行重写

flask与jinja2模板_第7张图片

我们有两种方法进行注册模板过滤器

flask与jinja2模板_第8张图片

一种使用函数进行注册

app.add_template_filter(my_reverse,'myreverse')

另一种使用装饰器进行注册

@app.template_filter('myreverse')

在模板中

flask与jinja2模板_第9张图片

展示:

在这里插入图片描述

3.4 控制代码块

判断list1列表的长度是否大于3 ,是则每一个进行遍历。否则返回没有达到标准

flask与jinja2模板_第10张图片

展示:

flask与jinja2模板_第11张图片

将 list1 列表中下标为偶数对应的值显示为绿色,不为偶数的背景显示为红色

flask与jinja2模板_第12张图片

展示:

flask与jinja2模板_第13张图片

注意:

loop.index0   表示下标从0开始
loop.index    表示下标从1开始

3.5 继承

原始模板:

flask与jinja2模板_第14张图片

在当前页面找出调用模板
在这里插入图片描述

在当前的页面上做原始模板的修改

在这里插入图片描述

展示:

在这里插入图片描述

注意点:不能继承多个模板,会出现报错

flask与jinja2模板_第15张图片

3.6 消息队列

可以将消息队列传递过来的数据展示到前端

from flask import Flask,render_template,flash

flask与jinja2模板_第16张图片

模板中

在这里插入图片描述

展示:

在这里插入图片描述

3.7 在flask中使用pymysql连接数据库,将某个表中的数据展示向前端

from pymysql.connections import Connection

flask与jinja2模板_第17张图片

模板中:

flask与jinja2模板_第18张图片

展示:
flask与jinja2模板_第19张图片

3.8 flask_wtf

pip install flask_wtf
3.8.1 原始表单

当请求方式为 get 的时候,页面显示一个 form 表单,点击登录之后,请求方式为 post ,返回 ok,在后端打印其输入的 username 和 password

flask与jinja2模板_第20张图片

模板:

flask与jinja2模板_第21张图片

展示:

flask与jinja2模板_第22张图片
点击登录之后

在这里插入图片描述

在这里插入图片描述

3.8.2 自定义表单
from flask_wtf import FlaskForm
3.8.2.1 字段
from wtforms import StringField,SubmitField,PasswordField

文本字段,相当于

flask与jinja2模板_第23张图片

密码

flask与jinja2模板_第24张图片

提交

flask与jinja2模板_第25张图片

3.8.2.2 常用验证函数
from wtforms.validators import DataRequired

flask与jinja2模板_第26张图片

DataRequired 检验的是:该字段是否有数据

flask与jinja2模板_第27张图片

EqualTo 检验是否相同,常用做确认密码

flask与jinja2模板_第28张图片

flask与jinja2模板_第29张图片

3.8.3 案例

flask与jinja2模板_第30张图片

flask与jinja2模板_第31张图片

模板中:

flask与jinja2模板_第32张图片

展示:

flask与jinja2模板_第33张图片

当用户名或密码没有输入的时候点击登录会进行提示,填写该字段,当填写完毕之后点击登录跳转到ok,此时后端

1572508060470.png
这是由于 WTF_CSRF_ENABLED 默认为 True 导致的,我们需要进行设置

在这里插入图片描述

此时再运行一遍之后,后端显示

在这里插入图片描述

3.8.4 csrf

flask与jinja2模板_第34张图片

解决csrf攻击的问题:

1、在客户端向后端请求数据的时候,一般情况下,在响应体上的cookie中设置csrf_token的值

2、在form表单中添加一个隐藏字段,值也是csrf_token

3、在用户点击提交的时候,发送的请求会将这两个值一起携带着访问

4、接受请求之后,第一步,从cookie中取出csrf_token,第二步,从表单中取出csrf_token,第三步,将两个值进行对比

案例:

flask与jinja2模板_第35张图片

flask与jinja2模板_第36张图片
展示:

flask与jinja2模板_第37张图片

你可能感兴趣的:(python)