Flask 路由

在 Flask 应用中,路由是指用户请求的 URL 与视图函数之间的映射。

 

1. 路由

Flask 框架根据 HTTP 请求的 URL 在路由表中匹配预定义的 URL 规则,找到对应的视图函数,并将视图函数的执行结果返回 WSGI 服务器:

Flask 路由

路由表在 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 框架中,通过向路由规则的参数添加变量部分,可以动态构建 URL。其中变量部分标记为 <variable-name> 。它作为关键字参数传递给与规则相关联的函数。