1. 初始化
所有的 Flask 程序都必须创建一个程序实例,所谓程序实例,在 Flask 框架下就是,Flask 类的实例对象(instance)。
from flask import Flask
app = Flask(__name__)
Web 服务器使用一种名为 Web 服务器网关接口(Web Server Gateway Interface,WSGI)的协议,把接收自客户端(client)的所有请求(request)都转交给这个对象处理。
2. 路由与视图函数
客户端(例如 web 浏览器)把请求发送给 web 服务器,web 服务器再把请求发送给 flask 程序实例。
程序实例需要知道对每个 url 请求运行哪些代码,所以需要保存一个 URL 与 Python 函数之间的映射关系。处理 URL 和函数之间的关系的程序成为路由。
@app.route('/')
def index():
return '<h1>Hello World!</h1>'
而像 index() 这样的函数被称为视图函数(view function),视图函数返回的响应可以是包含 HTML 的简单字符串,也可以是复杂的表单。
如果仔细观察日常所用服务的某些 url 格式,会发现许多地址中都包含可变部分。例如 csdn 上的个人博客地址,http://blog.csdn.net/<用户名>
,用户名是地址的一部分。
Flask 也支持这种形式的 URL,
@app.route('/user/<name>')
def user(name):
return '<h1>Hello, %s</h1>' % name
尖括号中的内容就是动态可变部分,任何能匹配静态部分的 URL 都会映射到这个路由上,调用视图函数时,Flask 会将动态部分作为参数传入函数(注意, 尖括号中的内容必须和函数的参数名保持一致)。
路由中的动态部分默认使用字符串,不过也可以使用其他类型定义。Flask 支持在路由中使用 int、float 和 path 类型。path 类型也是字符串,但不把斜线视作分隔符,而将其当做动态片段的一部分。
3. 启动服务器
程序实例app
使用 run 方法启动 Flask 集成的开发 Web 服务器:
if __name__ == '__main__':
app.run(debug=True)
服务器启动后,会进入轮询,等待并处理请求,直到程序停止,比如按下 ctrl + c 键。换句话说,程序会阻塞在这里,app.run()
后面的语句不会被执行。