FastAPI-Webanwendung

In diesem Kapitel erstellen Sie von Grund auf Ihre erste Webanwendung mit FastAPI und erleben die automatisch generierte API-Dokumentation.


Positionierungsunterschiede zwischen FastAPI und Django/Flask

FastAPI ist ein aufstrebender Star unter den Python-Webframeworks und positioniert sich zwischen Django und Flask.

FunktionenDjangoFlaskFastAPI
DesignphilosophieVollausgestattetMicro-Framework, bei Bedarf erweiterbarHohe Performance, typgesteuert
Async-UnterstützungUnterstützt ab 3.1+Keine native UnterstützungNatives async/await
API-DokumentationErfordert drf-spectacularErfordert FlasggerSwagger UI automatisch generieren
DatenvalidierungDjango Forms / DRF SerializerFlask-WTF / manuellPydantic (integriert)
ServerWSGI(Gunicorn)WSGI(Gunicorn)ASGI(Uvicorn)
TypsicherheitOptionalOptionalErzwungene Python-Typ-Hinweise

Der größte Unterschied von FastAPI:Alles mit Python-Typ-Hinweisen steuern— automatische Validierung von Routenparametern, automatische Serialisierung von Anfragen/Antworten und automatische Generierung interaktiver Dokumentation.


Umgebungsvorbereitung

$ python3 -m venv venv
$ source venv/bin/activate
(venv) $ pip install fastapi uvicorn jinja2 python-multipart

Erklärung der drei Kernabhängigkeiten:

  • fastapi: Das Web-Framework selbst
  • uvicorn: ASGI-Server (entspricht Gunicorn für Flask)
  • jinja2: Template-Engine (optional, aber für SSR erforderlich)

Minimale FastAPI-Anwendung

Beispiel

# Dateipfad: main.py
from fastapi import FastAPI

# FastAPI-Instanz erstellen
app = FastAPI(
    title="BEISPIEL-Blog",
    description="Eine persönliche Blog-Showcase-Website, erstellt mit FastAPI",
    version="1.0.0"
)

@app.get("/")           # Route-Dekorator für GET-Anfrage
def index():
    """Startseite"""
    return {"message": "Willkommen beim EXAMPLE-Blog"}

@app.get("/hello/{name}")   # Pfadparameter {name}
def hello(name: str):       # FastAPI validiert automatisch anhand von Typ-Hinweisen
    return {"greeting": f"Hallo, {name}!"}

Server starten

(venv) $ uvicorn main:app --reload
INFO:     Uvicorn running on http://127.0.0.1:8000

Beachte, dass sich die Startmethode von Flask unterscheidet:

  • Flask:flask run(basiert auf Werkzeug)
  • FastAPI:uvicorn main:app(Basiert auf ASGI, unterstützt nativ async)

Automatisch generierte API-Dokumentation

Dies ist FastAPIs erstaunlichste Funktion –Automatisch interaktive Dokumentation generieren, ohne zusätzlichen Code zu schreiben。

Besuchen/docsSie sehen die Swagger UI, in der Sie die API direkt auf der Seite testen können:

http://127.0.0.1:8000/docs      # Swagger UI(交互式测试)
http://127.0.0.1:8000/redoc     # ReDoc(只读文档,更美观)

In der Swagger UI: Klicken Sie auf GET /hello/{name} → Try it out → Namen eingeben → Execute, nur um die echte Antwort zu sehen.


Planung der Projektverzeichnisstruktur

blog_project/
├── main.py               # 应用入口
├── models.py             # SQLAlchemy ORM 模型
├── schemas.py            # Pydantic Schema(FastAPI 独有)
├── database.py           # 数据库连接与 Session
├── auth.py               # JWT 认证逻辑
├── routers/              # APIRouter 路由模块
│   ├── posts.py
│   ├── categories.py
│   ├── users.py
│   └── favorites.py
├── templates/            # Jinja2 模板
├── static/               # 静态文件
└── alembic/              # 数据库迁移

Flask verwendet Blueprint, um Routen zu organisieren, FastAPI verwendetAPIRouter. Das Konzept ist ähnlich, aber die Syntax unterscheidet sich, und APIRouter bringt nativ Typbeschränkungen mit.


Kapitelzusammenfassung

In diesem Kapitel haben Sie drei Dinge erledigt: FastAPI + Uvicorn installiert, Ihre erste Route mit Typhinweisen geschrieben und die automatisch generierte interaktive API-Dokumentation unter /docs besucht.

Wichtigste Erkenntnis: FastAPI verwendet Python-Typhinweise, um Parametervalidierung und Dokumentationsgenerierung zu steuern. Dies ist sein grundlegendstes Merkmal, das es von Django/Flask unterscheidet.

Weitere Erweiterungen