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