Bottle использует декоратор route, чтобы связать URL со следующей функцией; в этом примере / (домашняя страница) обрабатывается функцией home(). Запустите этот сценарий сервера с помощью следующей команды:

$ python bottle1.py

Когда вы обратитесь по адресу http://localhost:9999, вы должны увидеть следующее:

It isn't fancy, but it's my home page

Функция run() запускает встроенный тестовый веб-сервер Bottle. Вам не нужно использовать его в программах, написанных с помощью Bottle, но это может оказаться полезным на первых этапах разработки и тестирования.

Теперь вместо создания текста домашней страницы в коде создадим отдельный HTML-файл, который называется index.html и содержит такую строку:

My new and improved home page!!!

Укажите Bottle возвращать содержимое этого файла, когда запрашивается домашняя страница. Сохраните этот сценарий как bottle2.py:

from bottle import route, run, static_file

@route('/')

def main():

····return static_file('index.html', root='.')

run(host='localhost', port=9999)

В вызове static_file() мы хотим получить файл index.html из каталога, указанного в root (в нашем случае в '.', текущем каталоге). Если код предыдущего примера все еще выполняется, то остановите его. Теперь запустите новый сервер:

$ python bottle2.py

Каждый раз, когда вы обращаетесь к странице http:/localhost:9999/, вы должны видеть следующее:

My new and improved home page!!!

Добавим последний пример, который демонстрирует, как передавать аргументы в URL и использовать их. Конечно же, этот файл будет называться bottle3.py:

from bottle import route, run, static_file

@route('/')

def home():

····return static_file('index.html', root='.')

@route('/echo/')

def echo(thing):

····return "Say hello to my little friend: %s!" % thing

run(host='localhost', port=9999)

У нас появилась новая функция echo(), в которую мы хотим передавать строковый аргумент через URL. За это отвечает строка @route('/echo/') в предыдущем примере. Конструкция в маршруте означает, что все, что находится в URL после /echo/, присваивается строковому аргументу thing, который передается функции echo. Чтобы увидеть, что случится, остановите старый сервер, если он все еще работает, и запустите его с новым кодом:

$ python bottle3.py

Далее перейдите в браузере по ссылке http://localhost:9999/echo/Mothra. Вы должны увидеть следующее:

Say hello to my little friend: Mothra!

Оставьте bottle3.py работать еще на пару минут, чтобы мы могли попробовать что-нибудь еще. Вы проверяли, что эти примеры работают, вводя URL в браузер и глядя на отображаемые страницы. Вы также можете использовать клиентские библиотеки вроде requests, чтобы они выполняли работу за вас. Сохраните этот код как bottle_test.py:

import requests

resp = requests.get('http://localhost:9999/echo/Mothra')

if resp.status_code == 200 and \

··resp.text == 'Say hello to my little friend: Mothra!':

····print('It worked! That almost never happens!')

else:

····print('Argh, got this:', resp.text)

Отлично! Теперь запустите этот код:

$ python bottle_test.py

В терминале вы должны увидеть следующее:

It worked! That almost never happens!

Перед вами небольшой пример юнит-теста. В главе 12 вы можете получить более подробную информацию о том, почему тесты — это хорошо и как написать их с помощью Python.

У фреймворка Bottle больше возможностей, чем я вам показал. В частности, когда вызываете функцию run(), можете попробовать добавить следующие аргументы:

• debug=True — создает страницу отладки, если вы получаете ошибку HTTP;

• reloader=True — перезагружает страницу в браузере, если вы измените хотя бы небольшой кусочек кода.

Все это хорошо задокументировано на сайте разработчика http://bottlepy.org/docs/dev/.

<p>Flask</p>
Перейти на страницу:

Все книги серии Бестселлеры O'Reilly

Похожие книги