Легкий python веб-фреймворк: Bottle

Введение Недавно я осознал, что на Хабре нет ни одной статьи, посвящённой прекрасному фреймворку Bottle, которым, кстати говоря, пользуется не мало людей, поэтому в этой статье я попытаюсь рассказать вам о нем.Установка Bottle — очень легкий фреймворк и помещается всего в один файл — bottle.py. Установить его можно отсюда, либо сделать pip install bottle.Возможности Несмотря на свою минималистичность, Bottle предоставляет довольно широкие возможности, которых на 100% хватает для мелких и средних проектов. Вот список основных возможностей: Routing Роутинг в bottle, как и в большинстве фреймворков на питоне, осуществляется с помощью декораторов. Например: @route ('/hello/') def index (name): return name Также динамические url можно составлять на основе регулярных выражений: @route ('/news/') def show_news (number): pass Templates Одна из сильнейших сторон фреймворка — механизм шаблонов. Чтобы воспользоваться шаблонизатором, достаточно написать такую легкую конструкцию: template ('template_name', name=name, number=number, foo=bar) Первый аргумент функции — название файла, в котором содержится текст шаблона (в нашем случае шаблон будет называться template_name.tpl).В самом же файле нам нужно написать название переменной в двух фигурных скобках: Hello, {{name}}, glad to see you! По-умолчанию сделано так, что если в скобках указан html код, то он не выполнится, во избежание XSS атак. Если же нам это очень надо, можно написать {{! name}}. Также Bottle предоставляет нам очень очень крутую возможность: писать любой python код внутри шаблона. Чтобы вызвать питон, достаточно в начале строки поставить %. Например: %a = 100500 %for i in xrange (a):

%end Также можно инклюдить шаблоны из шаблонов, что позволяет нам красиво и опрятно содержать шаблоны. %include template_num2 foo=bar, blabla=qweqwe POST-routing и обработка форм Какой же нормальный фреймворк может существовать без возможности обработки POST запросов с последующей обработкой форм? Механизм для обработки POST запросов абсолютно такой же, как и для обработки GET запросов, просто слово route нужно заменить на post: @post (»/url») def foo (): pass Для доступа к формам используются атрибуты полей «name». Например: Чтобы получить содержимое формы, нужно использовать следующую конструкцию: request.forms.get («age») # Получить содержимое одного поля age request.forms.getall («age») # Получить содержимое всех полей age Также можно обращаться и с файлами: request.files.get («picture») # Получить один файл из поля picture request.files.getall («picture») # Получить все файлы из поля (mult-upload) Cookies Обращаться с Cookies в bottle очень просто, чтобы установить cookie: response.set_cookie («name», value, max_age=100500) Чтобы взять значение: request.get_cookie («name») Сервер В bottle вшит простой http сервер, который пригоден разве что для очень быстрого тестирования одной странички: run (host='localhost', port=8080) Естественно, что для более крупных проектов использовать его невозможно, поэтому надо как-то связать bottle с apache или nginx. Честно говоря, сам я всегда использую apache, поэтому рассказать могу только про него, но с ngninx все тоже вроде довольно просто. Bottle связывается с Apache через mod_wsgi. Для того, чтобы это реализовать, нужно сделать следующее: Создать файл adapter.wsgi с вот таким содержимым спойлер import sys, os, bottle sys.path.append (os.path.dirname (os.path.abspath (__file__))) os.chdir (os.path.dirname (os.path.abspath (__file__))) import index # Основной файл

application = bottle.default_app () Установить и включить mod_wsgi Добавить настройки виртуального хоста спойлер DocumentRoot /var/www/foo

Options FollowSymLinks ExecCGI AddHandler wsgi-script .wsgi Order allow, deny AllowOverride All Allow from all Частые ошибки и их решения Заключение Естественно, сложно в один пост уместить всю информацию о фреймворке, я написал лишь самое главное. Благо bottle обладает довольно хорошей документацией, так что заходите и читайте. Хороших всем выходных!

© Habrahabr.ru