Легкий python веб-фреймворк – Bottle
Веб-программирование bottle python, python framework, фреймворк python
Установка
Bottle – легкий фреймворк, который умещается в одном файлике – bottle.py. Вы сможете установить его отсюда https://pypi.python.org/pypi/bottle, либо через команду pip install bottle.
Функционал
Хоть Bottle и столь минималистичен, у него много возможностей, которых вполне достаточно для проектов малого и среднего уровня. Вот основные его возможности:
Routing
В этом фреймворке, как и в многих на этом языке, реализуется через декораторы. К примеру:
@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)
Конечно-же крупному проекту это не подойдет, поэтому нужно как-то связывать наш фреймфорк с nginx или apache. Разберем apache, но и с nginx все делается легко. Для связки Bootle с Apache используется mod_wsgi. Чтобы это сделать, делаем так:
- Создаем файл adapter.wsgi, в котором пишем:
- Устанавливаем и включаем mod_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()
DocumentRoot /var/www/foo
Options FollowSymLinks ExecCGI
AddHandler wsgi-script .wsgi
Order allow,deny
AllowOverride All
Allow from all
Распространенные ошибки, методы их решения
- При использовании apache для вашего сайт, будьте аккуратными со всеми путями, они всегда должны быть полными. Рекомендуется вначале кода правильно определить рабочий каталог и дальше уже везде им пользоваться. К примеру, так:
sys.path.append(os.path.dirname(os.path.abspath(__file__)))
os.chdir(os.path.dirname(os.path.abspath(__file__)))
cwd = os.getcwd()
Если вам нужна качественная стоматологическая клиника, обращайтесь в «Премьер Клиник». Хорошая стоматология метро ленинский проспект, в которой работают исключительно опытные врачи, и используется современное оборудование. Преимущества клиники – демократичные цены, высокое качество услуг и гарантия качества.