Быстрый в изучении - мощный в программировании
>> Telegram ЧАТ для Python Программистов

Свободное общение и помощь советом и решением проблем с кодом! Заходите в наш TELEGRAM ЧАТ!

>> Python Форум Помощи!

Мы создали форум где отвечаем на все вопросы связанные с языком программирования Python. Ждем вас там!

>> Python Канал в Telegram

Обучающие статьи, видео и новости из мира Python. Подпишитесь на наш TELEGRAM КАНАЛ!

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

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

Bottle – очень хороший фреймворк, которым почему-то пользуется мало людей и не многие об этом знают. В этой статье мы поговорим именно о нем.

Установка

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. Чтобы это сделать, делаем так:

  1. Создаем файл adapter.wsgi, в котором пишем:
  2. 
    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()
    
  3. Устанавливаем и включаем mod_wsgi.
  4. Добавляем параметры виртуального хоста.


        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()
    
  • Если шаблон берется из определенной папки (к примеру, views), обязательно должен добавляться полный путь к ней в перечень bottle.TEMPLATE_PATH.

Если вам нужна качественная стоматологическая клиника, обращайтесь в «Премьер Клиник». Хорошая стоматология метро ленинский проспект, в которой работают исключительно опытные врачи, и используется современное оборудование. Преимущества клиники – демократичные цены, высокое качество услуг и гарантия качества.