Python - 路由

  • 简述

    路由是将 URL 直接映射到创建网页的代码的机制。它有助于更​​好地管理网页的结构并显着提高网站的性能,进一步的增强或修改变得非常简单。在 python 中,路由是在大多数 web 框架作品中实现的。我们将看到来自flask本章中的 web 框架。
    route()Flask 中的装饰器用于将 URL 绑定到函数。结果,当在浏览器中提及 URL 时,将执行该函数以给出结果。在这里,网址'/hello'规则绑定到hello_world()功能。因此,如果用户访问http://localhost:5000/URL,输出hello_world()函数将在浏览器中呈现。
    
    from flask import Flask
    app = Flask(__name__)
    @app.route('/')
    def hello_world():
       return 'Hello Tutorialspoint'
    if __name__ == '__main__':
       app.run()
    
    当我们运行上述程序时,我们得到以下输出 -
    
     * Serving Flask app "flask_route" (lazy loading)
     * Environment: production
       WARNING: Do not use the development server in a production environment.
       Use a production WSGI server instead.
     * Debug mode: off
     * Running on http://127.0.0.1:5000/ (Press CTRL+C to quit)
    127.0.0.1 - - [06/Aug/2018 08:48:45] "GET / HTTP/1.1" 200 -
    127.0.0.1 - - [06/Aug/2018 08:48:46] "GET /favicon.ico HTTP/1.1" 404 -
    127.0.0.1 - - [06/Aug/2018 08:48:46] "GET /favicon.ico HTTP/1.1" 404 -
    
    我们打开浏览器并指向 URLhttp://localhost:5000/查看正在执行的函数的结果。
    我们可以使用路由传递 URL 变量来动态构建 URL。为此,我们使用 url_for() 函数,该函数接受函数名称作为第一个参数,其余参数作为 URL 规则的变量部分。
    在下面的示例中,我们将函数名称作为参数传递给 url_for 函数,并在执行这些行时打印出结果。
    
    from flask import Flask, url_for
    app = Flask(__name__)
    @app.route('/')
    def index(): pass
    @app.route('/login')
    def login(): pass
    @app.route('/user/')
    def profile(username): pass
    with app.test_request_context():
        print url_for('index')
        print url_for('index', _external=True)
        print url_for('login')
        print url_for('login', next='/')
        print url_for('profile', username='JC2182')
    
    当我们运行上述程序时,我们得到以下输出 -
    
    /
    http://localhost/
    /login
    /login?next=%2F
    /user/Tutorials%20Point
    
    我们可以使用重定向功能通过路由将用户重定向到另一个 URL。我们提到新 URL 作为函数的返回值,应该重定向用户。当我们在修改现有网页时临时将用户转移到不同的页面时,这很有帮助。
    
    from flask import Flask, abort, redirect, url_for
    app = Flask(__name__)
    @app.route('/')
    def index():
        return redirect(url_for('login'))
    @app.route('/login')
    def login():
        abort(401)
    #    this_is_never_executed()
    
    执行上述代码时,基本 URL 会转到使用 abort 功能的登录页面,因此永远不会执行登录页面的代码。