Flask 有两个主要依赖:路由、调试和Web 服务器网关接口(Web Server Gateway Interface,
WSGI)子系统由Werkzeug(http://werkzeug.pocoo.org/)提供;模板系统由Jinja2(http://
jinja.pocoo.org/)提供。Werkzeug 和Jinjia2 都是由Flask 的核心开发者开发而成。
一、 初始化
from flask import Flask
app = Flask(__name__)
Flask 类的构造函数只有一个必须指定的参数,即程序主模块或包的名字。在大多数程序中,Python 的__name__ 变量就是所需的值。所有Flask 程序都必须创建一个程序实例。
将构造函数的name 参数传给Flask 程序,这一点可能会让Flask 开发新手心生迷惑。Flask 用这个参数决定程序的根目录,以便稍后能够找到相对于程序根目录的资源文件位置。
二、路由
@app.route('/')
def index():
return '<h1>Hello World!</h1>'
使用程序实例提供的 “app.route” 修饰器,把修饰的函数注册为路由。index()视图函数
可以返回html。
动态url
@app.route('/user/<name>')
def user(name):
return '<h1>Hello, %s!</h1>' % name
尖括号中的内容就是动态部分,任何能匹配静态部分的URL 都会映射到这个路由上。调用视图函数时,Flask 会将动态部分作为参数传入函数。
三、启动
if __name__ == '__main__':
app.run(debug=True)
也可以不加debug模式 app.run() 还可以加监听端口等。
四、模板
默认情况下,Flask 在程序文件夹中的templates 子文件夹中寻找模板。
模板是一个包含响应文本的文件,其中包含用占位变量表示的动态部分,其具体值只在请求的上下文中才能知道。使用真实值替换变量,再返回最终得到的响应字符串,这一过程称为渲染。为了渲染模板,Flask 使用了一个名为Jinja2 的强大模板引擎。
例如:
templates/user.html:Jinja2 模板
<h1>Hello, {{ name }}!</h1>
hello.py
from flask import Flask, render_template
# ...
@app.route('/user/<name>')
def user(name):
return render_template('user.html', name=name)
Flask 提供的render_template 函数把Jinja2 模板引擎集成到了程序中。render_template 函数的第一个参数是模板的文件名。随后的参数都是键值对,表示模板中变量对应的真实值。在这段代码中,第二个模板收到一个名为 name 的变量。
模板中使用的{{ name }} 结构表示一个变量,它是一种特殊的占位符,告诉模板引擎这个位置的值从渲染模板时使用的数据中获取。
ja2Jin 能识别所有类型的变量,甚至是一些复杂的类型,例如列表、字典和对象。
在模板中还可以使用条件控制语句或者for循环等 。
例如;
{% if user %}
Hello, {{ user }}!
{% else %}
Hello, Stranger!
{% endif %}
<ul>
{% for comment in comments %}
<li>{{ comment }}</li>
{% endfor %}
</ul>