Python Flask: список нескольких маршрутов или конечных точек - PullRequest
0 голосов
/ 15 января 2020

Используя Python 3.8 и Flask, мне нужен приведенный ниже код на стороне сервера, чтобы:

1) передать список неизвестной длины конечных точек в app.route (),

2) убедитесь, что они указаны в качестве допустимых маршрутов, напечатав добавленные маршруты.

Следующий код не содержит ошибок, но, похоже, ничего не делает.

# server.py
from flask import Flask 

methods = ['GET','POST', 'PUT', 'DELETE', 'HEAD', 'OPTIONS', 'PATCH']
endpoints = ['users','countries', <etc>] # <etc> to indicate list of unknown length

app = Flask(__name__)
for endpoint in endpoints:
    #print(endpoint)
    app.route('/<str:endpoint>', methods=methods)

print(app.url_map) 

if __name__ == '__main__':
    app.run()

print(app.url_map) только возвращает: Map([<Rule '/static/<filename>' (GET, HEAD, OPTIONS) -> static>]) ... что, я думаю, означает, что ни одна из моих перечисленных конечных точек не была добавлена!

Используя следующие 3 запроса с приведенным выше кодом, будут действительными только конечные точки первых 2:

'http://127.0.0.1:5000/users',
'http://127.0.0.1:5000/countries',
'http://127.0.0.1:5000/xxx'

Код на стороне клиента отсутствует в списке, поскольку он не относится к вышеуказанному вопросу.

Ответы [ 2 ]

0 голосов
/ 15 января 2020

Используйте метод app_url_rule, если вы хотите динамически привязать конечные точки (т. Е. Не с помощью декоратора app.route)

Flask do c для app_url_rule :

@app.route('/') 
def index():
    pass

Эквивалентно следующему:

def index():
    pass 
app.add_url_rule('/', 'index', index)

Если view_fun c не предоставлен, вам нужно будет подключить конечную точку к функции представления, например, так:

app.view_functions['index'] = index
0 голосов
/ 15 января 2020

Функция app.route () является декоратором. Он используется для указания того, что метод должен быть вызван для получения запроса к определенному ресурсу (URI). Приведенный выше код генерирует только декоратор, но не использует его для привязки функции.

Вот пример того, как работает app.route ():

from flask import Flask

app = Flask(__name__)


@app.route('/')
def hello_world():
    return "Hello World"

В вашем код, нет функции для привязки маршрутов к.

Например, если вы хотите привязать все маршруты в вашем списке к hello world, вы можете использовать этот код:

from flask import Flask

app = Flask(__name__)


methods = ['GET', 'POST', 'PUT', 'DELETE', 'HEAD', 'OPTIONS', 'PATCH']
endpoints = ['users', 'countries']  # <etc> to indicate list of unknown length

for endpoint in endpoints:
    @app.route(endpoint, methods=methods)
    def hello_world():
        return "Hello World"

Однако я не уверен, зачем вам нужно привязывать одну и ту же функцию к неопределенному количеству ресурсов.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...