Flask Guide
Quick Start
pip install flask
# app.py
from flask import Flask, request, jsonify, g
from functools import wraps
app = Flask(__name__)
app.config['SECRET_KEY'] = 'dev-secret'
@app.route('/')
def index():
return 'Hello, World!'
@app.route('/users/<int:user_id>', methods=['GET'])
def get_user(user_id):
user = User.query.get_or_404(user_id)
return jsonify(user.to_dict())
@app.route('/users', methods=['POST'])
def create_user():
data = request.get_json()
# ...
return jsonify(new_user.to_dict()), 201
if __name__ == '__main__':
app.run(debug=True)
Blueprints
# blueprints/users.py
from flask import Blueprint
users_bp = Blueprint('users', __name__, url_prefix='/users')
@users_bp.route('/')
def list_users():
return 'User list'
# Register blueprint
from blueprints.users import users_bp
app.register_blueprint(users_bp)
Context & Hooks
@app.before_request
def load_user():
token = request.headers.get('Authorization')
g.user = verify_token(token) if token else None
@app.after_request
def add_headers(response):
response.headers['X-Content-Type-Options'] = 'nosniff'
return response
@app.errorhandler(404)
def not_found(e):
return jsonify(error='Not found'), 404
# Application context
with app.app_context():
db.create_all()
Common Extensions
| Extension | Purpose |
|---|---|
| Flask-SQLAlchemy | ORM integration |
| Flask-Migrate | DB migrations (Alembic) |
| Flask-JWT-Extended | JWT authentication |
| Flask-Marshmallow | Serialization |
| Flask-Caching | Response caching |
| Flask-CORS | Cross-origin support |