Bottle: Guia Completo do Microframework Python
Introdução ao Bottle
Bottle é um microframework minimalista em Python para criar aplicações web e REST APIs. Todo o framework é escrito em um único arquivo com menos de 100 KB, tornando-o ideal para projetos pequenos, protótipos, sistemas embarcados e microsserviços. O Bottle fornece todos os componentes necessários para executar uma aplicação web completa sem dependências externas.
Características e Vantagens do Bottle
Leveza e Simplicidade
Bottle não requer dependências externas e pode ser instalado com um único comando. O framework ocupa apenas um arquivo, facilitando a implantação e a compreensão do código.
Funcionalidades Integradas
- Servidor HTTP integrado para desenvolvimento
- Template engine próprio SimpleTemplate Engine
- Suporte a WSGI para implantação em produção
- Detecção automática de tipos de parâmetros de rota
- Manipulação de JSON, formulários, arquivos e cookies
Flexibilidade de Arquitetura
Bottle é compatível com qualquer biblioteca Python para bancos de dados, template engines e servidores WSGI. Isso permite integrá-lo facilmente em sistemas existentes.
Instalação e Configuração Básica
Instalando o Bottle
pip install bottle
Criando a Primeira Aplicação
Crie o arquivo app.py:
from bottle import route, run
@route('/')
def index():
return "Olá do Bottle!"
@route('/hello/<name>')
def greet(name):
return f"Olá, {name}!"
if __name__ == "__main__":
run(host='localhost', port=8080, debug=True)
Executando a Aplicação
python app.py
A aplicação estará disponível em http://localhost:8080
Roteamento e Manipulação de Requisições
Rotas Básicas
from bottle import route, get, post, put, delete
@route('/')
def home():
return "Página inicial"
@get('/users')
def get_users():
return "Lista de usuários"
@post('/users')
def create_user():
return "Criando usuário"
@put('/users/<id:int>')
def update_user(id):
return f"Atualizando usuário {id}"
@delete('/users/<id:int>')
def delete_user(id):
return f"Deletando usuário {id}"
Parâmetros de Rota
Bottle suporta diferentes tipos de parâmetros:
@route('/user/<id:int>')
def user_by_id(id):
return f"Usuário ID: {id}"
@route('/article/<slug:path>')
def article_by_slug(slug):
return f"Artigo: {slug}"
@route('/price/<amount:float>')
def price(amount):
return f"Preço: {amount}"
@route('/profile/<username:re:[a-zA-Z0-9_]+>')
def profile(username):
return f"Perfil: {username}"
Manipulando Parâmetros de Query
from bottle import request
@route('/search')
def search():
query = request.query.get('q', '')
category = request.query.get('category', 'all')
return f"Buscando '{query}' na categoria '{category}'"
Trabalhando com Dados da Requisição
Manipulando Formulários
from bottle import request, post
@post('/submit')
def submit_form():
name = request.forms.get('name')
email = request.forms.get('email')
age = request.forms.get('age', type=int)
return f"Dados recebidos: {name}, {email}, {age}"
Trabalhando com JSON
from bottle import request, response
@post('/api/data')
def handle_json():
data = request.json
# Processando dados
result = {
'status': 'success',
'received': data,
'message': 'D