|
一.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")
form_csrf_token = request.form.get("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 的,所以就解决了
跨站请求伪造
的问题
|