1 初始化

所有 Flask 应用都必须创建一个应用实例。 Web 服务器使用一种名为 Web 服务器网关接口(WSGI, Web server gateway interface,读作“wiz-ghee”)的协议,把接收自客户端的所有请求都转交给这个对象处理。应用实例是 Flask 类的对象,通常由下述代码创建:

from flask import Flask
app = Flask(__name__)

Flask 类的构造函数只有一个必须指定的参数,即应用主模块或包的名称。在大多数应用中, Python 的__name__ 变量就是所需的值。

2 路由和视图函数

客户端(例如 Web 浏览器)把请求发送给 Web 服务器, Web 服务器再把请求发送给 Flask应用实例。应用实例需要知道对每个 URL 的请求要运行哪些代码,所以保存了一个 URL到Python 函数的映射关系。处理 URL 和函数之间关系的程序称为路由。
在 Flask 应用中定义路由的最简便方式,是使用应用实例提供的 app.route 装饰器。下面
的例子说明了如何使用这个装饰器声明路由:

@app.route('/')
def index():
    return '<h1>Hello World!</h1>'

前例把 index() 函数注册为应用根地址的处理程序。使用 app.route 装饰器注册视图函数是首选方法,但不是唯一的方法。 Flask 还支持一种更传统的方式:使用 app.add_url_rule() 方法。这个方法最简单的形式接受 3 个参数: URL、端点名和视图函数。下述示例使用app.add_url_rule() 方法注册 index() 函数,其作用与前例相同:

def index():
    return '<h1>Hello World!</h1>'
app.add_url_rule('/', 'index', index)

index() 这样处理入站请求的函数称为视图函数。如果应用部署在域名为 www.example.com 的服务器上,在浏览器中访问http://www.example.com 后,会触发服务器执行 index()函数。这个函数的返回值称为响应,是客户端接收到的内容。如果客户端是 Web 浏览器,响应就是显示给用户查看的文档。视图函数返回的响应可以是包含 HTML 的简单字符串,
也可以是后文将介绍的复杂表单。

如果仔细观察日常所用服务的某些 URL,你会发现很多地址中都包含可变部分。例如,你的 Facebook 资料页面的地址是http://www.facebook.com/,用户名(yourname)是地址的一部分。 Flask 支持这种形式的 URL,只需在 app.route 装饰器中使用特殊的句法即可。下例定义的路由中就有一部分是可变的:

@app.route('/user/<name>')
def user(name):
    return '<h1>Hello, {}!</h1>'.format(name)

路由 URL 中放在尖括号里的内容就是动态部分,任何能匹配静态部分的 URL 都会映射到这个路由上。调用视图函数时,Flask 会将动态部分作为参数传入函数。在这个视图函数中,name 参数用于生成个性化的欢迎消息。

路由中的动态部分默认使用字符串,不过也可以是其他类型。例如,路由 /user/<int:id>只会匹配动态片段 id 为整数的 URL,例如 /user/123。 Flask 支持在路由中使用 string,int、float 和 path 类型。 path 类型是一种特殊的字符串,与 string 类型不同的是,它可
以包含正斜线。