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.
| Funktionen | Django | Flask | FastAPI |
|---|---|---|---|
| Designphilosophie | Vollausgestattet | Micro-Framework, bei Bedarf erweiterbar | Hohe Performance, typgesteuert |
| Async-Unterstützung | Unterstützt ab 3.1+ | Keine native Unterstützung | Natives async/await |
| API-Dokumentation | Erfordert drf-spectacular | Erfordert Flasgger | Swagger UI automatisch generieren |
| Datenvalidierung | Django Forms / DRF Serializer | Flask-WTF / manuell | Pydantic (integriert) |
| Server | WSGI(Gunicorn) | WSGI(Gunicorn) | ASGI(Uvicorn) |
| Typsicherheit | Optional | Optional | Erzwungene 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
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