Для чего нужен фреймворк bottle
Bottle - это веб-микрофреймворк, совместимый с WSGI, который зависит только от стандартной библиотеки Python и совместим с Python версий 2.6, 2.7, 3.2, 3.3 и 3.4. Весь исходный текст фреймворка умещается в одном файле. Он был создан Марселем Хеллкэмпом (Marcel Hellkamp - @defnull) и поддерживается сообществом, образовавшимся вокруг этого фреймворка.
Django - это прагматичный фреймворк для быстрой веб-разработки, который написан на Python, использует стандарт MTV (model-template-view - модель-шаблон-представление). Изначально он был создан как система для управления сайтом журнала в городе Лоуренс, в Канзасе. Стал проектом с открытым исходным кодом, был опубликован под лицензией BSD в 2005 году. Название Django фреймворк получил в честь джазового музыканта Джанго Рейнхардта. Django стал очень известен благодаря поставке с "батарейкам", то есть благодаря нескольким библиотекам, добавленным к основному коду фреймворка для упрощения разработки. Вместе с фреймворком эти библиотеки сформировали так называемый "полный стек".
Прагматичный - значит ориентированный на решение практических, реальных задач с чётко определённой целью. Другими словами, команда разработчиков Django приняла некоторые архитектурные решения, а пользователи Django следуют этой архитектуре, не имея возможности легко её поменять.
Хорошо ли, если вместе с веб-фреймворком поставляются "батарейки"? Если вы согласны использовать всё, что даёт вам фреймворк, то ответ - да. Однако, не все веб-проекты одинаковы.
В большинстве проектов используется не более 80% возможностей Django. В тех случаях, когда используется не более 50% возможностей, мы вынуждены платить за все, что было предусмотрено архитектурой Django. То есть теряем в производительности, потому что в Django имеется множество модулей, которые не используются, но по-прежнему продолжают работать. Когда же мы используем микрофреймворк, мы берём на себя роль архитектора приложения. Поскольку у нас нет предопределённой архитектуры, нам нужно время, чтобы определить архитектуру приложения.
- ORM - SQLAlchemy в bottle-sqlalchemy
- Формы - WTForms
- Шаблонизатор - Jinja2, mako и т.п.
- Миграции - Alembic
SQLAlchemy
SQLAlchemy существовал до Django (да, до Django) и начиная с 2005 года появилась команда, которая стала заниматься разработкой ORM. Команда же разработчиков Django занимается одновременно и разработкой фреймворка и разработкой ORM. Я думаю, что не стоит говорить о том, что результат работы специалистов обычно бывает лучше, чем результат работы универсалов.
WTForms
Обходное решение для тех, кто не использует Django и кому нужно работать с формами - это WTForms, которые были созданы в 2008 году и поддержка которых продолжается до сих пор!
Шаблонизатор
Jinja2 - это современный удобный для дизайнеров язык шаблонизации для Python, который был создан по образцу шаблонов Django. Он быстрый, широко используется и может быть дополнительно защищён изоляцией рабочего окружения.
Миграция
Использование Alembic начинается с создания среды миграции. Это каталог сценариев, которые относятся к отдельному приложению. Среда миграции создаётся единожды, а затем поддерживается совместно с исходным кодом самого приложения.
Структура миграции:
Как создать обновление и откат:
Структура модификации таблицы:
Заключение
Здесь было продемонстрировано всё, что можно найти в стеке Django. Я писал эту заметку для не для того, чтобы принизить Django. Я лишь показал, что существуют другие полностековые решения для разработки приложений. Многие люди используют Django, не понимая экосистемы Python. В наше время Django предоставляет множество готовых решений, что заставляет некоторых разработчиков лениться и не наращивать мастерство в проектировании архитектуры приложения.
Помогайте Bottle. Мы - растущее сообщество. Чтобы внести свой вклад в код Bottle, обратитесь к списку открытых задач. В случае сомнений можно обратиться в список рассылки или в IRC-канал.
Считаю, что в статье тема не раскрыта. Не понятно, какая такая особенная архитектура приложения имелась в виду,
которая никак не сочетается с Django. Перечислено несколько средств, которые в чём-то заменяют средства, имеющиеся в Django. Без сомнений, SQLAlchemy заткнёт за пояс джанговский ORM. Безусловно, Jinja2 - очень быстрый шаблонизатор, быстрее джанговского. Но стоит иметь в виду, что в Django все эти средства глубоко интегрированы друг с другом.
Наконец, в комплекте с Django имеется административный интерфейс, для которого можно определять собственные классы для редактирования таблиц. В большинстве случаев этот административный интерфейс позволяет сэкономить время на создании шаблонов и написании представлений для просмотра и редактирования таблиц. Да, его возможности ограничены, но ведь в комплекте с Bottle ничего подобного нет, а если и есть в сторонних модулях, то наверняка такие модули тоже окажутся недостаточно интегрированными с ORM или модулем форм - придётся писать дополнительный код, который предоставит необходимую информацию этому модулю.
Я сам в своих проектах использую Django, но для некоторых задач он действительно избыточен. Например, в одной из прошлых своих заметок я писал Тайловый сервер на основе Python, Mapnik и Bottle. Денис Рыков, материалами которого я воспользовался, тоже писал тайловый сервер, воспользовавшись фреймворком Bottle. Для себя я решил, что если приложение не работает с собственной базой данных, а берёт информацию из сторонних источников и занимается лишь её преобразованием, или выполняет какие-то действия по требованию, то лучше использовать Bottle, т.к. в нём нет избыточных возможностей, а сам он обладает минимумом зависимостей и работает с любой версией Python.
Bottle — очень легкий фреймворк и помещается всего в один файл — bottle.py. Установить его можно отсюда, либо сделать pip install bottle.
Возможности
Несмотря на свою минималистичность, Bottle предоставляет довольно широкие возможности, которых на 100% хватает для мелких и средних проектов. Вот список основных возможностей:
Routing
Роутинг в bottle, как и в большинстве фреймворков на питоне, осуществляется с помощью декораторов. Например:
Также динамические url можно составлять на основе регулярных выражений:
Templates
Одна из сильнейших сторон фреймворка — механизм шаблонов. Чтобы воспользоваться шаблонизатором, достаточно написать такую легкую конструкцию:
Первый аргумент функции — название файла, в котором содержится текст шаблона (в нашем случае шаблон будет называться template_name.tpl).
В самом же файле нам нужно написать название переменной в двух фигурных скобках:
По-умолчанию сделано так, что если в скобках указан html код, то он не выполнится, во избежание XSS атак. Если же нам это очень надо, можно написать >. Также Bottle предоставляет нам очень очень крутую возможность: писать любой python код внутри шаблона. Чтобы вызвать питон, достаточно в начале строки поставить %. Например:
Также можно инклюдить шаблоны из шаблонов, что позволяет нам красиво и опрятно содержать шаблоны.
POST-routing и обработка форм
Какой же нормальный фреймворк может существовать без возможности обработки POST запросов с последующей обработкой форм?
Механизм для обработки POST запросов абсолютно такой же, как и для обработки GET запросов, просто слово route нужно заменить на post:
Для доступа к формам используются атрибуты полей «name». Например:
Чтобы получить содержимое формы, нужно использовать следующую конструкцию:
Также можно обращаться и с файлами:
Cookies
Обращаться с Cookies в bottle очень просто, чтобы установить cookie:
Чтобы взять значение:
Сервер
-
Создать файл adapter.wsgi с вот таким содержимым
Частые ошибки и их решения
-
Если ваш сайт работает через apache, то нужно быть очень аккуратным в работе с путями, нужно всегда использовать полные пути. Мой вам совет: где-нибудь в начале кода правильно определите рабочий каталог, а дальше просто везде его используйте. Например, вот так:
Bottle — очень легкий фреймворк и помещается всего в один файл — bottle.py. Установить его можно отсюда, либо сделать pip install bottle.
Возможности
Несмотря на свою минималистичность, Bottle предоставляет довольно широкие возможности, которых на 100% хватает для мелких и средних проектов. Вот список основных возможностей:
Routing
Роутинг в bottle, как и в большинстве фреймворков на питоне, осуществляется с помощью декораторов. Например:
Также динамические url можно составлять на основе регулярных выражений:
Templates
Одна из сильнейших сторон фреймворка — механизм шаблонов. Чтобы воспользоваться шаблонизатором, достаточно написать такую легкую конструкцию:
Первый аргумент функции — название файла, в котором содержится текст шаблона (в нашем случае шаблон будет называться template_name.tpl).
В самом же файле нам нужно написать название переменной в двух фигурных скобках:
По-умолчанию сделано так, что если в скобках указан html код, то он не выполнится, во избежание XSS атак. Если же нам это очень надо, можно написать >. Также Bottle предоставляет нам очень очень крутую возможность: писать любой python код внутри шаблона. Чтобы вызвать питон, достаточно в начале строки поставить %. Например:
Также можно инклюдить шаблоны из шаблонов, что позволяет нам красиво и опрятно содержать шаблоны.
POST-routing и обработка форм
Какой же нормальный фреймворк может существовать без возможности обработки POST запросов с последующей обработкой форм?
Механизм для обработки POST запросов абсолютно такой же, как и для обработки GET запросов, просто слово route нужно заменить на post:
Для доступа к формам используются атрибуты полей «name». Например:
Чтобы получить содержимое формы, нужно использовать следующую конструкцию:
Также можно обращаться и с файлами:
Cookies
Обращаться с Cookies в bottle очень просто, чтобы установить cookie:
Чтобы взять значение:
Сервер
-
Создать файл adapter.wsgi с вот таким содержимым
Частые ошибки и их решения
-
Если ваш сайт работает через apache, то нужно быть очень аккуратным в работе с путями, нужно всегда использовать полные пути. Мой вам совет: где-нибудь в начале кода правильно определите рабочий каталог, а дальше просто везде его используйте. Например, вот так:
Установка
Функционал
Хоть Bottle и столь минималистичен, у него много возможностей, которых вполне достаточно для проектов малого и среднего уровня. Вот основные его возможности:
Routing
В этом фреймворке, как и в многих на этом языке, реализуется через декораторы. К примеру:
Составление динамических url возможно и через регулярные выражения:
Templates
Одно из весомых преимуществ фреймворка – механизм шаблонов. Для использования шаблонизатора нужно написать простейшую конструкцию:
В функции первый аргумента – это наименование файла, который содержит текст шаблона (мы назвали его template_name.tpl). В самом файле нам необходимо указать наименование переменной с помощью двух фигурных скобок:
Стандартно настроено так, что при использовании в скобках html кода, выполняться он не будет, дабы избежать XSS атак. В случае сильной потребности в этом, можете писать так >. Кроме того, у Bottle есть очень крутая возможность: внутри шаблона можно написать любой python код. Для вызова питона строчка должна начинаться с %. К примеру:
Допускается включение шаблонов из шаблонов, благодаря чему мы можем содержать шаблоны в приятном виде.
Обработка форм и POST-routing
Хороший питон должен обязательно уметь работать с POST запросами и далее обрабатывать формы. POST запросы обрабатываются таким же образом, как и GET запросы, достаточно только вместо route использовать post:
Чтобы получить доступ к формам применяются атрибуты полей «name». К примеру:
Для получения содержимого формы, следует применить такую конструкцию:
Можем также работать с файлами:
Cookies
Чтобы взять значение:
Сервер
Конечно-же крупному проекту это не подойдет, поэтому нужно как-то связывать наш фреймфорк с nginx или apache. Разберем apache, но и с nginx все делается легко. Для связки Bootle с Apache используется mod_wsgi. Чтобы это сделать, делаем так:
- Создаем файл adapter.wsgi, в котором пишем:
- Устанавливаем и включаем mod_wsgi.
- Добавляем параметры виртуального хоста.
Распространенные ошибки, методы их решения
- При использовании apache для вашего сайт, будьте аккуратными со всеми путями, они всегда должны быть полными. Рекомендуется вначале кода правильно определить рабочий каталог и дальше уже везде им пользоваться. К примеру, так:
- Если шаблон берется из определенной папки (к примеру, views), обязательно должен добавляться полный путь к ней в перечень bottle.TEMPLATE_PATH.
Если вам нужна качественная стоматологическая клиника, обращайтесь в «Премьер Клиник». Хорошая стоматология метро ленинский проспект, в которой работают исключительно опытные врачи, и используется современное оборудование. Преимущества клиники – демократичные цены, высокое качество услуг и гарантия качества.
Читайте также: