NOTE
1.VF的作用:生成请求的响应。一般来说请求会改变程序的状态,这种变化会在视图函数中产生。
eg.用户在网站中注册了一个新账户,用户在表单中输入电子邮件地址和密码,然后提交到服务器,服务器接收到请求,然后Flask将请求分发到处理注册的视图函数。这个视图函数首先要访问数据库添加新用户,然后生成响应返回游览器。
访问数据库添加新用户的过程称为业务逻辑,生成响应返回称为表现逻辑。
2.将业务逻辑和表现逻辑混杂在一起使代码难以理解和维护。把表现逻辑移动到模板中能够提升程序的可维护性。
3.模板是一个保含响应文本的文件,其中有需要用上下文中的真实值替换占位变量的动态部分,也有无法改变的静态部分。
用真实值替换变量,返回响应字符串,称为渲染。
Flask使用了名为Jinja2的强大模板引擎。
4.Demo
Jinja2 templates/index.html
Hello World!
Jinja2 templates/user.html
Hello, { { name }}!
模板渲染:从flask导入render_template函数,以集成Jinja2引擎。
#!/usr/bin/env pythonfrom flask import Flask, render_templateapp = Flask(__name__)@app.route('/')def index(): return render_template('index.html')@app.route('/user/')def user(name): return render_template('user.html', name=name)if __name__ == '__main__': app.run(debug=True)
name=name
关键字键值对,左边的name是参数名,右边的name是变量。
(venv) sh-3.2# ./hello.py * Running on http://127.0.0.1:5000/ (Press CTRL+C to quit) * Restarting with stat * Debugger is active! * Debugger pin code: 195-717-834127.0.0.1 - - [18/Feb/2017 15:52:11] "GET / HTTP/1.1" 200 -127.0.0.1 - - [18/Feb/2017 15:52:22] "GET / HTTP/1.1" 200 -127.0.0.1 - - [18/Feb/2017 15:52:23] "GET /user/wasdns HTTP/1.1" 200 -127.0.0.1 - - [18/Feb/2017 15:52:25] "GET /user/wasdns HTTP/1.1" 200 -
5.{ { name }}
结构表示一个变量,是一种特殊的占位符。Jinja2能够识别所有类型的变量,甚至是一些复杂的类型。
此外,可以使用过滤器来修改变量,过滤器名添加在变量名之后,中间使用竖线划分。
=>
safe 渲染值时不转义capitaliza 把值的首字母替换为大写,其他为小写。
eg.
Hello, { { name|capitalize }}!
@app.route('/user/')def user(name): return render_template('filter.html', name=name)
127.0.0.1 - - [18/Feb/2017 16:11:01] "GET /user/wasdns HTTP/1.1" 200 -
出于安全考虑,Jinja2会转义所有变量。有些情况下需要显示变量中存储的html代码,这个时候就需要使用safe过滤器。
2017/2/18