Это скорее ответ Python, чем ответ Flask / werkzeug; но все просто и работает.
Если, как и я, вы хотите, чтобы настройки вашего приложения (загруженные из .ini
файла) также содержали префикс вашего приложения Flask (таким образом, чтобы значение не устанавливалось во время развертывания, а во время выполнения), вы можете выбрать следующее:
def prefix_route(route_function, prefix='', mask='{0}{1}'):
'''
Defines a new route function with a prefix.
The mask argument is a `format string` formatted with, in that order:
prefix, route
'''
def newroute(route, *args, **kwargs):
'''New function to prefix the route'''
return route_function(mask.format(prefix, route), *args, **kwargs)
return newroute
Возможно, это несколько хаком и опирается на тот факт , что функция маршрута колба требуетroute
в качестве первого позиционного аргумента.
Вы можете использовать это так:
app = Flask(__name__)
app.route = prefix_route(app.route, '/your_prefix')
NB: ничего не стоит, если можно использовать переменную в префиксе (например, задав ее значение /<prefix>
), а затем обрабатывать этот префикс в функциях, которые вы украшаете своим @app.route(...)
. Если вы это сделаете, вам, очевидно, придется объявить prefix
параметр в вашей украшенной функции (ах). Кроме того, вы можете проверить отправленный префикс на соответствие некоторым правилам и вернуть 404, если проверка не удалась. Чтобы избежать повторной реализации 404, пожалуйста, from werkzeug.exceptions import NotFound
а затем, raise NotFound()
если проверка не удалась.
flask.Flask#create_url_adapter
иwerkzeug.routing.Map#bind_to_environ
, похоже , он должен работать - как ты выполнение кода? (На самом деле приложение должно быть смонтировано на дополнительном пути в среде WSGI,url_for
чтобы возвращать ожидаемое значение.)