客户端(例如 Web 浏览器)把请求发送给 Web 服务器,Web 服务器再把请求发送给 Flask程序实例。程序实例需要知道对每个 URL 请求运行哪些代码,所以保存了一个 URL 到Python 函数的映射关系。处理 URL 和函数之间关系的程序称为路由。
在 Flask 程序中定义路由的最简便方式,是使用程序实例提供的 app.route 修饰器,把修饰的函数注册为路由。下面的例子说明了如何使用这个修饰器声明路由:
@app.route('/index')
def index():
return "<h1>Hello,World!</h1>"
注:修饰器是 Python 语言的标准特性,可以使用不同的方式修改函数的行为。惯常用法是使用修饰器把函数注册为事件的处理程序。
小技巧:使用Pycharm编辑器时根据上述情况,直接输入:route,选择”route Flask route”会自动填充如下内容:(光标停留在def后面的括号前)
@app.route('/')
def ():
pass
前例把 index() 函数注册为程序根地址的处理程序。如果部署程序的服务器域名为 www.example.com,在浏览器中访问 http://www.example.com 后,会触发服务器执行 index() 函数。这个函数的返回值称为响应,是客户端接收到的内容。如果客户端是 Web 浏览器,响应就是显示给用户查看的文档。像 index() 这样的函数称为视图函数(view function) 。视图函数返回的响应可以是包含HTML 的简单字符串,也可以是复杂的表单。
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 类型也是字符串,但不把斜线视作分隔符,而将其当作动态片段的一部分。