# Flask 教程：路由

> 原文： [https://pythonbasics.org/Flask-Tutorial-Routes/](https://pythonbasics.org/Flask-Tutorial-Routes/)

现代的 Web 应用程序使用一种称为路由的技术。 这可以帮助用户记住 URL。 例如，他们看到的不是`/booking.php`，而是`/booking/`。 他们会看到`/account/1234/`，而不是`/account.asp?id=1234/`。



## 路由

### Flask 路由示例

Flask 中的路由映射到 Python 函数。 您已经创建了一条路由，即`/`路由：

```py
@app.route('/')
    def index():

```

`route()`装饰器`@app.route()`将 URL 绑定到函数。

如果需要路由`/hello`，可以将其绑定到`hello_world()`函数，如下所示：

```py
@app.route('/hello')
def hello_world():
   return "hello world"

```

函数`hello_world()`的输出显示在浏览器中。

### Flask 路径参数

创建路由时可以使用参数。 参数可以是这样的字符串（文本）：`/product/cookie`。

这将具有以下路由和函数：

```py
@app.route('/product/<name>')
def get_product(name):
  return "The product is " + str(name)

```

因此，您可以将参数传递给 Flask 路由，可以传递数字吗？

此处的示例创建路由`/sale/<transaction_id>`，其中`transaction_id`是数字。

```py
@app.route('/sale/<transaction_id>')
def get_sale(transaction_id=0):
  return "The transaction is "+str(transaction_id)

```

### Flask 多参数路由

如果您希望 Flask 路由具有多个参数，则可以这样做。 对于路由`/create/<first_name>/<last_name>`，您可以执行以下操作：

```py
@app.route('/create/<first_name>/<last_name>')
def create(first_name=None, last_name=None):
  return 'Hello ' + first_name + ',' + last_name

```

### Flask POST 路由

Flask 支持 HTTP POST 请求。 如果您对此不熟悉，我建议您学习此课程：[使用 Flask](https://gum.co/IMzBy) 创建应用。

创建一个名为`login.html`的模板

```py
<html>
   <body>
      <form action = "http://localhost:5000/login" method = "post">
         <p>Username:</p>
         <p><input type = "text" name = "name" /></p>
         <p><input type = "submit" value = "submit" /></p>
      </form>
   </body>
</html>

```

下面的代码支持两种类型的 HTTP 请求。

```py
from flask import Flask
from flask import render_template
from flask import request

from flask import Flask, redirect, url_for, request
app = Flask(__name__)

@app.route('/dashboard/<name>')
def dashboard(name):
   return 'welcome %s' % name

@app.route('/login',methods = ['POST', 'GET'])
def login():
   if request.method == 'POST':
      user = request.form['name']
      return redirect(url_for('dashboard',name = user))
   else:
      user = request.args.get('name')
      return render_template('login.html')

if __name__ == '__main__':
   app.run(debug = True)

```

如果收到这样的错误，则路由错误：

```py
werkzeug.routing.BuildError
werkzeug.routing.BuildError: Could not build url for endpoint 'dashboard'. Did you forget to specify values ['name']? 
```

[**下载示例**](https://gum.co/IMzBy)