《Flask Web开发》读书笔记(一)
第一部分 Flask简介
1.安装
Flask有两个主要依赖:
- 路由、调试和Web服务器网关接口(Web Server Gateway Interface,WSGI)子系统由Werkzeug提供
- 模版系统由Jinja2提供
2.程序的基本结构
2.1 初始化
所有Flask程序都必须创建一个程序实例。Web服务器使用一种名为Web服务器网关接口(WSGI)协议,把接受自客户端的所有请求都转交给这个对象处理。程序实例是Flask类的对象,用以下代码创建:
from flask import Flask
app=Flask(__name__)
Flask类的构造函数只有一个必须指定的参数,即程序主模块或包的名字。在大多数程序中,python的__name__
变量就是所需的值。
2.2 路由和视图函数
路由
客户端(如Web浏览器)把请求发送给Web服务器,Web服务器再把请求发送给Flask程序实例。程序实例需要知道对每个URL请求运行那些代码,所以保存一个URL到python函数的映射关系。处理URL和函数之间的程序叫做路由。
在Flask程序中,定义路由最简便的方式,是使用程序实例提供的app.route
修饰器,把修饰的函数注册为路由。
下面的例子说明了如何使用app.route
声明路由:
@app.route('/')
def index():
return '<h1>Hello</h1>'
上面把index()
函数注册为程序根地址的处理程序。如果部署程序服务器域名为www.example.com
,在浏览器中访问http://www.example.com
后,会触发服务器执行index()
函数。此函数的返回值叫做响应,是客户端接受到的内容。如果客户端是Web浏览器,响应就是显示给用户查看的文档。
像index()
这样的函数称为视图函数(view function)。视图函数返回的响应可以是包含HTML的简单字符串,也可以是复杂的表单。
2.3 启动服务器
程序实例用run
方法启动Flask集成的开发Web服务器:
if __name__=='__main__':
# 这里启用的是调试模式,debug参数为True
app.run(debug==True)
2.4 一个完整的程序
示例2.1一个完整的Flask程序
from flask import Flask
app=Flask(__name__)
@app.route('/')
def index():
return '<h1>Hello</h1>'
if __name__=='__main__':
app.run(debug=True)
上面这段代码的含义:
-
首先,我们导入了 Flask 类。这个类的实例将会是我们的 WSGI 应用程序。
-
接下来,我们创建一个该类的实例,第一个参数是应用模块或者包的名称。 如果你使用单一的模块(如本例),你应该使用
__name__
,因为模块的名称将会因其作为单独应用启动还是作为模块导入而有不同( 也即是'__main__'
或实际的导入名)。这是必须的,这样 Flask 才知道到哪去找模板、静态文件等等。 -
然后,我们使用 route() 装饰器告诉 Flask 什么样的URL 能触发我们的函数。
这个函数的名字也在生成 URL 时被特定的函数采用,这个函数返回我们想要显示在用户浏览器中的信息。 -
最后我们用 run() 函数来让应用运行在本地服务器上。 其中
if __name__ == '__main__':
确保服务器只会在该脚本被 Python 解释器直接执行的时候才会运行,而不是作为模块导入的时候。
示例2-2是上面程序的增强版,添加了一个动态路由,访问这个地址时,会看到针对个人的欢迎信息
示例2-2包含动态路由的Flask程序
from flask import Flask
app=Flask(__name__)
@app.route('/')
def index():
return '<h1>Hello</h1>'
@app.route('/user/<name>')
def user(name);
return '<h1>Hello,%s!</h1>'% name
if __name__ == '__main__':
app.run(debug=True)
注意:再测试动态路由前,要确保服务器正在运行,然后访问http://127.0.0.1:5000/user/Turing
程序会显示一个使用name动态参数生成的欢迎信息。