Часто задаваемые вопросы
О 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.11/faq.html