Flask框架--2(模板)

论坛 期权论坛 编程之家     
选择匿名的用户   2021-5-23 01:10   35   0

一.Jinja2模板

1.Jinja2是由python实现的

2.是Flask内置的模板语言

3.参照Django设计思想设计的,跟Django差不多

渲染模板函数

Flask提供的 render_template 函数封装了该模板引擎

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


二.模板的使用

1.在项目下创建 template 文件夹,用于存放所有的模板文件,并在目录下创建一个模板html文件 temp_demo1.html

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <title>Title</title>
</head>
<body>
我的模板html内容
</body>
</html>

2.设置 templates 文件夹属性以便能够在代码中有智能提示


3. 设置html 中的模板语言,以便在 html 有智能提示


4. 创建视图函数,将该模板内容进行渲染返回


在执行转账逻辑之前进行csrf_token的校验

if request.method == "POST":
    to_account = request.form.get("to_account")
    money = request.form.get("money")
    # 取出表单中的 csrf_token
    form_csrf_token = request.form.get("csrf_token")
    # 取出 cookie 中的 csrf_token
    cookie_csrf_token = request.cookies.get("csrf_token")
    # 进行对比
    if cookie_csrf_token != form_csrf_token:
        return 'token校验失败,可能是非法操作'
    print('假装执行转操作,将当前登录用户的钱转账到指定账户')
    return '转账 %s 元到 %s 成功' % (money, to_account)
运行测试,用户直接在网站 A 操作没有问题,再去网站B进行操作,发现转账不成功,因为网站 B 获取不到表单中的 csrf_token 的隐藏字段,而且浏览器有 同源策略 ,网站B是获取不到网站A的 cookie 的,所以就解决了 跨站请求伪造 的问题
分享到 :
0 人收藏
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

积分:3875789
帖子:775174
精华:0
期权论坛 期权论坛
发布
内容

下载期权论坛手机APP