Маршрутизация — это механизм сопоставления URL-адреса непосредственно с кодом, который создает веб-страницу. Это помогает лучше управлять структурой веб-страницы и значительно повышает производительность сайта, а дальнейшие улучшения или модификации становятся действительно простыми. В Python маршрутизация реализована в большинстве веб-фреймов. Мы увидим примеры из фреймворка фляги в этой главе.
Маршрутизация во фляге
Декоратор route () во Flask используется для привязки URL-адреса к функции. В результате, когда 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 -
Мы открываем браузер и указываем на URL http: // localhost: 5000 /, чтобы увидеть результат выполнения функции.
Использование URL-переменных
Мы можем передавать переменные URL, используя route для создания 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='Tutorials Point')
Когда мы запускаем вышеуказанную программу, мы получаем следующий вывод:
/ 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 переходит на страницу входа в систему, которая использует функцию прерывания, так что код для страницы входа никогда не выполняется.