ByteRef
← Home
🧪

Flask microframework web Python

pythonwebapi
🚀 Setup Básico
Instalar Flaskpip install flask
App mínimofrom flask import Flask
app = Flask(__name__)
@app.route('/')
def hello():
  return 'Hello World!'
if __name__ == '__main__':
  app.run()
Executar em modo debugexport FLASK_ENV=development
flask run
Configurar host/portaapp.run(host='0.0.0.0', port=5000, debug=True)
Blueprint básicofrom flask import Blueprint
bp = Blueprint('api', __name__)
@bp.route('/health')
def health():
  return {'status': 'ok'}
Registrar blueprintfrom routes.api import bp
app.register_blueprint(bp, url_prefix='/api')
📡 Rotas & Métodos HTTP
Rota com parâmetro@app.route('/user/<int:user_id>')
def get_user(user_id):
  return f'User {user_id}'
Rota POST com JSONfrom flask import request, jsonify
@app.route('/api/data', methods=['POST'])
def create_data():
  data = request.get_json()
  return jsonify({'id': 1, **data})
Upload de arquivo@app.route('/upload', methods=['POST'])
def upload_file():
  file = request.files['file']
  file.save(f'uploads/{file.filename}')
  return 'File uploaded'
Redirecionamentofrom flask import redirect, url_for
@app.route('/old-url')
def old_url():
  return redirect(url_for('new_url'))
Página 404 customizada@app.errorhandler(404)
def not_found(error):
  return 'Página não encontrada', 404
Middleware básico@app.before_request
def before_request():
  print('Antes da requisição')
🗄️ Banco de Dados
SQLAlchemy setupfrom flask_sqlalchemy import SQLAlchemy
app.config['SQLALCHEMY_DATABASE_URI'] = 'sqlite:///app.db'
db = SQLAlchemy(app)
Modelo Userclass User(db.Model):
  id = db.Column(db.Integer, primary_key=True)
  name = db.Column(db.String(80), nullable=False)
  email = db.Column(db.String(120), unique=True)
Criar tabelaswith app.app_context():
  db.create_all()
Inserir registrouser = User(name='João', email='joao@email.com')
db.session.add(user)
db.session.commit()
Consultar registrosusers = User.query.all()
user = User.query.filter_by(email='joao@email.com').first()
Flask-Migrateflask db init
flask db migrate -m "Initial migration"
flask db upgrade
🔐 Autenticação & Segurança
Flask-Login setupfrom flask_login import LoginManager, UserMixin, login_user
login_manager = LoginManager(app)
Classe User com Loginclass User(UserMixin, db.Model):
  def get_id(self):
    return str(self.id)
JWT com Flask-JWT-Extendedfrom flask_jwt_extended import JWTManager, create_access_token
app.config['JWT_SECRET_KEY'] = 'super-secret'
jwt = JWTManager(app)
token = create_access_token(identity=user.id)
CORS setupfrom flask_cors import CORS
CORS(app, origins=['http://localhost:3000'])
Rate limitingfrom flask_limiter import Limiter
limiter = Limiter(app, key_func=lambda: request.remote_addr)
@app.route('/api')
@limiter.limit('10 per minute')
def api(): pass
Validar entrada com WTFormsfrom wtforms import Form, StringField, validators
class ContactForm(Form):
  name = StringField('Name', [validators.Length(min=1, max=25)])
🧪 Testes & Deploy
Teste básico com pytestdef test_home(client):
  response = client.get('/')
  assert response.status_code == 200
Fixture para app de teste@pytest.fixture
def client():
  app.config['TESTING'] = True
  return app.test_client()
Deploy com Gunicorngunicorn --bind 0.0.0.0:8000 wsgi:app
Dockerfile básicoFROM python:3.9-slim
COPY . /app
WORKDIR /app
RUN pip install -r requirements.txt
EXPOSE 5000
CMD ["flask", "run", "--host=0.0.0.0"]
Configuração por ambienteclass Config:
  DEBUG = False
class DevelopmentConfig(Config):
  DEBUG = True
app.config.from_object('config.DevelopmentConfig')
Logging básicoimport logging
logging.basicConfig(level=logging.INFO)
app.logger.info('App started')
BR ByteRef DevOps & Backend Reference · 2026 — comandos