Flask Web开发实验一:第一个Flask项目与Flask的工作方式
目录
2.1 初始化
2.2 路由和视图函数
2.3 启动服务器
2.4 一个完整的程序,
示例 2-1 hello.py:一个完整的 Flask 程序
示例 2-2 hello.py:包含动态路由的 Flask 程序
2.5.1 程序和请求上下文
2.5.2 请求调度
2.5.3 请求钩子
2.5.4 响应
2.6 Flask扩展
2.1 初始化
所有
Flask
程序都必须创建一个
程序实例
。
Web
服务器使用一种名为
Web
服务器网关接口
(
Web Server Gateway Interface
,
WSGI
)的协议,把接收自客户端的所有请求都转交给这
个对象处理。程序实例是
Flask
类的对象,经常使用下述代码创建:
from flask import Flaskapp = Flask(__name__)
Flask
类的构造函数只有一个必须指定的参数,即程序主模块或包的名字。在大多数程序
中,
Python
的
__name__
变量就是所需的值
2.2 路由和视图函数
客户端(例如
Web
浏览器)把
请求
发送给
Web
服务器,
Web
服务器再把请求发送给
Flask
程序实例。程序实例需要知道对每个
URL
请求运行哪些代码,所以保存了一个
URL
到
Python
函数的映射关系。处理
URL
和函数之间关系的程序称为
路由
。
在
Flask
程序中定义路由的最简便方式,是使用程序实例提供的
app.route
修饰器,把修
饰的函数注册为路由。下面的例子说明了如何使用这个修饰器声明路由:
@app.route('/')def index():return '<h1>Hello World!</h1>'
如果你仔细观察日常所用服务的某些
URL
格式,会发现很多地址中都包含可变部分。例
如, 你 的
Facebook
资 料 页 面 的 地 址 是
http://www.facebook.com/<
your-name
>
, 用 户 名
(
your-name
)是地址的一部分。
Flask
支持这种形式的
URL
,只需在
route
修饰器中使用特
殊的句法即可。下例定义的路由中就有一部分是动态名字
@app.route('/user/<name>')def user(name):return '<h1>Hello, % s!</h1>' % name
尖括号中的内容就是动态部分,任何能匹配静态部分的
URL
都会映射到这个路由上。调
用视图函数时,
Flask
会将动态部分作为参数传入函数。在这个视图函数中,参数用于生
成针对个人的欢迎消息。
路由中的动态部分默认使用字符串,不过也可使用类型定义。例如,路由
/user/<int:id>
只会匹配动态片段
id
为整数的
URL
。
Flask
支持在路由中使用
int
、
float
和
path
类型。
path
类型也是字符串,但不把斜线视作分隔符,而将其当作动态片段的一部分。
2.3 启动服务器
程序实例用
run
方法启动
Flask
集成的开发
Web
服务器:
if __name__ == '__main__':app.run(debug=True)
__name__==
'
__main__
'
是
Python
的惯常用法,在这里确保直接执行这个脚本时才启动开发
Web
服务器。如果这个脚本由其他脚本引入,程序假定父级脚本会启动不同的服务器,因
此不会执行
app.run()
。
服务器启动后,会