Главная
Блог разработчиков phpBB
 
+ 17 предустановленных модов
+ SEO-оптимизация форума
+ авторизация через соц. сети
+ защита от спама

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

Anna | 15.06.2014 | нет комментариев

Вступление

Незадолго я понял, что на Прогре нет ни одной статьи, посвящённой красивому фреймворку Bottle, которым, кстати говоря, пользуется не немного людей, следственно в этой статье я попытаюсь рассказать вам о нем.

Установка

Bottle — дюже легкий фреймворк и помещается каждого в один файл — bottle.py. Установить его дозволеноотсель, либо сделать pip install bottle.

Вероятности

Невзирая на свою минималистичность, Bottle предоставляет достаточно широкие вероятности, которых на 100% хватает для мелких и средних планов. Вот список основных вероятностей:

Routing

Роутинг в bottle, как и в большинстве фреймворков на питоне, осуществляется с поддержкой декораторов. Скажем:

@route('/hello/<name>')
def index(name):
    return name

Также динамические url дозволено составлять на основе регулярных выражений:

@route('/news/<number:re:[0-9]*>')
def show_news(number):
    pass
Templates

Одна из сильнейших сторон фреймворка — механизм образцов. Дабы воспользоваться шаблонизатором, довольно написать такую легкую конструкцию:

template('template_name', name=name, number=number, foo=bar)

1-й довод функции — наименование файла, в котором содержится текст образца (в нашем случае образец будет именоваться template_name.tpl).
В самом же файле нам необходимо написать наименование переменной в 2-х фигурных скобках:

Hello, {{name}}, glad to see you!

По-умолчанию сделано так, что если в скобках указан html код, то он не выполнится, во избежание XSS атак. Если же нам это дюже нужно, дозволено написать {{!name}}. Также Bottle предоставляет нам дюже дюже резкую вероятность: писать всякий python код внутри образца. Дабы вызвать питон, довольно в начале строки поставить %. Скажем:

%a = 100500
%for i in xrange(a):
    <div><img src="......{{i}}.jpg"></div>
%end 

Также дозволено инклюдить образцы из образцов, что разрешает нам прекрасно и опрятно содержать образцы.

%include template_num2 foo=bar, blabla=qweqwe
POST-routing и обработка форм

Какой же типичный фреймворк может существовать без вероятности обработки POST запросов с дальнейшей обработкой форм?
Механизм для обработки POST запросов безусловно такой же, как и для обработки GET запросов, легко слово route необходимо заменить на post:

@post("/url")
def foo():
    pass

Для доступа к формам применяются признаки полей «name». Скажем:

<input name="age" placeholder="Возраст">

Дабы получить содержимое формы, необходимо применять следующую конструкцию:

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. Для того, Дабы это реализовать, необходимо сделать следующее:

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

    <VirtualHost *:80>
            DocumentRoot /var/www/foo
    </VirtualHost>
    
    <Directory /var/www/foo>
            Options FollowSymLinks ExecCGI
            AddHandler wsgi-script .wsgi
            Order allow,deny
            AllowOverride All
            Allow from all
    </Directory>
    

Частые ошибки и их решения

  • Если ваш сайт работает через 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

Завершение

Безусловно, трудно в один пост уместить всю информацию о фреймворке, я написал лишь самое основное. Благо bottle владеет достаточно отличной документацией, так что заходите и читайте. Отличных каждому выходных!

Источник: programmingmaster.ru

Оставить комментарий
Форум phpBB, русская поддержка форума phpBB
Рейтинг@Mail.ru 2008 - 2017 © BB3x.ru - русская поддержка форума phpBB