Терминология: монтирование против прививки
В принципе, это правильный способ подачи колбы в приложение cherrypy, просто краткое примечание о вашем названии:
Здесь стоит отметить, что tree.mount
сам по себе не является ключом конфигурации - tree
приведет к вызову cherrypy._cpconfig._tree_config_handler(k, v)
с аргументами 'mount', {'/': my_flask_server.app}
.
Параметр ключа _tree_config_handler
вообще не используется, поэтому в вашемconfig "mount" - это просто произвольная метка для этого конкретного указания путей.Он также не «монтирует» приложение (в конце концов, это не приложение CherryPy).Под этим я подразумеваю, что это cherrypy.tree.mount(…)
это не cherrypy.tree.graft
произвольный обработчик WSGI для вашего пространства имен «имя-скрипта» (пути, но в терминологии CherryPy).
Сообщение журнала Cherrypy несколько вводит в заблуждениеговорит "Установленon / "]
Это несколько важный момент, поскольку с помощью graft, в отличие от mount, вы не можете указать дополнительные параметры, такие как статическая файловая служба для вашего приложения или потоковые ответы по этому пути.
ИтакЯ бы порекомендовал изменить конфигурационный ключ tree.mount
на что-то описательное, которое не вызывает чтения слишком большой семантики о том, что происходит внутри CherryPy (поскольку - это метод cherrypy.tree.mount
) из-за этой конфигурации. Например, tree.flask_app_name
если вы просто отображаете одно приложение в этом dict (может быть много директив tree
, все они просто объединяются в пространство имен путей) или tree.wsgi_delegates
, если вы отображаете много приложений в этом dict.
Использование CherryPy для предоставления дополнительного контента без создания приложения для него
Еще одно замечание: если вы хотите, чтобы cherrypy, например, предоставляла статическую файловую службу для вашего приложения, вам не нужно создавать шаблонный cherrypyприложение для хранения этой конфигурации. Вам просто нужно смонтировать None
с соответствующей дополнительной конфигурацией. Следующие файлы будутнеобходимо, чтобы CherryPy обслуживал статический контент из подкаталога «static», если он помещен в каталог, в котором вы запускаете cherryd для обслуживания статического контента (вызовите cherryd как cherryd -c cherrypy.conf -i my_flask_server -i static
:
static.py
import cherrypy
# next line could also have config as an inline dict, but
# file config is often easier to handle
cherrypy.tree.mount(None, '/static-path', 'static.conf')
static.conf
# static.conf
[/]
tools.staticdir.on = True
tools.staticdir.root = os.getcwd()
tools.staticdir.dir = 'static'
tools.staticdir.index = 'index.html'