Часто задаваемые вопросы
О Bottle
Подходит ли Bottle для сложных приложений?
Bottle — это микрофреймворк, разработанный для прототипирования и создания небольших веб-приложений и сервисов. Он не вмешивается в вашу работу и позволяет быстро достигать результатов, но отсутствуют некоторые расширенные функции и готовые решения, которые есть в других фреймворках (MVC, ORM, валидация форм, scaffolding, XML-RPC). Хотя добавление этих функций и создание сложных приложений с Bottle возможно, следует рассмотреть использование полнофункционального веб-фреймворка, такого как pylons или paste.
Общие проблемы и ловушки
“Шаблон не найден” в mod_wsgi/mod_python
Bottle ищет шаблоны в ./ и ./views/. В среде mod_python или mod_wsgi рабочая директория (./) зависит от настроек Apache. Вам следует добавить абсолютный путь к пути поиска шаблонов:
bottle.TEMPLATE_PATH.insert(0,'/absolut/path/to/templates/')
чтобы bottle искал шаблоны по правильным путям.
Динамические маршруты и слеши
В синтаксисе динамических маршрутов маркер подстановки (:name) соответствует всему до следующего слеша. Это эквивалентно [^/]+ в синтаксисе регулярных выражений. Чтобы также принять слеши, необходимо добавить пользовательский регулярный шаблон к маркерам подстановки. Например: /images/:filepath#.*# будет соответствовать /images/icons/error.png, но /images/:filename не будет.
Проблемы с обратными прокси
Перенаправления и построение URL работают только в том случае, если bottle знает общедоступный адрес и расположение вашего приложения. Если вы запускаете bottle локально через обратный прокси или балансировщик нагрузки, некоторая информация может потеряться по пути. Например, значение wsgi.url_scheme или заголовок Host могут отражать локальный запрос вашего прокси, а не реальный запрос клиента. Вот небольшой фрагмент WSGI-средства обработки, который поможет исправить эти значения:
def fix_environ_middleware(app):
def fixed_app(environ, start_response):
environ['wsgi.url_scheme'] = 'https'
environ['HTTP_X_FORWARDED_HOST'] = 'example.com'
return app(environ, start_response)
return https_app
app = bottle.default_app()
app.wsgi = fix_environ_middleware(app.wsgi)
© 2009–2017 Marcel Hellkamp
Licensed under the MIT License.
https://bottlepy.org/docs/0.12/faq.html