Flask 路由
在 Flask 应用中,路由是指用户请求的 URL 与视图函数之间的映射。
1. 路由
Flask 框架根据 HTTP 请求的 URL 在路由表中匹配预定义的 URL 规则,找到对应的视图函数,并将视图函数的执行结果返回 WSGI 服务器:
路由表在 Flask 应用中处于相当核心的位置,路由表的内容是由应用开发者填充。
2. route 装饰器
我们可以使用 Flask 应用实例的 route 装饰器,将一个 URL 规则绑定到一个视图函数上。
例如,下面的示例将 URL 规则 /hello 绑定到视图函数 hello_world()上:
@app.route('/hello') def hello_world(): return 'hello world'
在这里,URL '/ hello' 规则绑定到 hello_world() 函数。
因此,如果用户访问 http://localhost:5000/hello ,hello_world() 函数的输出将在浏览器中呈现。
3. add_url_rule() 函数
Flask 应用实例的 add_url_rule() 函数也可用于将 URL 与函数绑定,如上例所示,可以使用 add_url_rule() 代替 route()。
def hello_world(): return 'hello world' app.add_url_rule('/', 'hello', hello_world)
4. 指定 HTTP 方法
默认情况下,Flask 路由仅支持 HTTP的 GET 请求。可以使用 methods 关键字参数,在注册路由时显式地声明视图方法支持的 HTTP 方法。
例如,下面的示例将URL规则 /auth 绑定到视图函数 v_auth(),这个路由仅支持 POST 方法:
@app .route('/auth' ,methods = [ 'POST' ]) def v_auth(): return pass
关键字参数 methods 的类型为list,因此可以同时指定多种 HTTP 方法。
下面的示例中,使 URL 规则 /user 同时支持 POST 方法和 GET 方法:
@app .route('/user', methods = ['POST' , 'GET']) def v_users(): if request.method == 'GET': return ... # 返回用户列表 if request.method == 'POST' return ... #创建新用户
这个特性使 Flask 非常易于开发 REST 架构的后台服务,而不仅仅局限于传统的动态网页。
下一章:Flask 动态路由
在 Flask 框架中,通过向路由规则的参数添加变量部分,可以动态构建 URL。其中变量部分标记为 <variable-name> 。它作为关键字参数传递给与规则相关联的函数。