原文: https://pythonbasics.org/Flask-Tutorial-Routes/

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

路由

Flask 路由示例

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

  1. @app.route('/')
  2. def index():

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

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

  1. @app.route('/hello')
  2. def hello_world():
  3. return "hello world"

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

Flask 路径参数

创建路由时可以使用参数。 参数可以是这样的字符串(文本):/product/cookie

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

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

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

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

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

Flask 多参数路由

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

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

Flask POST 路由

Flask 支持 HTTP POST 请求。 如果您对此不熟悉,我建议您学习此课程:使用 Flask 创建应用。

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

  1. <html>
  2. <body>
  3. <form action = "http://localhost:5000/login" method = "post">
  4. <p>Username:</p>
  5. <p><input type = "text" name = "name" /></p>
  6. <p><input type = "submit" value = "submit" /></p>
  7. </form>
  8. </body>
  9. </html>

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

  1. from flask import Flask
  2. from flask import render_template
  3. from flask import request
  4. from flask import Flask, redirect, url_for, request
  5. app = Flask(__name__)
  6. @app.route('/dashboard/<name>')
  7. def dashboard(name):
  8. return 'welcome %s' % name
  9. @app.route('/login',methods = ['POST', 'GET'])
  10. def login():
  11. if request.method == 'POST':
  12. user = request.form['name']
  13. return redirect(url_for('dashboard',name = user))
  14. else:
  15. user = request.args.get('name')
  16. return render_template('login.html')
  17. if __name__ == '__main__':
  18. app.run(debug = True)

如果收到这样的错误,则路由错误:

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

下载示例