Django vs. Flask vs. FastAPI: který Python framework zvolit
Věcné srovnání tří nejrozšířenějších webových frameworků v Pythonu – filozofie, ukázky kódu, databáze, administrace, async a doporučení podle typu projektu.
Django, Flask a FastAPI jsou tři nejpoužívanější webové frameworky v Pythonu. Všechny jsou zralé, dobře dokumentované a vhodné pro produkci. Liší se ale v tom, kolik toho za vás rozhodnou. Správná volba závisí na tom, co stavíte, ne na tom, který je „nejlepší“.
Filozofie v jedné větě
- Django – „baterie v balení“: ORM, migrace, administrace, autentizace, formuláře a šablony v jednom.
- Flask – mikroframework: routování a šablony, zbytek si vyberete z rozšíření.
- FastAPI – moderní framework pro API postavený na typových anotacích, Pydanticu a ASGI.
Stejný endpoint třikrát
Flask:
from flask import Flask, jsonify
app = Flask(__name__)
@app.get("/produkty/<int:pid>")
def produkt(pid):
return jsonify({"id": pid, "nazev": "Hrnek"})
FastAPI:
from fastapi import FastAPI
from pydantic import BaseModel
app = FastAPI()
class Produkt(BaseModel):
id: int
nazev: str
@app.get("/produkty/{pid}", response_model=Produkt)
def produkt(pid: int):
return Produkt(id=pid, nazev="Hrnek")
Django (zkráceně – model, view a URL jsou v oddělených souborech):
# models.py
from django.db import models
class Produkt(models.Model):
nazev = models.CharField(max_length=200)
# views.py
from django.http import JsonResponse
from django.shortcuts import get_object_or_404
def produkt(request, pid):
p = get_object_or_404(Produkt, pk=pid)
return JsonResponse({"id": p.pk, "nazev": p.nazev})
# urls.py
from django.urls import path
urlpatterns = [path("produkty/<int:pid>/", produkt)]
Django vyžaduje víc struktury hned od začátku, ale za to rovnou čte z databáze s migracemi.
Srovnávací tabulka
| Django | Flask | FastAPI | |
|---|---|---|---|
| Typ | full-stack | mikro | API-first |
| ORM a migrace | vestavěné | rozšíření (Flask-SQLAlchemy, Flask-Migrate) | vlastní volba (SQLAlchemy, SQLModel) |
| Administrace | vestavěná /admin |
rozšíření (Flask-Admin) | není vestavěná |
| Autentizace uživatelů | vestavěná | rozšíření (Flask-Login) | nástroje pro OAuth2/JWT, zbytek sami |
| Šablony HTML | ano (DTL) | ano (Jinja2) | lze (Jinja2), ale není to hlavní účel |
| Validace vstupu | formuláře, DRF serializery | ručně / rozšíření | Pydantic z anotací |
| OpenAPI dokumentace | přes DRF + rozšíření | přes rozšíření | automaticky |
| Rozhraní serveru | WSGI i ASGI | WSGI | ASGI |
| Async | částečně (async views, ORM se postupně rozšiřuje) | async views od 2.0, ale stále WSGI | nativně |
Django: když stavíte celou aplikaci
Silné stránky:
- Admin – z modelů získáte webové rozhraní pro správu dat bez psaní kódu. Pro interní nástroje a redakční systémy obrovská úspora času.
- ORM a migrace –
python manage.py makemigrationsamigratehlídají schéma databáze. - Bezpečnost ve výchozím stavu – ochrana proti CSRF, XSS v šablonách, SQL injection přes ORM, bezpečné ukládání hesel.
- Ekosystém – Django REST Framework pro API, django-allauth pro přihlášení přes sociální sítě, Celery pro úlohy na pozadí.
Slabší stránky: pro malou službu je to hodně struktury, a pokud nechcete jeho ORM nebo šablony, jdete proti frameworku.
Typické projekty: e-shopy, CMS, intranety, SaaS s uživatelskými účty, cokoli s administrací.
Flask: když chcete mít vše pod kontrolou
Silné stránky:
- Jednoduchost – celou aplikaci lze napsat do jednoho souboru a pochopit za odpoledne.
- Volnost – databázi, autentizaci i strukturu projektu si zvolíte sami.
- Výborný pro výuku – je vidět, jak web funguje, bez vrstev magie.
Slabší stránky: u většího projektu sami řešíte architekturu a skládáte rozšíření, jejichž kvalita a údržba se liší.
Typické projekty: menší weby, prototypy, jednoduchá API, webová rozhraní pro skripty, výuka.
FastAPI: když stavíte API
Silné stránky:
- Validace a dokumentace z typů – jedna anotace = kontrola vstupu, serializace výstupu a Swagger UI na
/docs. - Async – přirozené pro služby, které čekají na jiné služby, databáze nebo LLM API.
- Závislosti (Depends) – čistý způsob, jak předávat databázová spojení, aktuálního uživatele nebo nastavení.
- Výkon – díky ASGI (Starlette, Uvicorn) patří mezi rychlejší Python frameworky, typicky ale stejně rozhoduje databáze.
Slabší stránky: žádný admin, žádné ORM, žádné uživatelské účty. Pro klasickou webovou aplikaci s formuláři si toho musíte hodně doplnit.
Typické projekty: REST API pro mobilní aplikaci nebo SPA frontend, mikroslužby, backendy pro ML modely, webhooky.
Rozhodovací pomůcka
- Potřebujete administraci a uživatelské účty a vracíte HTML? → Django.
- Stavíte čisté JSON API pro frontend nebo jiné služby? → FastAPI (nebo Django + DRF, pokud chcete i admin).
- Malý web, prototyp nebo se učíte? → Flask.
- Hodně souběžných spojení, websockety, streamování? → FastAPI (nebo Django s Channels).
- Tým už jeden z nich zná? → To je často nejsilnější argument.
Nasazení
Všechny tři běží za reverzní proxy (Nginx, Caddy):
- Django a Flask (WSGI): Gunicorn, uWSGI.
- FastAPI a async Django (ASGI): Uvicorn, případně Gunicorn s Uvicorn workery.
Přechod později není nemožný. Business logiku držte v obyčejných Python modulech, ne v pohledech, a výměna frameworku pak znamená hlavně přepsat tenkou vrstvu routování.
Pokud váháte nad konkrétním projektem, popište ho ColdHost AI v režimu Programování – požádejte o návrh struktury v obou kandidátech a porovnejte, který kód se vám bude lépe udržovat.