Flask Cheatsheet

Basic App

from flask import Flask, jsonify, request

app = Flask(__name__)

@app.route('/')
def home():
    return jsonify({"message": "Hello World"})

if __name__ == '__main__':
    app.run(debug=True, port=5000)

Routes

@app.route('/api/items')                    # GET (default)
@app.route('/api/items', methods=['POST'])
@app.route('/api/items/<int:item_id>')      # URL parameter
@app.route('/api/items/<string:name>')

Request Data

# JSON body
data = request.get_json()
name = data.get('name')

# URL query params: /api/items?page=1
page = request.args.get('page', default=1, type=int)

# URL parameter
item_id = request.view_args['item_id']

Responses

return jsonify({"key": "value"})                        # 200 OK
return jsonify({"error": "not found"}), 404             # Custom status
return jsonify({"created": True}), 201                  # Created

Blueprints (organizing routes)

# In routes.py
from flask import Blueprint
api = Blueprint('api', __name__)

@api.route('/chat', methods=['POST'])
def chat():
    ...

# In __init__.py
from .routes import api
app.register_blueprint(api, url_prefix='/api')

SQLAlchemy

from flask_sqlalchemy import SQLAlchemy
from datetime import datetime, timezone

db = SQLAlchemy()

class Message(db.Model):
    id = db.Column(db.Integer, primary_key=True)
    content = db.Column(db.String(500), nullable=False)
    sender = db.Column(db.String(20), nullable=False)
    timestamp = db.Column(db.DateTime, default=lambda: datetime.now(timezone.utc))

# CRUD
db.session.add(message)
db.session.commit()
db.session.delete(message)
Message.query.all()
Message.query.filter_by(sender='user').all()
Message.query.get(id)
Message.query.order_by(Message.timestamp.desc()).all()

CORS

from flask_cors import CORS
CORS(app)  # Allow all origins

Environment Variables

from dotenv import load_dotenv
import os

load_dotenv()
api_key = os.getenv('OPENAI_API_KEY')

Running

python app.py
# or
FLASK_APP=app.py flask run --debug