Skip to content
>_devvkit
$devvkit learn --librarie flask-guide

Flask Guide

[python][web][api]
Python
Install
pip install flask

Flask is the Python equivalent of Express.js — minimal, flexible, and well-documented.

Extension ecosystem: Flask-SQLAlchemy, Flask-Login, Flask-WTF, Flask-RESTful.

Flask 3.x supports async views, type annotations, and improved error handling.

Setup

Basic appMinimal Flask app.
from flask import Flask
app = Flask(__name__)

@app.route('/')
def home():
    return '<h1>Hello</h1>'

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

Routing

Route variableDynamic URL segment.
@app.route('/users/<int:user_id>')
def get_user(user_id: int):
    return f'User {user_id}'
Multiple methodsGET and POST.
@app.route('/users', methods=['GET', 'POST'])
def users():
    if request.method == 'POST':
        return {'id': 1, **request.get_json()}, 201
    return {'users': []}

Request Handling

Query paramsAccess query string.
@app.route('/search')
def search():
    q = request.args.get('q', '')
    return {'query': q}
JSON responseReturn JSON.
from flask import jsonify
@app.route('/status')
def status():
    return jsonify({'status': 'ok'}), 200

Extensions

BlueprintModular routes.
from flask import Blueprint
auth = Blueprint('auth', __name__, url_prefix='/auth')
@auth.route('/login', methods=['POST'])
def login(): ...
app.register_blueprint(auth)
SQLAlchemyDatabase setup.
from flask_sqlalchemy import SQLAlchemy
db = SQLAlchemy()
app.config['SQLALCHEMY_DATABASE_URI'] = 'sqlite:///app.db'
db.init_app(app)

Testing

Test clientIntegration test.
import pytest
from app import app
@pytest.fixture
def client():
    app.config['TESTING'] = True
    return app.test_client()

def test_home(client):
    resp = client.get('/')
    assert resp.status_code == 200