Bottle – микрофреймворк для API

онлайн тренер по питону
Онлайн-тренажер Python 3 для начинающих

Теория без воды. Задачи с автоматической проверкой. Подсказки на русском языке. Работает в любом современном браузере.

начать бесплатно

Введение в Bottle

Bottle — это лёгкий и простой микрофреймворк на Python для создания веб-приложений и REST API. Он написан в одном файле, не требует внешних зависимостей и идеально подходит для небольших проектов, прототипов, встроенных систем и микросервисов. Bottle обеспечивает всё необходимое для запуска веб-приложения: маршруты, шаблоны, обработку форм, сессии и работу с файлами.


Особенности и преимущества Bottle

  • Один файл, без внешних зависимостей

  • Простая и понятная архитектура

  • Встроенный шаблонизатор и HTTP-сервер

  • Поддержка JSON, файлов, форм, cookie

  • Совместимость с WSGI, возможность развёртывания на любом сервере

  • Подходит для REST API, микросервисов и скриптов


Установка и базовая настройка

Установка Bottle:

bash
pip install bottle

Создание файла app.py.


Создание первого Bottle-приложения

python
from bottle import route, run @route('/') def index(): return "Привет от Bottle" run(host='localhost', port=8080, debug=True)

Запуск:

bash
python app.py

Обработка маршрутов и параметров

python
@route('/hello/<name>') def greet(name): return f"Привет, {name}"

Поддержка типов:

python
@route('/user/<id:int>') def user(id): return f"ID: {id}"

Поддержка методов GET, POST, PUT, DELETE

python
from bottle import request, post, put, delete @post('/submit') def submit(): data = request.forms.get('data') return f"Получено: {data}" @put('/update/<id:int>') def update(id): return f"Обновление: {id}" @delete('/delete/<id:int>') def delete(id): return f"Удаление: {id}"

Работа с шаблонами и HTML-формами

Файл templates/hello.tpl:

html
<h1>Привет, {{name}}</h1>

В app.py:

python
from bottle import template @route('/hello/<name>') def hello(name): return template('hello', name=name)

Обработка форм и параметров запроса

python
@route('/form', method='POST') def form(): name = request.forms.get('name') age = request.forms.get('age') return f"Имя: {name}, Возраст: {age}"

Query-параметры:

python
@route('/search') def search(): query = request.query.q return f"Поиск: {query}"

Работа с JSON и REST API

python
from bottle import response @route('/api/data') def api_data(): response.content_type = 'application/json' return {'status': 'ok', 'message': 'API работает'}

Получение JSON:

python
@route('/api/submit', method='POST') def api_submit(): data = request.json return {'received': data}

Использование redirect, cookies и сессий

python
from bottle import redirect, response, request @route('/login') def login(): response.set_cookie("user", "admin") return "Вы вошли" @route('/dashboard') def dashboard(): user = request.get_cookie("user") if user: return f"Добро пожаловать, {user}" else: redirect('/login')

Обработка ошибок и исключений

python
from bottle import error @error(404) def error404(error): return "Страница не найдена" @error(500) def error500(error): return "Внутренняя ошибка сервера"

Интеграция с SQLite и другими БД

python
import sqlite3 from bottle import g def get_db(): if 'db' not in g: g.db = sqlite3.connect('database.db') return g.db

Пример запроса:

python
@route('/users') def users(): db = get_db() cur = db.cursor() cur.execute("SELECT name FROM users") return {'users': [row[0] for row in cur.fetchall()]}

Работа с файлами и загрузка данных

python
from bottle import request @route('/upload', method='POST') def upload(): upload = request.files.get('upload') upload.save('/tmp/') # сохраняем файл return "Файл загружен"

Организация структуры проекта

Примерная структура:

cpp
project/ ├── app.py ├── templates/ │ └── hello.tpl ├── static/ │ └── style.css └── database.db

Подключение статики:

python
from bottle import static_file @route('/static/<filename>') def server_static(filename): return static_file(filename, root='./static')

Развёртывание Bottle-приложений

С использованием WSGI-серверов:

bash
pip install gunicorn gunicorn app:app

Или через paste:

bash
pip install paste python app.py

Примеры практического применения

  • Быстрые прототипы и тестовые API

  • Веб-приложения с минимальными зависимостями

  • IoT-устройства и встраиваемые системы

  • Админки и сервисы мониторинга

  • REST API для мобильных приложений


Часто задаваемые вопросы

Что такое Bottle?

Минималистичный веб-фреймворк на Python для создания REST API и небольших приложений.

Можно ли использовать шаблоны?

Да, встроен шаблонизатор SimpleTemplate Engine.

Поддерживает ли Bottle JSON?

Да, можно обрабатывать и возвращать JSON-данные.

Подходит ли Bottle для продакшн?

Да, с использованием внешнего сервера (Gunicorn, uWSGI).

Можно ли подключить базу данных?

Да, Bottle поддерживает любые Python-библиотеки для работы с БД.

Полный справочник по ключевым функциям фреймворка Bottle для Python

Установка

bash
pip install bottle

Простой пример

python
from bottle import route, run @route('/') def home(): return "Привет, Bottle!" run(host='localhost', port=8080)

Основные функции и маршруты

Декоратор / Функция Назначение
@route('/path') Маршрутизация GET-запросов.
@get('/path'), @post('/path'), @put(), @delete() Обработка HTTP-методов.
run() Запуск встроенного сервера.
redirect(url) Перенаправление.
abort(code, msg) Прерывание с ошибкой.
static_file(filename, root) Отдача статических файлов.

Параметры маршрутов

python
@route('/hello/<name>') def greet(name): return f"Привет, {name}!"

Типизация параметров:

python
@route('/item/<id:int>') def item(id): return f"ID = {id}"

Доступ к данным запроса

python
from bottle import request @post('/form') def form_handler(): name = request.forms.get('name') return f"Привет, {name}"
Источник Получение
GET request.query.get('param')
POST (form) request.forms.get('key')
JSON request.json.get('key')
Заголовки request.headers.get('Header-Name')

Ответы

python
from bottle import response response.content_type = 'application/json' return {'status': 'ok'}

Установка кук:

python
response.set_cookie("user", "admin")

Получение кук:

python
user = request.get_cookie("user")

Работа с шаблонами

Bottle использует встроенный шаблонизатор SimpleTemplate Engine (stpl):

views/hello.tpl

html
<h1>Привет, {{name}}!</h1>

В коде:

python
from bottle import template @route('/hello/<name>') def greet(name): return template('hello', name=name)

Работа с файлами

python
@route('/download/<filename>') def download(filename): return static_file(filename, root='files', download=filename)

Запуск на продакшн-сервере

С gunicorn:

bash
gunicorn myapp:app

Или с WSGI-сервером, например waitress:

python
from waitress import serve from myapp import app serve(app, host="0.0.0.0", port=8080)

Bottle + JSON API

python
import json from