При создании приложения жестко запрограммировать каждый URL-адрес довольно сложно. Лучший способ решить эту проблему — создать динамические URL-адреса. Давайте сначала вкратце разберемся в значении нескольких общих терминов.
- Динамическая маршрутизация: это процесс получения динамических данных (имен переменных) в URL-адресе и их последующего использования.
- Правила для переменных: разделы переменных могут быть добавлены к URL-адресу, помечая разделы с помощью .
Давайте сначала создадим базовое приложение фляги:
#importing the flask Module
from
flask
import
Flask
# Flask constructor takes the name of
# current module (__name__) as argument
app
=
Flask(__name__)
@app
.route(
'/'
)
# ‘/’ URL is bound with hello_world() function.
def
home():
return
'You are at home page.'
@app
.route(
'/allow'
)
def
allow():
return
'You have been allowed to enter.'
@app
.route(
'/disallow'
)
def
disallow():
return
'You have not been allowed to enter.'
# main driver function
if
__name__
=
=
'__main__'
:
# run() method of Flask class runs the application
# on the local development server.
app.run()
Выход:
Теперь рассмотрим ситуацию, когда у вас много пользователей, и вы хотите направить пользователя на определенную страницу с его или ее именем или идентификатором в URL-адресе, а также в шаблоне. Если вы попытаетесь сделать это вручную, вам придется вручную вводить полный URL-адрес для каждого пользователя. Это может быть очень утомительно и почти невозможно. Однако это можно решить, используя флягу с так называемой динамической маршрутизацией.
Динамическая маршрутизация
Теперь мы рассмотрим лучший подход с использованием правил для переменных. Мы добавим <имя переменной> к каждому маршруту. При желании мы также можем определить преобразователь с именем каждой переменной <преобразователь: имя переменной>. По умолчанию конвертер — String.
Пример:
@app.route('allow/<variable name>') OR @app.route('allow/<converter: variable name>')
Некоторые преобразователи:
String | (default) accepts any text without a slash |
---|---|
int | accepts positive integers |
float | accepts positive floating point values |
path | like string but also accepts slashes |
uuid | accepts UUID strings |
Разрешим пользователю с идентификатором менее 25 посещать страницу. Ниже приведен модифицированный код с динамической привязкой URL. Функция использует в качестве аргумента <имя переменной>, переданное в декораторе route ().
@app.route('/allow/<int:Number>') def allow(Number): if Number < 25: return f'You have been allowed to enter beause\ your number is {str(Number)}' else: return f'You are not allowed'
#importing the flask Module
from
flask
import
Flask
# Flask constructor takes the name of
# current module (__name__) as argument
app
=
Flask(__name__)
@app
.route(
'/'
)
# ‘/’ URL is bound with hello_world() function.
def
home():
return
'You are at home page.'
# Use of <conerter: variable name> in the
# route() decorator.
@app
.route(
'/allow/<int:Number>'
)
def
allow(Number):
if
Number <
25
:
return
f
'You have been allowed to enter beause your number is {str(Number)}'
else
:
return
f
'You are not allowed'
# main driver function
if
__name__
=
=
'__main__'
:
# run() method of Flask class runs the application
# on the local development server.
app.run()
Выход: