Учебники

Python — Маршрутизация

Маршрутизация — это механизм сопоставления 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 /, чтобы увидеть результат выполнения функции.

routing_1.png

Использование 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 переходит на страницу входа в систему, которая использует функцию прерывания, так что код для страницы входа никогда не выполняется.