Python - маршрутизация
Маршрутизация - это механизм сопоставления URL-адреса непосредственно с кодом, создающим веб-страницу. Это помогает лучше управлять структурой веб-страницы и значительно увеличивает производительность сайта, а дальнейшие улучшения или модификации становятся действительно простыми. В Python маршрутизация реализована в большинстве веб-фреймов. Мы увидим примеры изflask веб-фреймворк в этой главе.
Маршрутизация в Flask
В 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-адрес переходит на страницу входа в систему, которая использует функцию прерывания, поэтому код страницы входа никогда не выполняется.