From a07bdb2acbc1b7001b02da42cba9b33d43ab5d6d Mon Sep 17 00:00:00 2001 From: "pr-submit[bot]" <314742883+pr-submit[bot]@users.noreply.github.com> Date: Wed, 19 Aug 2026 10:55:41 +0200 Subject: [PATCH] =?UTF-8?q?=F0=9F=8C=90=20Update=20translations=20for=20de?= =?UTF-8?q?=20(update-outdated)=20(#16209)?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Co-authored-by: pr-submit[bot] Co-authored-by: Yurii Motov <109919500+YuriiMotov@users.noreply.github.com> Co-authored-by: pr-push[bot] --- docs/de/docs/advanced/additional-responses.md | 10 +- docs/de/docs/advanced/async-tests.md | 2 +- docs/de/docs/advanced/behind-a-proxy.md | 18 +- docs/de/docs/advanced/dataclasses.md | 11 +- docs/de/docs/advanced/events.md | 8 +- docs/de/docs/advanced/generate-clients.md | 6 +- docs/de/docs/advanced/middleware.md | 12 +- docs/de/docs/advanced/openapi-callbacks.md | 6 +- docs/de/docs/advanced/response-cookies.md | 3 +- docs/de/docs/advanced/response-headers.md | 2 +- docs/de/docs/advanced/settings.md | 50 +- docs/de/docs/advanced/sub-applications.md | 8 +- docs/de/docs/advanced/templates.md | 8 +- docs/de/docs/advanced/testing-events.md | 2 +- docs/de/docs/advanced/testing-websockets.md | 2 +- .../docs/advanced/using-request-directly.md | 4 +- docs/de/docs/advanced/websockets.md | 14 +- docs/de/docs/advanced/wsgi.md | 4 +- docs/de/docs/alternatives.md | 14 +- docs/de/docs/deployment/docker.md | 32 +- docs/de/docs/deployment/fastapicloud.md | 2 +- docs/de/docs/deployment/manually.md | 10 +- docs/de/docs/deployment/server-workers.md | 2 +- docs/de/docs/environment-variables.md | 297 +----- docs/de/docs/fastapi-cli.md | 12 +- docs/de/docs/features.md | 18 +- docs/de/docs/help-fastapi.md | 22 +- docs/de/docs/history-design-future.md | 4 +- .../docs/how-to/custom-request-and-route.md | 3 +- docs/de/docs/how-to/extending-openapi.md | 2 +- docs/de/docs/how-to/graphql.md | 2 +- ...migrate-from-pydantic-v1-to-pydantic-v2.md | 2 +- docs/de/docs/index.md | 46 +- docs/de/docs/project-generation.md | 4 +- docs/de/docs/python-types.md | 4 +- docs/de/docs/tutorial/background-tasks.md | 4 +- docs/de/docs/tutorial/bigger-applications.md | 4 +- docs/de/docs/tutorial/body-nested-models.md | 2 +- docs/de/docs/tutorial/body.md | 2 +- docs/de/docs/tutorial/debugging.md | 6 +- docs/de/docs/tutorial/extra-data-types.md | 5 +- docs/de/docs/tutorial/extra-models.md | 2 +- docs/de/docs/tutorial/first-steps.md | 22 +- docs/de/docs/tutorial/frontend.md | 12 +- docs/de/docs/tutorial/handling-errors.md | 2 +- docs/de/docs/tutorial/index.md | 69 +- docs/de/docs/tutorial/middleware.md | 14 +- docs/de/docs/tutorial/path-params.md | 88 +- .../tutorial/query-params-str-validations.md | 4 +- docs/de/docs/tutorial/request-files.md | 8 +- docs/de/docs/tutorial/request-form-models.md | 12 +- .../docs/tutorial/request-forms-and-files.md | 6 +- docs/de/docs/tutorial/request-forms.md | 4 +- docs/de/docs/tutorial/response-model.md | 68 +- docs/de/docs/tutorial/schema-extra-example.md | 2 +- docs/de/docs/tutorial/security/first-steps.md | 13 +- docs/de/docs/tutorial/security/oauth2-jwt.md | 16 +- docs/de/docs/tutorial/sql-databases.md | 10 +- docs/de/docs/tutorial/static-files.md | 4 +- docs/de/docs/tutorial/testing.md | 16 +- docs/de/docs/virtual-environments.md | 849 +----------------- 61 files changed, 415 insertions(+), 1475 deletions(-) diff --git a/docs/de/docs/advanced/additional-responses.md b/docs/de/docs/advanced/additional-responses.md index f2214713bc..c58c8b0413 100644 --- a/docs/de/docs/advanced/additional-responses.md +++ b/docs/de/docs/advanced/additional-responses.md @@ -18,7 +18,7 @@ Für diese zusätzlichen Responses müssen Sie jedoch sicherstellen, dass Sie ei Sie können Ihren *Pfadoperation-Dekoratoren* einen Parameter `responses` übergeben. -Der nimmt ein `dict` entgegen, die Schlüssel sind Statuscodes für jede Response, wie etwa `200`, und die Werte sind andere `dict`s mit den Informationen für jede Response. +Der nimmt ein `dict` entgegen: Die Schlüssel sind Statuscodes für jede Response (wie etwa `200`), und die Werte sind andere `dict`s mit den Informationen für jede Response. Jedes dieser Response-`dict`s kann einen Schlüssel `model` haben, welcher ein Pydantic-Modell enthält, genau wie `response_model`. @@ -185,7 +185,7 @@ Beachten Sie, dass Sie das Bild direkt mit einer `FileResponse` zurückgeben mü /// note | Hinweis -Sofern Sie in Ihrem Parameter `responses` nicht explizit einen anderen Medientyp angeben, geht FastAPI davon aus, dass die Response denselben Medientyp wie die Haupt-Response-Klasse hat (Standardmäßig `application/json`). +Sofern Sie in Ihrem Parameter `responses` nicht explizit einen anderen Medientyp angeben, geht FastAPI davon aus, dass die Response denselben Medientyp wie die Haupt-Response-Klasse hat (standardmäßig `application/json`). Wenn Sie jedoch eine benutzerdefinierte Response-Klasse mit `None` als Medientyp angegeben haben, verwendet FastAPI `application/json` für jede zusätzliche Response, die über ein zugehöriges Modell verfügt. @@ -195,7 +195,7 @@ Wenn Sie jedoch eine benutzerdefinierte Response-Klasse mit `None` als Medientyp Sie können auch Response-Informationen von mehreren Stellen kombinieren, einschließlich der Parameter `response_model`, `status_code` und `responses`. -Sie können ein `response_model` deklarieren, indem Sie den Standardstatuscode `200` (oder bei Bedarf einen benutzerdefinierten) verwenden und dann zusätzliche Informationen für dieselbe Response in `responses` direkt im OpenAPI-Schema deklarieren. +Sie können ein `response_model` deklarieren, indem Sie den Defaultstatuscode `200` (oder bei Bedarf einen benutzerdefinierten) verwenden und dann zusätzliche Informationen für dieselbe Response in `responses` direkt im OpenAPI-Schema deklarieren. **FastAPI** behält die zusätzlichen Informationen aus `responses` und kombiniert sie mit dem JSON-Schema aus Ihrem Modell. @@ -243,5 +243,5 @@ Zum Beispiel: Um zu sehen, was genau Sie in die Responses aufnehmen können, können Sie die folgenden Abschnitte in der OpenAPI-Spezifikation überprüfen: -* [OpenAPI Responses Object](https://github.com/OAI/OpenAPI-Specification/blob/master/versions/3.1.0.md#responses-object), enthält das `Response Object`. -* [OpenAPI Response Object](https://github.com/OAI/OpenAPI-Specification/blob/master/versions/3.1.0.md#response-object), Sie können alles davon direkt in jede Response innerhalb Ihres `responses`-Parameter einfügen. Einschließlich `description`, `headers`, `content` (darin deklarieren Sie verschiedene Medientypen und JSON-Schemas) und `links`. +* [OpenAPI Responses Object](https://github.com/OAI/OpenAPI-Specification/blob/main/versions/3.1.0.md#responses-object), enthält das `Response Object`. +* [OpenAPI Response Object](https://github.com/OAI/OpenAPI-Specification/blob/main/versions/3.1.0.md#response-object), Sie können alles davon direkt in jede Response innerhalb Ihres `responses`-Parameters einfügen. Einschließlich `description`, `headers`, `content` (darin deklarieren Sie verschiedene Medientypen und JSON-Schemas) und `links`. diff --git a/docs/de/docs/advanced/async-tests.md b/docs/de/docs/advanced/async-tests.md index 58c925ae6e..b3e953068d 100644 --- a/docs/de/docs/advanced/async-tests.md +++ b/docs/de/docs/advanced/async-tests.md @@ -45,7 +45,7 @@ Sie können Ihre Tests wie gewohnt ausführen mit:
```console -$ pytest +$ uv run pytest ---> 100% ``` diff --git a/docs/de/docs/advanced/behind-a-proxy.md b/docs/de/docs/advanced/behind-a-proxy.md index 7260202198..b1709d4df1 100644 --- a/docs/de/docs/advanced/behind-a-proxy.md +++ b/docs/de/docs/advanced/behind-a-proxy.md @@ -6,7 +6,7 @@ Diese Proxys könnten HTTPS-Zertifikate und andere Dinge handhaben. ## Proxy-Forwarded-Header { #proxy-forwarded-headers } -Ein **Proxy** vor Ihrer Anwendung würde normalerweise einige Header on-the-fly setzen, bevor er die Requests an den **Server** sendet, um den Server wissen zu lassen, dass der Request vom Proxy **weitergeleitet** wurde, einschließlich der ursprünglichen (öffentlichen) URL, inklusive der Domain, dass HTTPS verwendet wird, usw. +Ein **Proxy** vor Ihrer Anwendung würde normalerweise einige Header on-the-fly setzen, bevor er die Requests an Ihren **Server** sendet, um den Server wissen zu lassen, dass der Request vom Proxy **weitergeleitet** wurde, einschließlich der ursprünglichen (öffentlichen) URL, inklusive der Domain, dass HTTPS verwendet wird, usw. Das **Server**-Programm (z. B. **Uvicorn** via **FastAPI CLI**) ist in der Lage, diese Header zu interpretieren und diese Information dann an Ihre Anwendung weiterzugeben. @@ -33,7 +33,7 @@ Wenn Ihr **Server** hinter einem vertrauenswürdigen **Proxy** sitzt und nur der
```console -$ fastapi run --forwarded-allow-ips="*" +$ uv run fastapi run --forwarded-allow-ips="*" INFO: Uvicorn running on http://127.0.0.1:8000 (Press CTRL+C to quit) ``` @@ -82,7 +82,7 @@ sequenceDiagram Note over Server: Server interpretiert die Header
(wenn --forwarded-allow-ips gesetzt ist) - Server->>Proxy: HTTP-Response
mit correkten HTTPS-URLs + Server->>Proxy: HTTP-Response
mit korrekten HTTPS-URLs Proxy->>Client: HTTPS-Response ``` @@ -170,7 +170,7 @@ Um dies zu erreichen, können Sie die Kommandozeilenoption `--root-path` wie fol
```console -$ fastapi run main.py --forwarded-allow-ips="*" --root-path /api/v1 +$ uv run fastapi run main.py --forwarded-allow-ips="*" --root-path /api/v1 INFO: Uvicorn running on http://127.0.0.1:8000 (Press CTRL+C to quit) ``` @@ -200,7 +200,7 @@ Wenn Sie Uvicorn dann starten mit:
```console -$ fastapi run main.py --forwarded-allow-ips="*" --root-path /api/v1 +$ uv run fastapi run main.py --forwarded-allow-ips="*" --root-path /api/v1 INFO: Uvicorn running on http://127.0.0.1:8000 (Press CTRL+C to quit) ``` @@ -253,7 +253,7 @@ In einem solchen Fall (ohne ein abgetrenntes Pfadpräfix) würde der Proxy auf e Sie können das Experiment mit einem abgetrennten Pfadpräfix einfach lokal ausführen, indem Sie [Traefik](https://docs.traefik.io/) verwenden. -[Laden Sie Traefik herunter](https://github.com/containous/traefik/releases), es ist eine einzelne Binärdatei, Sie können die komprimierte Datei extrahieren und sie direkt vom Terminal aus ausführen. +[Laden Sie Traefik herunter](https://github.com/traefik/traefik/releases), es ist eine einzelne Binärdatei, Sie können die komprimierte Datei extrahieren und sie direkt vom Terminal aus ausführen. Dann erstellen Sie eine Datei `traefik.toml` mit: @@ -316,12 +316,12 @@ INFO[0000] Configuration loaded from file: /home/user/awesomeapi/traefik.toml
-Und jetzt starten Sie Ihre Anwendung mit Uvicorn, indem Sie die Option `--root-path` verwenden: +Und jetzt starten Sie Ihre Anwendung, indem Sie die Option `--root-path` verwenden:
```console -$ fastapi run main.py --forwarded-allow-ips="*" --root-path /api/v1 +$ uv run fastapi run main.py --forwarded-allow-ips="*" --root-path /api/v1 INFO: Uvicorn running on http://127.0.0.1:8000 (Press CTRL+C to quit) ``` @@ -461,6 +461,6 @@ Dann wird er nicht in das OpenAPI-Schema aufgenommen. ## Mounten einer Unteranwendung { #mounting-a-sub-application } -Wenn Sie gleichzeitig eine Unteranwendung mounten (wie beschrieben in [Unteranwendungen – Mounts](sub-applications.md)) und einen Proxy mit `root_path` verwenden wollen, können Sie das normal tun, wie Sie es erwarten würden. +Wenn Sie eine Unteranwendung mounten müssen (wie beschrieben in [Unteranwendungen – Mounts](sub-applications.md)) und dabei auch einen Proxy mit `root_path` verwenden, können Sie das normal tun, wie Sie es erwarten würden. FastAPI verwendet intern den `root_path` auf intelligente Weise, sodass es einfach funktioniert. ✨ diff --git a/docs/de/docs/advanced/dataclasses.md b/docs/de/docs/advanced/dataclasses.md index bacf9d1629..8afe3b6974 100644 --- a/docs/de/docs/advanced/dataclasses.md +++ b/docs/de/docs/advanced/dataclasses.md @@ -1,13 +1,12 @@ # Datenklassen verwenden { #using-dataclasses } - FastAPI basiert auf **Pydantic**, und ich habe Ihnen gezeigt, wie Sie Pydantic-Modelle verwenden können, um Requests und Responses zu deklarieren. Aber FastAPI unterstützt auf die gleiche Weise auch die Verwendung von [`dataclasses`](https://docs.python.org/3/library/dataclasses.html): {* ../../docs_src/dataclasses_/tutorial001_py310.py hl[1,6:11,18:19] *} -Das ist dank **Pydantic** ebenfalls möglich, da es [„`dataclasses` intern unterstützt“](https://docs.pydantic.dev/latest/concepts/dataclasses/#use-of-stdlib-dataclasses-with-basemodel). +Das ist dank **Pydantic** ebenfalls möglich, da es [interne Unterstützung für `dataclasses`](https://pydantic.dev/docs/validation/latest/concepts/dataclasses/#usage-of-stdlib-dataclasses-with-basemodel) bietet. Auch wenn im obigen Code Pydantic nicht explizit vorkommt, verwendet FastAPI Pydantic, um diese Standard-Datenklassen in Pydantics eigene Variante von Datenklassen zu konvertieren. @@ -65,7 +64,7 @@ In diesem Fall können Sie einfach die Standard-`dataclasses` durch `pydantic.da 6. Hier geben wir ein Dictionary zurück, das `items` enthält, welches eine Liste von Datenklassen ist. - FastAPI ist weiterhin in der Lage, die Daten nach JSON zu Serialisieren. + FastAPI ist weiterhin in der Lage, die Daten nach JSON zu serialisieren. 7. Hier verwendet das `response_model` als Typannotation eine Liste von `Author`-Datenklassen. @@ -75,7 +74,7 @@ In diesem Fall können Sie einfach die Standard-`dataclasses` durch `pydantic.da Wie immer können Sie in FastAPI `def` und `async def` beliebig kombinieren. - Wenn Sie eine Auffrischung darüber benötigen, wann welche Anwendung sinnvoll ist, lesen Sie den Abschnitt „In Eile?“ in der Dokumentation zu [`async` und `await`](../async.md#in-a-hurry). + Wenn Sie eine Auffrischung darüber benötigen, wann welche Anwendung sinnvoll ist, lesen Sie den Abschnitt _„In Eile?“_ in der Dokumentation zu [`async` und `await`](../async.md#in-a-hurry). 9. Diese *Pfadoperation-Funktion* gibt keine Datenklassen zurück (obwohl dies möglich wäre), sondern eine Liste von Dictionarys mit internen Daten. @@ -83,13 +82,13 @@ In diesem Fall können Sie einfach die Standard-`dataclasses` durch `pydantic.da Sie können `dataclasses` mit anderen Typannotationen auf vielfältige Weise kombinieren, um komplexe Datenstrukturen zu bilden. -Weitere Einzelheiten finden Sie in den Bemerkungen im Quellcode oben. +Weitere spezifische Details finden Sie in den Annotationstipps im Code oben. ## Mehr erfahren { #learn-more } Sie können `dataclasses` auch mit anderen Pydantic-Modellen kombinieren, von ihnen erben, sie in Ihre eigenen Modelle einbinden, usw. -Weitere Informationen finden Sie in der [Pydantic-Dokumentation zu Datenklassen](https://docs.pydantic.dev/latest/concepts/dataclasses/). +Weitere Informationen finden Sie in der [Pydantic-Dokumentation zu Datenklassen](https://pydantic.dev/docs/validation/latest/concepts/dataclasses/). ## Version { #version } diff --git a/docs/de/docs/advanced/events.md b/docs/de/docs/advanced/events.md index 6efe968096..a6d3430c0e 100644 --- a/docs/de/docs/advanced/events.md +++ b/docs/de/docs/advanced/events.md @@ -32,7 +32,7 @@ Wir erstellen eine asynchrone Funktion `lifespan()` mit `yield` wie folgt: {* ../../docs_src/events/tutorial003_py310.py hl[16,19] *} -Hier simulieren wir den langsamen *Startup*, das Laden des Modells, indem wir die (Fake-)Modellfunktion vor dem `yield` in das Dictionary mit Modellen für maschinelles Lernen einfügen. Dieser Code wird ausgeführt, **bevor** die Anwendung **beginnt, Requests entgegenzunehmen**, während des *Startups*. +Hier simulieren wir den aufwendigen *Startup*-Vorgang des Ladens des Modells, indem wir die (Fake-)Modellfunktion vor dem `yield` in das Dictionary mit Modellen für maschinelles Lernen einfügen. Dieser Code wird ausgeführt, **bevor** die Anwendung **beginnt, Requests entgegenzunehmen**, während des *Startups*. Und dann, direkt nach dem `yield`, entladen wir das Modell. Dieser Code wird ausgeführt, **nachdem** die Anwendung **die Bearbeitung von Requests abgeschlossen hat**, direkt vor dem *Shutdown*. Dadurch könnten beispielsweise Ressourcen wie Arbeitsspeicher oder eine GPU freigegeben werden. @@ -140,7 +140,7 @@ Daher deklarieren wir die Eventhandler-Funktion mit Standard-`def` statt mit `as ### `startup` und `shutdown` zusammen { #startup-and-shutdown-together } -Es besteht eine hohe Wahrscheinlichkeit, dass die Logik für Ihr *Startup* und *Shutdown* miteinander verknüpft ist. Vielleicht möchten Sie etwas beginnen und es dann beenden, eine Ressource laden und sie dann freigeben usw. +Es besteht eine hohe Wahrscheinlichkeit, dass die Logik für Ihr *Startup* und *Shutdown* miteinander verknüpft ist. Vielleicht möchten Sie etwas beginnen und es dann beenden, eine Ressource belegen und sie dann freigeben usw. Bei getrennten Funktionen, die keine gemeinsame Logik oder Variablen haben, ist dies schwieriger, da Sie Werte in globalen Variablen speichern oder ähnliche Tricks verwenden müssen. @@ -154,9 +154,9 @@ In der technischen ASGI-Spezifikation ist dies Teil des [Lifespan-Protokolls](ht /// note | Hinweis -Weitere Informationen zu Starlettes `lifespan`-Handlern finden Sie in [Starlettes Lifespan-Dokumentation](https://www.starlette.dev/lifespan/). +Weitere Informationen zu Starlettes `lifespan`-Handlern finden Sie in [Starlettes Lifespan-Dokumentation](https://starlette.dev/lifespan/). -Einschließlich, wie man Lifespan-Zustand handhabt, der in anderen Bereichen Ihres Codes verwendet werden kann. +Einschließlich, wie Sie Lifespan-Zustand handhaben, der in anderen Bereichen Ihres Codes verwendet werden kann. /// diff --git a/docs/de/docs/advanced/generate-clients.md b/docs/de/docs/advanced/generate-clients.md index d93641bd3b..ce14e84367 100644 --- a/docs/de/docs/advanced/generate-clients.md +++ b/docs/de/docs/advanced/generate-clients.md @@ -6,13 +6,13 @@ Dies vereinfacht es, aktuelle **Dokumentation** und Client-Bibliotheken ( ```console -$ pip install pydantic-settings +$ uv add pydantic-settings ---> 100% ```
-Es ist bereits enthalten, wenn Sie die `all`-Extras installiert haben, mit: +Es ist auch enthalten, wenn Sie die `all`-Extras installieren mit:
```console -$ pip install "fastapi[all]" +$ uv add "fastapi[all]" ---> 100% ``` @@ -76,19 +80,39 @@ Dann können Sie das neue `settings`-Objekt in Ihrer Anwendung verwenden: Als Nächstes würden Sie den Server ausführen und die Konfigurationen als Umgebungsvariablen übergeben. Sie könnten beispielsweise `ADMIN_EMAIL` und `APP_NAME` festlegen mit: +//// tab | Linux, macOS, Windows Bash +
```console -$ ADMIN_EMAIL="deadpool@example.com" APP_NAME="ChimichangApp" fastapi run main.py +$ ADMIN_EMAIL="deadpool@example.com" APP_NAME="ChimichangApp" uv run fastapi run main.py INFO: Uvicorn running on http://127.0.0.1:8000 (Press CTRL+C to quit) ```
+//// + +//// tab | Windows PowerShell + +
+ +```console +$ $Env:ADMIN_EMAIL = "deadpool@example.com" +$ $Env:APP_NAME = "ChimichangApp" +$ uv run fastapi run main.py + +INFO: Uvicorn running on http://127.0.0.1:8000 (Press CTRL+C to quit) +``` + +
+ +//// + /// tip | Tipp -Um mehrere Umgebungsvariablen für einen einzelnen Befehl festzulegen, trennen Sie diese einfach durch ein Leerzeichen und fügen Sie alle vor dem Befehl ein. +In Bash trennen Sie, um mehrere Umgebungsvariablen für einen einzelnen Befehl festzulegen, diese durch ein Leerzeichen und fügen sie alle vor dem Befehl ein. /// @@ -172,11 +196,11 @@ Aber eine dotenv-Datei muss nicht unbedingt genau diesen Dateinamen haben. /// -Pydantic unterstützt das Lesen dieser Dateitypen mithilfe einer externen Bibliothek. Weitere Informationen finden Sie unter [Pydantic Settings: Dotenv (.env)-Unterstützung](https://docs.pydantic.dev/latest/concepts/pydantic_settings/#dotenv-env-support). +Pydantic unterstützt das Lesen dieser Dateitypen mithilfe einer externen Bibliothek. Weitere Informationen finden Sie unter [Pydantic Settings: Dotenv (.env)-Unterstützung](https://pydantic.dev/docs/validation/latest/concepts/pydantic_settings/#dotenv-env-support). /// tip | Tipp -Damit das funktioniert, müssen Sie `pip install python-dotenv` ausführen. +Damit das funktioniert, fügen Sie Ihrem Projekt `python-dotenv` mit `uv add python-dotenv` hinzu. /// @@ -197,7 +221,7 @@ Und dann aktualisieren Sie Ihre `config.py` mit: /// tip | Tipp -Das Attribut `model_config` wird nur für die Pydantic-Konfiguration verwendet. Weitere Informationen finden Sie unter [Pydantic: Konzepte: Konfiguration](https://docs.pydantic.dev/latest/concepts/config/). +Das Attribut `model_config` wird nur für die Pydantic-Konfiguration verwendet. Weitere Informationen finden Sie unter [Pydantic: Konzepte: Konfiguration](https://pydantic.dev/docs/validation/latest/concepts/config/). /// diff --git a/docs/de/docs/advanced/sub-applications.md b/docs/de/docs/advanced/sub-applications.md index 206ee7b499..e311ac7127 100644 --- a/docs/de/docs/advanced/sub-applications.md +++ b/docs/de/docs/advanced/sub-applications.md @@ -4,11 +4,11 @@ Wenn Sie zwei unabhängige FastAPI-Anwendungen mit deren eigenen unabhängigen O ## Eine **FastAPI**-Anwendung mounten { #mounting-a-fastapi-application } -„Mounten“ („Einhängen“) bedeutet das Hinzufügen einer völlig „unabhängigen“ Anwendung an einem bestimmten Pfad, die sich dann um die Handhabung aller unter diesem Pfad liegenden _Pfadoperationen_ kümmert, welche in dieser Unteranwendung deklariert sind. +„Mounten“ bedeutet das Hinzufügen einer völlig „unabhängigen“ Anwendung an einem bestimmten Pfad, die sich dann um die Handhabung aller unter diesem Pfad liegenden _Pfadoperationen_ kümmert, welche in dieser Unteranwendung deklariert sind. -### Hauptanwendung { #top-level-application } +### Top-Level-Anwendung { #top-level-application } -Erstellen Sie zunächst die Hauptanwendung **FastAPI** und deren *Pfadoperationen*: +Erstellen Sie zunächst die Haupt-, Top-Level-**FastAPI**-Anwendung und deren *Pfadoperationen*: {* ../../docs_src/sub_applications/tutorial001_py310.py hl[3, 6:8] *} @@ -35,7 +35,7 @@ Führen Sie nun den Befehl `fastapi` aus:
```console -$ fastapi dev +$ uv run fastapi dev INFO: Uvicorn running on http://127.0.0.1:8000 (Press CTRL+C to quit) ``` diff --git a/docs/de/docs/advanced/templates.md b/docs/de/docs/advanced/templates.md index 218b0437e4..71ffc9b1c5 100644 --- a/docs/de/docs/advanced/templates.md +++ b/docs/de/docs/advanced/templates.md @@ -8,12 +8,12 @@ Es gibt Werkzeuge zur einfachen Konfiguration, die Sie direkt in Ihrer **FastAPI ## Abhängigkeiten installieren { #install-dependencies } -Stellen Sie sicher, dass Sie eine [virtuelle Umgebung](../virtual-environments.md) erstellen, sie aktivieren und `jinja2` installieren: +Fügen Sie `jinja2` Ihrem Projekt hinzu:
```console -$ pip install jinja2 +$ uv add jinja2 ---> 100% ``` @@ -53,7 +53,7 @@ Sie können auch `from starlette.templating import Jinja2Templates` verwenden. ## Templates erstellen { #writing-templates } -Dann können Sie unter `templates/item.html` ein Template erstellen, mit z. B. folgendem Inhalt: +Dann können Sie unter `templates/item.html` ein Template erstellen, mit z. B.: ```jinja hl_lines="7" {!../../docs_src/templates/templates/item.html!} @@ -123,4 +123,4 @@ Und da Sie `StaticFiles` verwenden, wird diese CSS-Datei automatisch von Ihrer * ## Mehr Details { #more-details } -Weitere Informationen, einschließlich, wie man Templates testet, finden Sie in [Starlettes Dokumentation zu Templates](https://www.starlette.dev/templates/). +Weitere Informationen, einschließlich, wie man Templates testet, finden Sie in [Starlettes Dokumentation zu Templates](https://starlette.dev/templates/). diff --git a/docs/de/docs/advanced/testing-events.md b/docs/de/docs/advanced/testing-events.md index 053aeffc8a..903b3776c9 100644 --- a/docs/de/docs/advanced/testing-events.md +++ b/docs/de/docs/advanced/testing-events.md @@ -5,7 +5,7 @@ Wenn Sie `lifespan` in Ihren Tests ausführen müssen, können Sie den `TestClie {* ../../docs_src/app_testing/tutorial004_py310.py hl[9:15,18,27:28,30:32,41:43] *} -Sie können mehr Details unter [„Lifespan in Tests ausführen in der offiziellen Starlette-Dokumentation.“](https://www.starlette.dev/lifespan/#running-lifespan-in-tests) nachlesen. +Sie können mehr Details unter [„Lifespan in Tests ausführen auf der offiziellen Starlette-Dokumentationswebsite.“](https://starlette.dev/lifespan/#running-lifespan-in-tests) nachlesen. Für die deprecateten Events `startup` und `shutdown` können Sie den `TestClient` wie folgt verwenden: diff --git a/docs/de/docs/advanced/testing-websockets.md b/docs/de/docs/advanced/testing-websockets.md index 3c06f19388..63ae41cebc 100644 --- a/docs/de/docs/advanced/testing-websockets.md +++ b/docs/de/docs/advanced/testing-websockets.md @@ -8,6 +8,6 @@ Dazu verwenden Sie den `TestClient` in einer `with`-Anweisung, eine Verbindung z /// note | Hinweis -Weitere Informationen finden Sie in Starlettes Dokumentation zum [Testen von WebSockets](https://www.starlette.dev/testclient/#testing-websocket-sessions). +Weitere Informationen finden Sie in Starlettes Dokumentation zum [Testen von WebSockets](https://starlette.dev/testclient/#testing-websocket-sessions). /// diff --git a/docs/de/docs/advanced/using-request-directly.md b/docs/de/docs/advanced/using-request-directly.md index 623ddbb4bb..27e767d0d3 100644 --- a/docs/de/docs/advanced/using-request-directly.md +++ b/docs/de/docs/advanced/using-request-directly.md @@ -15,7 +15,7 @@ Es gibt jedoch Situationen, in denen Sie möglicherweise direkt auf das `Request ## Details zum `Request`-Objekt { #details-about-the-request-object } -Da **FastAPI** unter der Haube eigentlich **Starlette** ist, mit einer Ebene von mehreren Tools darüber, können Sie Starlettes [`Request`](https://www.starlette.dev/requests/)-Objekt direkt verwenden, wenn Sie es benötigen. +Da **FastAPI** unter der Haube eigentlich **Starlette** ist, mit einer Ebene von mehreren Tools darüber, können Sie Starlettes [`Request`](https://starlette.dev/requests/)-Objekt direkt verwenden, wenn Sie es benötigen. Das bedeutet allerdings auch, dass, wenn Sie Daten direkt vom `Request`-Objekt nehmen (z. B. dessen Body lesen), diese von FastAPI nicht validiert, konvertiert oder dokumentiert werden (mit OpenAPI, für die automatische API-Benutzeroberfläche). @@ -45,7 +45,7 @@ Auf die gleiche Weise können Sie wie gewohnt jeden anderen Parameter deklariere ## `Request`-Dokumentation { #request-documentation } -Weitere Details zum [`Request`-Objekt auf der offiziellen Starlette-Dokumentationsseite](https://www.starlette.dev/requests/). +Weitere Details zum [`Request`-Objekt auf der offiziellen Starlette-Dokumentationsseite](https://starlette.dev/requests/). /// note | Technische Details diff --git a/docs/de/docs/advanced/websockets.md b/docs/de/docs/advanced/websockets.md index a0f3a1f332..5c32d11f2f 100644 --- a/docs/de/docs/advanced/websockets.md +++ b/docs/de/docs/advanced/websockets.md @@ -4,12 +4,12 @@ Sie können [WebSockets](https://developer.mozilla.org/en-US/docs/Web/API/WebSoc ## `websockets` installieren { #install-websockets } -Stellen Sie sicher, dass Sie eine [virtuelle Umgebung](../virtual-environments.md) erstellen, sie aktivieren und `websockets` installieren (eine Python-Bibliothek, die die Verwendung des „WebSocket“-Protokolls erleichtert): +Fügen Sie `websockets` (eine Python-Bibliothek, die die Verwendung des „WebSocket“-Protokolls erleichtert) zu Ihrem Projekt hinzu:
```console -$ pip install websockets +$ uv add websockets ---> 100% ``` @@ -69,7 +69,7 @@ Legen Sie Ihren Code in einer Datei `main.py` ab und führen Sie dann Ihre Anwen
```console -$ fastapi dev +$ uv run fastapi dev INFO: Uvicorn running on http://127.0.0.1:8000 (Press CTRL+C to quit) ``` @@ -96,7 +96,7 @@ Sie können viele Nachrichten senden (und empfangen): Und alle verwenden dieselbe WebSocket-Verbindung. -## Verwendung von `Depends` und anderen { #using-depends-and-others } +## `Depends` und andere verwenden { #using-depends-and-others } In WebSocket-Endpunkten können Sie Folgendes aus `fastapi` importieren und verwenden: @@ -126,7 +126,7 @@ Führen Sie Ihre Anwendung aus:
```console -$ fastapi dev +$ uv run fastapi dev INFO: Uvicorn running on http://127.0.0.1:8000 (Press CTRL+C to quit) ``` @@ -182,5 +182,5 @@ Wenn Sie etwas benötigen, das sich leicht in FastAPI integrieren lässt, aber r Weitere Informationen zu Optionen finden Sie in der Dokumentation von Starlette: -* [Die `WebSocket`-Klasse](https://www.starlette.dev/websockets/). -* [Klassen-basierte Handhabung von WebSockets](https://www.starlette.dev/endpoints/#websocketendpoint). +* [Die `WebSocket`-Klasse](https://starlette.dev/websockets/). +* [Klassen-basierte Handhabung von WebSockets](https://starlette.dev/endpoints/#websocketendpoint). diff --git a/docs/de/docs/advanced/wsgi.md b/docs/de/docs/advanced/wsgi.md index 353734a3a8..b9d8d7d057 100644 --- a/docs/de/docs/advanced/wsgi.md +++ b/docs/de/docs/advanced/wsgi.md @@ -9,13 +9,13 @@ Dazu können Sie die `WSGIMiddleware` verwenden und damit Ihre WSGI-Anwendung wr /// note | Hinweis -Dafür muss `a2wsgi` installiert sein, z. B. mit `pip install a2wsgi`. +Dafür muss `a2wsgi` zu Ihrem Projekt hinzugefügt werden, z. B. mit `uv add a2wsgi`. /// Sie müssen `WSGIMiddleware` aus `a2wsgi` importieren. -Wrappen Sie dann die WSGI-Anwendung (z. B. Flask) mit der Middleware. +Wrappen Sie dann die WSGI-App (z. B. Flask) mit der Middleware. Und dann mounten Sie das auf einem Pfad. diff --git a/docs/de/docs/alternatives.md b/docs/de/docs/alternatives.md index 5a814cb558..35944da171 100644 --- a/docs/de/docs/alternatives.md +++ b/docs/de/docs/alternatives.md @@ -125,7 +125,7 @@ Einen offenen Standard für API-Spezifikationen zu übernehmen und zu verwenden, Und Standard-basierte Tools für die Oberfläche zu integrieren: * [Swagger UI](https://github.com/swagger-api/swagger-ui) -* [ReDoc](https://github.com/Rebilly/ReDoc) +* [ReDoc](https://github.com/Redocly/redoc) Diese beiden wurden ausgewählt, weil sie ziemlich beliebt und stabil sind, aber bei einer schnellen Suche könnten Sie Dutzende alternativer Benutzeroberflächen für OpenAPI finden (welche Sie mit **FastAPI** verwenden können). @@ -137,7 +137,7 @@ Es gibt mehrere Flask REST Frameworks, aber nachdem ich die Zeit und Arbeit inve ### [Marshmallow](https://marshmallow.readthedocs.io/en/stable/) { #marshmallow } -Eine der von API-Systemen benötigten Hauptfunktionen ist die Daten-„Serialisierung“, welche Daten aus dem Code (Python) entnimmt und in etwas umwandelt, was durch das Netzwerk gesendet werden kann. Beispielsweise das Konvertieren eines Objekts, welches Daten aus einer Datenbank enthält, in ein JSON-Objekt. Konvertieren von `datetime`-Objekten in Strings, usw. +Eine der von API-Systemen benötigten Hauptfunktionen ist die Daten-„Serialisierung“, welche Daten aus dem Code (Python) entnimmt und in etwas umwandelt, was durch das Netzwerk gesendet werden kann. Beispielsweise das Konvertieren eines Objekts, welches Daten aus einer Datenbank enthält, in ein JSON-Objekt. Konvertieren von `datetime`-Objekten in Strings, usw. Eine weitere wichtige Funktion, benötigt von APIs, ist die Datenvalidierung, welche sicherstellt, dass die Daten unter gegebenen Umständen gültig sind. Zum Beispiel, dass ein Feld ein `int` ist und kein zufälliger String. Das ist besonders nützlich für hereinkommende Daten. @@ -237,7 +237,7 @@ Das OpenAPI-Schema automatisch zu generieren, aus demselben Code, welcher die Se /// -### [NestJS](https://nestjs.com/) (und [Angular](https://angular.io/)) { #nestjs-and-angular } +### [NestJS](https://nestjs.com/) (und [Angular](https://angular.dev/)) { #nestjs-and-angular } Dies ist nicht einmal Python, NestJS ist ein von Angular inspiriertes JavaScript (TypeScript) NodeJS Framework. @@ -337,7 +337,7 @@ Da es auf dem bisherigen Standard für synchrone Python-Webframeworks (WSGI) bas /// note | Hinweis -Hug wurde von Timothy Crosley erstellt, demselben Schöpfer von [`isort`](https://github.com/timothycrosley/isort), einem großartigen Tool zum automatischen Sortieren von Importen in Python-Dateien. +Hug wurde von Timothy Crosley erstellt, demselben Schöpfer von [`isort`](https://github.com/PyCQA/isort), einem großartigen Tool zum automatischen Sortieren von Importen in Python-Dateien. /// @@ -401,7 +401,7 @@ Ich betrachte **FastAPI** als einen „spirituellen Nachfolger“ von APIStar, w ## Verwendet von **FastAPI** { #used-by-fastapi } -### [Pydantic](https://docs.pydantic.dev/) { #pydantic } +### [Pydantic](https://pydantic.dev/docs/) { #pydantic } Pydantic ist eine Bibliothek zum Definieren von Datenvalidierung, Serialisierung und Dokumentation (unter Verwendung von JSON Schema) basierend auf Python-Typhinweisen. @@ -417,7 +417,7 @@ Die gesamte Datenvalidierung, Datenserialisierung und automatische Modelldokumen /// -### [Starlette](https://www.starlette.dev/) { #starlette } +### [Starlette](https://starlette.dev/) { #starlette } Starlette ist ein leichtgewichtiges ASGI-Framework/Toolkit, welches sich ideal für die Erstellung hochperformanter asynchroner Dienste eignet. @@ -462,7 +462,7 @@ Alles, was Sie also mit Starlette machen können, können Sie direkt mit **FastA /// -### [Uvicorn](https://www.uvicorn.dev/) { #uvicorn } +### [Uvicorn](https://uvicorn.dev) { #uvicorn } Uvicorn ist ein blitzschneller ASGI-Server, der auf uvloop und httptools basiert. diff --git a/docs/de/docs/deployment/docker.md b/docs/de/docs/deployment/docker.md index 0ab886c467..d6530166d9 100644 --- a/docs/de/docs/deployment/docker.md +++ b/docs/de/docs/deployment/docker.md @@ -105,36 +105,32 @@ Das ist, was Sie in **den meisten Fällen** tun möchten, zum Beispiel: ### Paketanforderungen { #package-requirements } -Normalerweise befinden sich die **Paketanforderungen** für Ihre Anwendung in einer Datei. +Wenn Sie Ihr Projekt mit `uv` verwalten, werden dessen direkte Abhängigkeiten in `pyproject.toml` deklariert und die exakt aufgelösten Versionen in `uv.lock` gespeichert. -Dies hängt hauptsächlich von dem Tool ab, mit dem Sie diese Anforderungen **installieren**. +Sie können die Packages, die Ihre Anwendung benötigt, hinzufügen mit: -Die gebräuchlichste Methode besteht darin, eine Datei `requirements.txt` mit den Namen der Packages und deren Versionen zu erstellen, eine pro Zeile. +
-Sie würden natürlich die gleichen Ideen verwenden, die Sie in [Über FastAPI-Versionen](versions.md) gelesen haben, um die Versionsbereiche festzulegen. +```console +$ uv add "fastapi[standard]" pydantic +---> 100% +``` -Ihre `requirements.txt` könnte beispielsweise so aussehen: +
-``` -fastapi[standard]>=0.113.0,<0.114.0 -pydantic>=2.7.0,<3.0.0 -``` +/// note | Hinweis -Und normalerweise würden Sie diese Paketabhängigkeiten mit `pip` installieren, zum Beispiel: +Das Dockerfile unten verwendet `pip` innerhalb des Containers. Sie können die gelockten Abhängigkeiten aus Ihrem uv-Projekt in das erwartete Format `requirements.txt` exportieren:
```console -$ pip install -r requirements.txt ----> 100% -Successfully installed fastapi pydantic +$ uv export --format requirements-txt --no-dev --no-emit-project --output-file requirements.txt ```
-/// note | Hinweis - -Es gibt andere Formate und Tools zum Definieren und Installieren von Paketabhängigkeiten. +Die generierte `requirements.txt` ist ein Export für den Container-Build. Verwalten Sie Abhängigkeiten weiterhin mit `uv add` und generieren Sie sie neu, wenn sich `uv.lock` ändert. /// @@ -372,7 +368,7 @@ Sie sehen die automatische interaktive API-Dokumentation (bereitgestellt von [Sw Sie können auch auf [http://192.168.99.100/redoc](http://192.168.99.100/redoc) oder [http://127.0.0.1/redoc](http://127.0.0.1/redoc) gehen (oder ähnlich, unter Verwendung Ihres Docker-Hosts). -Sie sehen die alternative automatische Dokumentation (bereitgestellt von [ReDoc](https://github.com/Rebilly/ReDoc)): +Sie sehen die alternative automatische Dokumentation (bereitgestellt von [ReDoc](https://github.com/Redocly/redoc)): ![ReDoc](https://fastapi.tiangolo.com/img/index/index-02-redoc-simple.png) @@ -529,7 +525,7 @@ Dann möchten Sie vielleicht **einen einzelnen Container** mit einem **Prozessma --- -Der Hauptpunkt ist, dass **keine** dieser Regeln **in Stein gemeißelt** ist, der man blind folgen muss. Sie können diese Ideen verwenden, um **I Ihren eigenen Anwendungsfall zu evaluieren**, zu entscheiden, welcher Ansatz für Ihr System am besten geeignet ist und herauszufinden, wie Sie folgende Konzepte verwalten: +Der Hauptpunkt ist, dass **keine** dieser Regeln **in Stein gemeißelt** ist, der man blind folgen muss. Sie können diese Ideen verwenden, um **Ihren eigenen Anwendungsfall zu evaluieren**, zu entscheiden, welcher Ansatz für Ihr System am besten geeignet ist und herauszufinden, wie Sie folgende Konzepte verwalten: * Sicherheit – HTTPS * Beim Hochfahren ausführen diff --git a/docs/de/docs/deployment/fastapicloud.md b/docs/de/docs/deployment/fastapicloud.md index d563fd8223..d8827c8dad 100644 --- a/docs/de/docs/deployment/fastapicloud.md +++ b/docs/de/docs/deployment/fastapicloud.md @@ -5,7 +5,7 @@ Sie können Ihre FastAPI-App in der [FastAPI Cloud](https://fastapicloud.com) mi
```console -$ fastapi deploy +$ uv run fastapi deploy Deploying to FastAPI Cloud... diff --git a/docs/de/docs/deployment/manually.md b/docs/de/docs/deployment/manually.md index fa8a9c9637..4f023e254d 100644 --- a/docs/de/docs/deployment/manually.md +++ b/docs/de/docs/deployment/manually.md @@ -52,7 +52,7 @@ Das Wichtigste, was Sie benötigen, um eine **FastAPI**-Anwendung (oder eine and Es gibt mehrere Alternativen, einschließlich: -* [Uvicorn](https://www.uvicorn.dev/): ein hochperformanter ASGI-Server. +* [Uvicorn](https://uvicorn.dev): ein hochperformanter ASGI-Server. * [Hypercorn](https://hypercorn.readthedocs.io/): ein ASGI-Server, der unter anderem kompatibel mit HTTP/2 und Trio ist. * [Daphne](https://github.com/django/daphne): der für Django Channels entwickelte ASGI-Server. * [Granian](https://github.com/emmett-framework/granian): Ein Rust-HTTP-Server für Python-Anwendungen. @@ -73,14 +73,14 @@ Wenn Sie FastAPI installieren, wird es mit einem Produktionsserver, Uvicorn, gel Aber Sie können auch ein ASGI-Serverprogramm manuell installieren. -Stellen Sie sicher, dass Sie eine [virtuelle Umgebung](../virtual-environments.md) erstellen, sie aktivieren und dann die Serveranwendung installieren. +Fügen Sie die Serveranwendung Ihrem Projekt hinzu. Zum Beispiel, um Uvicorn zu installieren:
```console -$ pip install "uvicorn[standard]" +$ uv add "uvicorn[standard]" ---> 100% ``` @@ -95,7 +95,7 @@ Durch das Hinzufügen von `standard` installiert und verwendet Uvicorn einige em Dazu gehört `uvloop`, der hochperformante Drop-in-Ersatz für `asyncio`, der den großen Nebenläufigkeits-Leistungsschub bietet. -Wenn Sie FastAPI mit etwas wie `pip install "fastapi[standard]"` installieren, erhalten Sie auch `uvicorn[standard]`. +Wenn Sie FastAPI mit etwas wie `uv add "fastapi[standard]"` hinzufügen, erhalten Sie auch bereits `uvicorn[standard]`. /// @@ -106,7 +106,7 @@ Wenn Sie einen ASGI-Server manuell installiert haben, müssen Sie normalerweise
```console -$ uvicorn main:app --host 0.0.0.0 --port 80 +$ uv run uvicorn main:app --host 0.0.0.0 --port 80 INFO: Uvicorn running on http://0.0.0.0:80 (Press CTRL+C to quit) ``` diff --git a/docs/de/docs/deployment/server-workers.md b/docs/de/docs/deployment/server-workers.md index 6b0cc834ed..73d35bf3bb 100644 --- a/docs/de/docs/deployment/server-workers.md +++ b/docs/de/docs/deployment/server-workers.md @@ -86,7 +86,7 @@ Wenn Sie den `uvicorn`-Befehl direkt verwenden möchten:
```console -$ uvicorn main:app --host 0.0.0.0 --port 8080 --workers 4 +$ uv run uvicorn main:app --host 0.0.0.0 --port 8080 --workers 4 INFO: Uvicorn running on http://0.0.0.0:8080 (Press CTRL+C to quit) INFO: Started parent process [27365] INFO: Started server process [27368] diff --git a/docs/de/docs/environment-variables.md b/docs/de/docs/environment-variables.md index 1678ead273..3f72ecca4f 100644 --- a/docs/de/docs/environment-variables.md +++ b/docs/de/docs/environment-variables.md @@ -1,298 +1,11 @@ # Umgebungsvariablen { #environment-variables } -/// tip | Tipp +Eine **Umgebungsvariable** (auch bekannt als **env var**) ist ein Wert, der außerhalb Ihres Python-Codes im Betriebssystem existiert und von Ihrer Anwendung und anderen Programmen gelesen werden kann. -Wenn Sie bereits wissen, was „Umgebungsvariablen“ sind und wie man sie verwendet, können Sie dies überspringen. +FastAPI-Anwendungen verwenden häufig Umgebungsvariablen für Konfigurationen wie Datenbank-URLs, E-Mail-Zugangsdaten und Secret-Keys. -/// +Sie werden lernen, wie Sie sie für Anwendungskonfigurationen verwenden, in [Einstellungen und Umgebungsvariablen](advanced/settings.md). -Eine Umgebungsvariable (auch bekannt als „**env var**“) ist eine Variable, die **außerhalb** des Python-Codes im **Betriebssystem** lebt und von Ihrem Python-Code (oder auch von anderen Programmen) gelesen werden kann. +## Mehr erfahren { #learn-more } -Umgebungsvariablen können nützlich sein, um **Einstellungen** der Anwendung zu handhaben, als Teil der **Installation** von Python usw. - -## Umgebungsvariablen erstellen und verwenden { #create-and-use-env-vars } - -Sie können Umgebungsvariablen in der **Shell (Terminal)** **erstellen** und verwenden, ohne Python zu benötigen: - -//// tab | Linux, macOS, Windows Bash - -
- -```console -// Sie können eine Umgebungsvariable MY_NAME erstellen mit -$ export MY_NAME="Wade Wilson" - -// Dann können Sie sie mit anderen Programmen verwenden, etwa -$ echo "Hello $MY_NAME" - -Hello Wade Wilson -``` - -
- -//// - -//// tab | Windows PowerShell - -
- -```console -// Erstellen Sie eine Umgebungsvariable MY_NAME -$ $Env:MY_NAME = "Wade Wilson" - -// Verwenden Sie sie mit anderen Programmen, etwa -$ echo "Hello $Env:MY_NAME" - -Hello Wade Wilson -``` - -
- -//// - -## Umgebungsvariablen in Python lesen { #read-env-vars-in-python } - -Sie können auch Umgebungsvariablen **außerhalb** von Python erstellen, im Terminal (oder mit jeder anderen Methode) und sie dann **in Python** lesen. - -Zum Beispiel könnten Sie eine Datei `main.py` haben mit: - -```Python hl_lines="3" -import os - -name = os.getenv("MY_NAME", "World") -print(f"Hello {name} from Python") -``` - -/// tip | Tipp - -Das zweite Argument von [`os.getenv()`](https://docs.python.org/3.8/library/os.html#os.getenv) ist der Defaultwert, der zurückgegeben wird. - -Wenn er nicht angegeben wird, ist er standardmäßig `None`. Hier geben wir `"World"` als den zu verwendenden Defaultwert an. - -/// - -Dann könnten Sie das Python-Programm aufrufen: - -//// tab | Linux, macOS, Windows Bash - -
- -```console -// Hier setzen wir die Umgebungsvariable noch nicht -$ python main.py - -// Da wir die Umgebungsvariable nicht gesetzt haben, erhalten wir den Defaultwert - -Hello World from Python - -// Aber wenn wir zuerst eine Umgebungsvariable erstellen -$ export MY_NAME="Wade Wilson" - -// Und dann das Programm erneut aufrufen -$ python main.py - -// Jetzt kann es die Umgebungsvariable lesen - -Hello Wade Wilson from Python -``` - -
- -//// - -//// tab | Windows PowerShell - -
- -```console -// Hier setzen wir die Umgebungsvariable noch nicht -$ python main.py - -// Da wir die Umgebungsvariable nicht gesetzt haben, erhalten wir den Defaultwert - -Hello World from Python - -// Aber wenn wir zuerst eine Umgebungsvariable erstellen -$ $Env:MY_NAME = "Wade Wilson" - -// Und dann das Programm erneut aufrufen -$ python main.py - -// Jetzt kann es die Umgebungsvariable lesen - -Hello Wade Wilson from Python -``` - -
- -//// - -Da Umgebungsvariablen außerhalb des Codes gesetzt werden können, aber vom Code gelesen werden können und nicht mit den restlichen Dateien gespeichert (in `git` committet) werden müssen, werden sie häufig für Konfigurationen oder **Einstellungen** verwendet. - -Sie können auch eine Umgebungsvariable nur für einen **spezifischen Programmaufruf** erstellen, die nur für dieses Programm und nur für dessen Dauer verfügbar ist. - -Um dies zu tun, erstellen Sie sie direkt vor dem Programmaufruf, in derselben Zeile: - -
- -```console -// Erstellen Sie eine Umgebungsvariable MY_NAME in der Zeile für diesen Programmaufruf -$ MY_NAME="Wade Wilson" python main.py - -// Jetzt kann es die Umgebungsvariable lesen - -Hello Wade Wilson from Python - -// Die Umgebungsvariable existiert danach nicht mehr -$ python main.py - -Hello World from Python -``` - -
- -/// tip | Tipp - -Sie können mehr darüber lesen auf [The Twelve-Factor App: Config](https://12factor.net/config). - -/// - -## Typen und Validierung { #types-and-validation } - -Diese Umgebungsvariablen können nur **Textstrings** handhaben, da sie extern zu Python sind und kompatibel mit anderen Programmen und dem Rest des Systems (und sogar mit verschiedenen Betriebssystemen, wie Linux, Windows, macOS) sein müssen. - -Das bedeutet, dass **jeder Wert**, der in Python von einer Umgebungsvariablen gelesen wird, **ein `str` sein wird**, und jede Konvertierung in einen anderen Typ oder jede Validierung muss im Code vorgenommen werden. - -Sie werden mehr darüber lernen, wie man Umgebungsvariablen zur Handhabung von **Anwendungseinstellungen** verwendet, im [Handbuch für fortgeschrittene Benutzer – Einstellungen und Umgebungsvariablen](./advanced/settings.md). - -## `PATH`-Umgebungsvariable { #path-environment-variable } - -Es gibt eine **spezielle** Umgebungsvariable namens **`PATH`**, die von den Betriebssystemen (Linux, macOS, Windows) verwendet wird, um Programme zu finden, die ausgeführt werden sollen. - -Der Wert der Variable `PATH` ist ein langer String, der aus Verzeichnissen besteht, die auf Linux und macOS durch einen Doppelpunkt `:` und auf Windows durch ein Semikolon `;` getrennt sind. - -Zum Beispiel könnte die `PATH`-Umgebungsvariable so aussehen: - -//// tab | Linux, macOS - -```plaintext -/usr/local/bin:/usr/bin:/bin:/usr/sbin:/sbin -``` - -Das bedeutet, dass das System nach Programmen in den Verzeichnissen suchen sollte: - -* `/usr/local/bin` -* `/usr/bin` -* `/bin` -* `/usr/sbin` -* `/sbin` - -//// - -//// tab | Windows - -```plaintext -C:\Program Files\Python312\Scripts;C:\Program Files\Python312;C:\Windows\System32 -``` - -Das bedeutet, dass das System nach Programmen in den Verzeichnissen suchen sollte: - -* `C:\Program Files\Python312\Scripts` -* `C:\Program Files\Python312` -* `C:\Windows\System32` - -//// - -Wenn Sie einen **Befehl** im Terminal eingeben, **sucht** das Betriebssystem nach dem Programm in **jedem dieser Verzeichnisse**, die in der `PATH`-Umgebungsvariablen aufgeführt sind. - -Zum Beispiel, wenn Sie `python` im Terminal eingeben, sucht das Betriebssystem nach einem Programm namens `python` im **ersten Verzeichnis** in dieser Liste. - -Wenn es es findet, wird es **benutzt**. Andernfalls sucht es weiter in den **anderen Verzeichnissen**. - -### Python installieren und den `PATH` aktualisieren { #installing-python-and-updating-the-path } - -Wenn Sie Python installieren, könnten Sie gefragt werden, ob Sie die `PATH`-Umgebungsvariable aktualisieren möchten. - -//// tab | Linux, macOS - -Angenommen, Sie installieren Python und es landet in einem Verzeichnis `/opt/custompython/bin`. - -Wenn Sie erlauben, die `PATH`-Umgebungsvariable zu aktualisieren, fügt der Installer `/opt/custompython/bin` zur `PATH`-Umgebungsvariable hinzu. - -Das könnte so aussehen: - -```plaintext -/usr/local/bin:/usr/bin:/bin:/usr/sbin:/sbin:/opt/custompython/bin -``` - -Auf diese Weise, wenn Sie `python` im Terminal eingeben, findet das System das Python-Programm in `/opt/custompython/bin` (das letzte Verzeichnis) und verwendet dieses. - -//// - -//// tab | Windows - -Angenommen, Sie installieren Python und es landet in einem Verzeichnis `C:\opt\custompython\bin`. - -Wenn Sie erlauben, die `PATH`-Umgebungsvariable zu aktualisieren, fügt der Installer `C:\opt\custompython\bin` zur `PATH`-Umgebungsvariable hinzu. - -```plaintext -C:\Program Files\Python312\Scripts;C:\Program Files\Python312;C:\Windows\System32;C:\opt\custompython\bin -``` - -Auf diese Weise, wenn Sie `python` im Terminal eingeben, findet das System das Python-Programm in `C:\opt\custompython\bin` (das letzte Verzeichnis) und verwendet dieses. - -//// - -Also, wenn Sie tippen: - -
- -```console -$ python -``` - -
- -//// tab | Linux, macOS - -Das System wird das `python`-Programm in `/opt/custompython/bin` **finden** und es ausführen. - -Es wäre ungefähr gleichbedeutend mit der Eingabe von: - -
- -```console -$ /opt/custompython/bin/python -``` - -
- -//// - -//// tab | Windows - -Das System wird das `python`-Programm in `C:\opt\custompython\bin\python` **finden** und es ausführen. - -Es wäre ungefähr gleichbedeutend mit der Eingabe von: - -
- -```console -$ C:\opt\custompython\bin\python -``` - -
- -//// - -Diese Informationen werden nützlich sein, wenn Sie über [Virtuelle Umgebungen](virtual-environments.md) lernen. - -## Fazit { #conclusion } - -Mit diesem Wissen sollten Sie ein grundlegendes Verständnis davon haben, was **Umgebungsvariablen** sind und wie man sie in Python verwendet. - -Sie können auch mehr darüber in der [Wikipedia zu Umgebungsvariablen](https://en.wikipedia.org/wiki/Environment_variable) lesen. - -In vielen Fällen ist es nicht sehr offensichtlich, wie Umgebungsvariablen nützlich und sofort anwendbar sein könnten. Aber sie tauchen immer wieder in vielen verschiedenen Szenarien auf, wenn Sie entwickeln, deshalb ist es gut, darüber Bescheid zu wissen. - -Zum Beispiel werden Sie diese Informationen im nächsten Abschnitt über [Virtuelle Umgebungen](virtual-environments.md) benötigen. +Lesen Sie den [Leitfaden zu Umgebungsvariablen](https://tiangolo.com/guides/environment-variables/) für eine detaillierte, plattformübergreifende Erklärung, einschließlich der Erstellung und des Lesens von Umgebungsvariablen und wie die `PATH`-Umgebungsvariable funktioniert. diff --git a/docs/de/docs/fastapi-cli.md b/docs/de/docs/fastapi-cli.md index 4202501bce..ddb543d29f 100644 --- a/docs/de/docs/fastapi-cli.md +++ b/docs/de/docs/fastapi-cli.md @@ -2,7 +2,7 @@ **FastAPI CLI** ist ein Kommandozeilenprogramm, mit dem Sie Ihre FastAPI-App bereitstellen, Ihr FastAPI-Projekt verwalten und mehr. -Wenn Sie FastAPI installieren (z. B. mit `pip install "fastapi[standard]"`), erhalten Sie ein Kommandozeilenprogramm, das Sie im Terminal ausführen können. +Wenn Sie FastAPI zu Ihrem Projekt hinzufügen (z. B. mit `uv add "fastapi[standard]"`), erhalten Sie ein Kommandozeilenprogramm, das Sie im Terminal ausführen können. Um Ihre FastAPI-App für die Entwicklung auszuführen, können Sie den Befehl `fastapi dev` verwenden: @@ -52,7 +52,7 @@ Für die Produktion würden Sie statt `fastapi dev` `fastapi run` verwenden. /// -Intern verwendet das **FastAPI CLI** [Uvicorn](https://www.uvicorn.dev), einen leistungsstarken, produktionsreifen, ASGI-Server. 😎 +Intern verwendet das **FastAPI CLI** [Uvicorn](https://uvicorn.dev), einen leistungsstarken, produktionsreifen, ASGI-Server. 😎 Das `fastapi`-CLI versucht automatisch, die auszuführende FastAPI-App zu erkennen, und geht davon aus, dass es sich um ein Objekt namens `app` in einer Datei `main.py` handelt (oder ein paar weitere Varianten). @@ -100,13 +100,13 @@ from backend.main import app Sie können auch den Dateipfad an den Befehl `fastapi dev` übergeben, dann wird das zu verwendende FastAPI-App-Objekt erraten: ```console -$ fastapi dev main.py +$ uv run fastapi dev main.py ``` Oder Sie können auch die Option `--entrypoint` an den Befehl `fastapi dev` übergeben: ```console -$ fastapi dev --entrypoint main:app +$ uv run fastapi dev --entrypoint main:app ``` Aber Sie müssten sich merken, bei jedem Aufruf des `fastapi`-Befehls den korrekten Pfad\entrypoint zu übergeben. @@ -119,6 +119,10 @@ Das Ausführen von `fastapi dev` startet den Entwicklermodus. Standardmäßig ist **Autoreload** aktiviert, das den Server automatisch neu lädt, wenn Sie Änderungen an Ihrem Code vornehmen. Dies ist ressourcenintensiv und könnte weniger stabil sein als wenn es deaktiviert ist. Sie sollten es nur für die Entwicklung verwenden. Es horcht auch auf der IP-Adresse `127.0.0.1`, die die IP für Ihre Maschine ist, um nur mit sich selbst zu kommunizieren (`localhost`). +Vor dem Importieren Ihrer App setzt `fastapi dev` die Umgebungsvariable `FASTAPI_ENV` auf `development`. Wenn `FASTAPI_ENV` bereits gesetzt ist, bleibt der vorhandene Wert erhalten. Dadurch kann App-Startup-Code entwicklungsfreundliches Verhalten wählen, während Sie eine app-spezifische Umgebung wie `staging` bereitstellen können. + +Die konventionellen `FASTAPI_ENV`-Werte sind `development` und `production`. `fastapi run` lässt `FASTAPI_ENV` derzeit unverändert, setzen Sie es also explizit, wenn Ihre App den Produktionsmodus erkennen muss. + ## `fastapi run` { #fastapi-run } Das Ausführen von `fastapi run` startet FastAPI im Produktionsmodus. diff --git a/docs/de/docs/features.md b/docs/de/docs/features.md index f24ec24269..892bf1e7aa 100644 --- a/docs/de/docs/features.md +++ b/docs/de/docs/features.md @@ -19,15 +19,15 @@ Interaktive API-Dokumentation und erkundbare Web-Benutzeroberflächen. Da das Fr ![Swagger UI Interaktion](https://fastapi.tiangolo.com/img/index/index-03-swagger-02.png) -* Alternative API-Dokumentation mit [**ReDoc**](https://github.com/Rebilly/ReDoc). +* Alternative API-Dokumentation mit [**ReDoc**](https://github.com/Redocly/redoc). ![ReDoc](https://fastapi.tiangolo.com/img/index/index-06-redoc-02.png) ### Nur modernes Python { #just-modern-python } -Alles basiert auf Standard-**Python-Typ**deklarationen (dank Pydantic). Es muss keine neue Syntax gelernt werden, nur standardisiertes modernes Python. +Alles basiert auf Standard-**Python-Typ**deklarationen (dank Pydantic). Es muss keine neue Syntax gelernt werden. Nur modernes Standard-Python. -Wenn Sie eine zweiminütige Auffrischung benötigen, wie man Python-Typen verwendet (auch wenn Sie FastAPI nicht benutzen), schauen Sie sich das kurze Tutorial an: [Einführung in Python-Typen](python-types.md). +Wenn Sie eine zweiminütige Auffrischung benötigen, wie man Python-Typen verwendet (auch wenn Sie FastAPI nicht benutzen), schauen Sie sich das kurze Tutorial an: [Python-Typen](python-types.md). Sie schreiben Standard-Python mit Typen: @@ -140,7 +140,7 @@ FastAPI enthält ein extrem einfach zu verwendendes, aber extrem mächtiges ORMs, ODMs für Datenbanken. +Inklusive externer Bibliotheken, die auf Pydantic basieren, wie ORMs und ODMs für Datenbanken. -Daher können Sie in vielen Fällen das Objekt eines Requests **direkt zur Datenbank** schicken, weil alles automatisch validiert wird. +Das bedeutet auch, dass Sie in vielen Fällen dasselbe Objekt, das Sie von einem Request erhalten, **direkt an die Datenbank** übergeben können, da alles automatisch validiert wird. -Das gleiche gilt auch für die andere Richtung: Sie können in vielen Fällen das Objekt aus der Datenbank **direkt zum Client** senden. +Das Gleiche gilt auch umgekehrt: In vielen Fällen können Sie einfach das Objekt, das Sie aus der Datenbank erhalten, **direkt an den Client** übergeben. Mit **FastAPI** bekommen Sie alle Funktionen von **Pydantic** (da FastAPI für die gesamte Datenverarbeitung Pydantic nutzt): diff --git a/docs/de/docs/help-fastapi.md b/docs/de/docs/help-fastapi.md index 4a86875626..94ad79676b 100644 --- a/docs/de/docs/help-fastapi.md +++ b/docs/de/docs/help-fastapi.md @@ -46,20 +46,6 @@ Sie können [mir (Sebastián Ramírez / `tiangolo`)](https://tiangolo.com), dem * [@tiangolo.com auf **Bluesky**](https://bsky.app/profile/tiangolo.com) * [@tiangolo auf **LinkedIn**](https://www.linkedin.com/in/tiangolo/). -## Anderen bei Fragen auf GitHub helfen { #help-others-with-questions-in-github } - -Sie können versuchen, anderen bei ihren Fragen in [GitHub-Diskussionen](https://github.com/fastapi/fastapi/discussions/categories/questions?discussions_q=category%3AQuestions+is%3Aunanswered) zu helfen. - -In vielen Fällen kennen Sie möglicherweise bereits die Antwort auf diese Fragen. 🤓 - -Wenn Sie vielen Menschen bei ihren Fragen helfen, werden Sie offizieller [FastAPI-Experte](fastapi-people.md#fastapi-experts). 🎉 - -Denken Sie daran, der wichtigste Punkt ist: Versuchen Sie, freundlich zu sein. 🤗 - -### So helfen { #how-to-help } - -Folgen Sie der [Anleitung, wie Sie helfen können](https://tiangolo.com/open-source/help/#help-others-with-questions-in-github) hier. - ## Fragen stellen { #ask-questions } Sie können im GitHub-Repository [eine neue Frage erstellen](https://github.com/fastapi/fastapi/discussions/new?category=questions), zum Beispiel um: @@ -69,7 +55,7 @@ Sie können im GitHub-Repository [eine neue Frage erstellen](https://github.com/ ## Am Chat teilnehmen { #join-the-chat } -Treten Sie dem 👥 [Discord-Chatserver](https://discord.gg/VQjSZaeJmf) 👥 bei und treffen Sie sich mit anderen Mitgliedern der FastAPI-Community. +Treten Sie dem 👥 [Discord-Chatserver](https://discord.com/invite/VQjSZaeJmf) 👥 bei und treffen Sie sich mit anderen Mitgliedern der FastAPI-Community. /// tip | Tipp @@ -86,3 +72,9 @@ Bedenken Sie, dass Sie in Chats, die „freie Konversation“ erlauben, leicht F Auf GitHub hilft Ihnen die Vorlage dabei, die richtige Frage zu stellen, sodass Sie leichter eine gute Antwort erhalten können, oder sogar das Problem selbst lösen, bevor Sie überhaupt fragen. Unterhaltungen in den Chat-Systemen sind auch nicht so leicht durchsuchbar wie auf GitHub, sie gehen verloren. + +## FastAPI Cloud ausprobieren { #try-fastapi-cloud } + +Die Hauptfinanzierung für FastAPI und Freunde kommt von [**FastAPI Cloud**](https://fastapicloud.com), einer Plattform, um FastAPI-Anwendungen auf einfache und schnelle Weise zu deployen, mit einem einzigen Kommando, `fastapi deploy`. + +FastAPI Cloud wird vom selben Team hinter FastAPI entwickelt. Sie können es ausprobieren und für Ihre Projekte in Betracht ziehen. diff --git a/docs/de/docs/history-design-future.md b/docs/de/docs/history-design-future.md index 5984274dba..41dd3dd69a 100644 --- a/docs/de/docs/history-design-future.md +++ b/docs/de/docs/history-design-future.md @@ -54,11 +54,11 @@ Alles auf eine Weise, die allen Entwicklern das beste Entwicklungserlebnis bot. ## Anforderungen { #requirements } -Nachdem ich mehrere Alternativen getestet hatte, entschied ich, dass ich [**Pydantic**](https://docs.pydantic.dev/) wegen seiner Vorteile verwenden würde. +Nachdem ich mehrere Alternativen getestet hatte, entschied ich, dass ich [**Pydantic**](https://pydantic.dev/docs/) wegen seiner Vorteile verwenden würde. Dann habe ich zu dessen Code beigetragen, um es vollständig mit JSON Schema kompatibel zu machen, und so verschiedene Möglichkeiten zum Definieren von einschränkenden Deklarationen (Constraints) zu unterstützen, und die Editorunterstützung (Typprüfungen, Codevervollständigung) zu verbessern, basierend auf den Tests in mehreren Editoren. -Während der Entwicklung habe ich auch zu [**Starlette**](https://www.starlette.dev/) beigetragen, die andere Schlüsselanforderung. +Während der Entwicklung habe ich auch zu [**Starlette**](https://starlette.dev/) beigetragen, die andere Schlüsselanforderung. ## Entwicklung { #development } diff --git a/docs/de/docs/how-to/custom-request-and-route.md b/docs/de/docs/how-to/custom-request-and-route.md index 60fe71ed3c..4add729381 100644 --- a/docs/de/docs/how-to/custom-request-and-route.md +++ b/docs/de/docs/how-to/custom-request-and-route.md @@ -1,6 +1,5 @@ # Benutzerdefinierte Request- und APIRoute-Klasse { #custom-request-and-apiroute-class } - In einigen Fällen möchten Sie möglicherweise die von den Klassen `Request` und `APIRoute` verwendete Logik überschreiben. Das kann insbesondere eine gute Alternative zur Logik in einer Middleware sein. @@ -67,7 +66,7 @@ Das `scope`-`dict` und die `receive`-Funktion sind beide Teil der ASGI-Spezifika Und diese beiden Dinge, `scope` und `receive`, werden benötigt, um eine neue `Request`-Instanz zu erstellen. -Um mehr über den `Request` zu erfahren, schauen Sie sich [Starlettes Dokumentation zu Requests](https://www.starlette.dev/requests/) an. +Um mehr über den `Request` zu erfahren, schauen Sie sich [Starlettes Dokumentation zu Requests](https://starlette.dev/requests/) an. /// diff --git a/docs/de/docs/how-to/extending-openapi.md b/docs/de/docs/how-to/extending-openapi.md index 23824117ed..f3dcfbb741 100644 --- a/docs/de/docs/how-to/extending-openapi.md +++ b/docs/de/docs/how-to/extending-openapi.md @@ -45,7 +45,7 @@ Der Parameter `summary` ist in OpenAPI 3.1.0 und höher verfügbar und wird von Mithilfe der oben genannten Informationen können Sie dieselbe Hilfsfunktion verwenden, um das OpenAPI-Schema zu generieren und jeden benötigten Teil zu überschreiben. -Fügen wir beispielsweise [ReDocs OpenAPI-Erweiterung zum Einbinden eines benutzerdefinierten Logos](https://github.com/Rebilly/ReDoc/blob/master/docs/redoc-vendor-extensions.md#x-logo) hinzu. +Fügen wir beispielsweise [ReDocs OpenAPI-Erweiterung zum Einbinden eines benutzerdefinierten Logos](https://github.com/Redocly/redoc/blob/main/docs/redoc-vendor-extensions.md#x-logo) hinzu. ### Normales **FastAPI** { #normal-fastapi } diff --git a/docs/de/docs/how-to/graphql.md b/docs/de/docs/how-to/graphql.md index cb1891b633..7ffae3912a 100644 --- a/docs/de/docs/how-to/graphql.md +++ b/docs/de/docs/how-to/graphql.md @@ -22,7 +22,7 @@ Hier sind einige der **GraphQL**-Bibliotheken, die **ASGI**-Unterstützung haben * [Strawberry](https://strawberry.rocks/) 🍓 * Mit [Dokumentation für FastAPI](https://strawberry.rocks/docs/integrations/fastapi) * [Ariadne](https://ariadnegraphql.org/) - * Mit [Dokumentation für FastAPI](https://ariadnegraphql.org/docs/fastapi-integration) + * Mit [Dokumentation für FastAPI](https://ariadnegraphql.org/server/Integrations/fastapi-integration) * [Tartiflette](https://tartiflette.io/) * Mit [Tartiflette ASGI](https://tartiflette.github.io/tartiflette-asgi/) für ASGI-Integration * [Graphene](https://graphene-python.org/) diff --git a/docs/de/docs/how-to/migrate-from-pydantic-v1-to-pydantic-v2.md b/docs/de/docs/how-to/migrate-from-pydantic-v1-to-pydantic-v2.md index 5ea3b9561e..820cdb2e61 100644 --- a/docs/de/docs/how-to/migrate-from-pydantic-v1-to-pydantic-v2.md +++ b/docs/de/docs/how-to/migrate-from-pydantic-v1-to-pydantic-v2.md @@ -24,7 +24,7 @@ Wenn Sie eine ältere FastAPI-App mit Pydantic v1 haben, zeige ich Ihnen hier, w ## Offizieller Leitfaden { #official-guide } -Pydantic hat einen offiziellen [Migrationsleitfaden](https://docs.pydantic.dev/latest/migration/) von v1 zu v2. +Pydantic hat einen offiziellen [Migrationsleitfaden](https://pydantic.dev/docs/validation/latest/get-started/migration/) von v1 zu v2. Er enthält auch, was sich geändert hat, wie Validierungen nun korrekter und strikter sind, mögliche Stolpersteine, usw. diff --git a/docs/de/docs/index.md b/docs/de/docs/index.md index 9922e76218..e35b5f6f74 100644 --- a/docs/de/docs/index.md +++ b/docs/de/docs/index.md @@ -110,7 +110,7 @@ Seine Schlüssel-Merkmale sind:
-## FastAPI Conf { #fastapi-conf } - -[**FastAPI Conf ’26**](https://fastapiconf.com) findet am **28. Oktober 2026** in **Amsterdam, NL** statt. Alles über FastAPI, direkt von der Quelle. 🎤 - -FastAPI Conf ’26 - 28. Oktober 2026 - Amsterdam, NL - ## FastAPI Mini-Dokumentarfilm { #fastapi-mini-documentary } Es gibt einen [FastAPI-Mini-Dokumentarfilm](https://www.youtube.com/watch?v=mpR8ngthqiE), veröffentlicht Ende 2025, Sie können ihn online ansehen: @@ -175,28 +169,30 @@ Wenn Sie eine CLI FastAPI steht auf den Schultern von Giganten: -* [Starlette](https://www.starlette.dev/) für die Webanteile. -* [Pydantic](https://docs.pydantic.dev/) für die Datenanteile. +* [Starlette](https://starlette.dev/) für die Webanteile. +* [Pydantic](https://pydantic.dev/docs/) für die Datenanteile. ## Installation { #installation } -Erstellen und aktivieren Sie eine [virtuelle Umgebung](https://fastapi.tiangolo.com/de/virtual-environments/) und installieren Sie dann FastAPI: +Installieren Sie zuerst [`uv`](https://docs.astral.sh/uv/getting-started/installation/) und fügen Sie dann FastAPI zu Ihrem Projekt hinzu:
```console -$ pip install "fastapi[standard]" +$ uv add "fastapi[standard]" ---> 100% ```
-**Hinweis**: Stellen Sie sicher, dass Sie „fastapi[standard]“ in Anführungszeichen setzen, damit es in allen Terminals funktioniert. +**Hinweis**: Stellen Sie sicher, dass Sie `"fastapi[standard]"` in Anführungszeichen setzen, damit es in allen Terminals funktioniert. + +Wenn Sie lieber `pip` verwenden, installieren Sie `fastapi[standard]` innerhalb einer virtuellen Umgebung. Siehe die [Installationsanleitung](tutorial/#install-fastapi) für die alternativen Schritte. ## Beispiel { #example } -### Erstellung { #create-it } +### Erstellen { #create-it } Erstellen Sie eine Datei `main.py` mit: @@ -250,7 +246,7 @@ Starten Sie den Server mit:
```console -$ fastapi dev +$ uv run fastapi dev ╭────────── FastAPI CLI - Development mode ───────────╮ │ │ @@ -277,7 +273,7 @@ INFO: Application startup complete.
Über den Befehl fastapi dev ... -Der Befehl `fastapi dev` liest Ihre `main.py`-Datei, erkennt die **FastAPI**-App darin und startet einen Server mit [Uvicorn](https://www.uvicorn.dev). +Der Befehl `fastapi dev` liest Ihre `main.py`-Datei automatisch, erkennt die **FastAPI**-App darin und startet einen Server mit [Uvicorn](https://uvicorn.dev). Standardmäßig wird `fastapi dev` mit aktiviertem Auto-Reload für die lokale Entwicklung gestartet. @@ -314,7 +310,7 @@ Sie sehen die automatische interaktive API-Dokumentation (bereitgestellt von [Sw Und jetzt gehen Sie auf [http://127.0.0.1:8000/redoc](http://127.0.0.1:8000/redoc). -Sie sehen die alternative automatische Dokumentation (bereitgestellt von [ReDoc](https://github.com/Rebilly/ReDoc)): +Sie sehen die alternative automatische Dokumentation (bereitgestellt von [ReDoc](https://github.com/Redocly/redoc)): ![ReDoc](https://fastapi.tiangolo.com/img/index/index-02-redoc-simple.png) @@ -497,7 +493,7 @@ Optional können Sie Ihre FastAPI-App mit einem einzigen Befehl in die [FastAPI
```console -$ fastapi deploy +$ uv run fastapi deploy Deploying to FastAPI Cloud... @@ -540,7 +536,7 @@ FastAPI hängt von Pydantic und Starlette ab. ### `standard`-Abhängigkeiten { #standard-dependencies } -Wenn Sie FastAPI mit `pip install "fastapi[standard]"` installieren, kommt es mit der `standard`-Gruppe optionaler Abhängigkeiten: +Wenn Sie FastAPI mit `uv add "fastapi[standard]"` installieren, kommt es mit der `standard`-Gruppe optionaler Abhängigkeiten: Verwendet von Pydantic: @@ -554,17 +550,17 @@ Verwendet von Starlette: Verwendet von FastAPI: -* [`uvicorn`](https://www.uvicorn.dev) – für den Server, der Ihre Anwendung lädt und bereitstellt. Dies umfasst `uvicorn[standard]`, das einige Abhängigkeiten (z. B. `uvloop`) beinhaltet, die für eine Bereitstellung mit hoher Performanz benötigt werden. +* [`uvicorn`](https://uvicorn.dev) – für den Server, der Ihre Anwendung lädt und bereitstellt. Dies umfasst `uvicorn[standard]`, das einige Abhängigkeiten (z. B. `uvloop`) beinhaltet, die für eine Bereitstellung mit hoher Performanz benötigt werden. * `fastapi-cli[standard]` – um den `fastapi`-Befehl bereitzustellen. * Dies beinhaltet `fastapi-cloud-cli`, das es Ihnen ermöglicht, Ihre FastAPI-Anwendung auf [FastAPI Cloud](https://fastapicloud.com) bereitzustellen. ### Ohne `standard`-Abhängigkeiten { #without-standard-dependencies } -Wenn Sie die `standard` optionalen Abhängigkeiten nicht einschließen möchten, können Sie mit `pip install fastapi` statt `pip install "fastapi[standard]"` installieren. +Wenn Sie die `standard` optionalen Abhängigkeiten nicht einschließen möchten, können Sie mit `uv add fastapi` statt `uv add "fastapi[standard]"` installieren. ### Ohne `fastapi-cloud-cli` { #without-fastapi-cloud-cli } -Wenn Sie FastAPI mit den Standardabhängigkeiten, aber ohne das `fastapi-cloud-cli` installieren möchten, können Sie mit `pip install "fastapi[standard-no-fastapi-cloud-cli]"` installieren. +Wenn Sie FastAPI mit den Standardabhängigkeiten, aber ohne das `fastapi-cloud-cli` installieren möchten, können Sie mit `uv add "fastapi[standard-no-fastapi-cloud-cli]"` installieren. ### Zusätzliche optionale Abhängigkeiten { #additional-optional-dependencies } @@ -572,13 +568,13 @@ Es gibt einige zusätzliche Abhängigkeiten, die Sie installieren möchten. Zusätzliche optionale Pydantic-Abhängigkeiten: -* [`pydantic-settings`](https://docs.pydantic.dev/latest/usage/pydantic_settings/) – für die Verwaltung von Einstellungen. -* [`pydantic-extra-types`](https://docs.pydantic.dev/latest/usage/types/extra_types/extra_types/) – für zusätzliche Typen zur Verwendung mit Pydantic. +* [`pydantic-settings`](https://pydantic.dev/docs/validation/latest/concepts/pydantic_settings/) – für die Verwaltung von Einstellungen. +* [`pydantic-extra-types`](https://github.com/pydantic/pydantic-extra-types) – für zusätzliche Typen zur Verwendung mit Pydantic. Zusätzliche optionale FastAPI-Abhängigkeiten: * [`orjson`](https://github.com/ijl/orjson) – erforderlich, wenn Sie `ORJSONResponse` verwenden möchten. -* [`ujson`](https://github.com/esnme/ultrajson) – erforderlich, wenn Sie `UJSONResponse` verwenden möchten. +* [`ujson`](https://github.com/ultrajson/ultrajson) – erforderlich, wenn Sie `UJSONResponse` verwenden möchten. ## Lizenz { #license } diff --git a/docs/de/docs/project-generation.md b/docs/de/docs/project-generation.md index d2dbadbc92..6c518f62ac 100644 --- a/docs/de/docs/project-generation.md +++ b/docs/de/docs/project-generation.md @@ -4,13 +4,13 @@ Vorlagen, die normalerweise mit einem bestimmten Setup geliefert werden, sind so Sie können diese Vorlage verwenden, um loszulegen, da sie bereits vieles der anfänglichen Einrichtung, Sicherheit, Datenbank und einige API-Endpunkte für Sie eingerichtet hat. -GitHub-Repository: [Full Stack FastAPI Template](https://github.com/tiangolo/full-stack-fastapi-template) +GitHub-Repository: [Full Stack FastAPI Template](https://github.com/fastapi/full-stack-fastapi-template) ## Full Stack FastAPI Template – Technologiestack und Funktionen { #full-stack-fastapi-template-technology-stack-and-features } - ⚡ [**FastAPI**](https://fastapi.tiangolo.com/de) für die Python-Backend-API. - 🧰 [SQLModel](https://sqlmodel.tiangolo.com) für die Interaktion mit der Python-SQL-Datenbank (ORM). - - 🔍 [Pydantic](https://docs.pydantic.dev), verwendet von FastAPI, für die Datenvalidierung und das Einstellungsmanagement. + - 🔍 [Pydantic](https://pydantic.dev/docs/), verwendet von FastAPI, für die Datenvalidierung und das Einstellungsmanagement. - 💾 [PostgreSQL](https://www.postgresql.org) als SQL-Datenbank. - 🚀 [React](https://react.dev) für das Frontend. - 💃 Verwendung von TypeScript, Hooks, Vite und anderen Teilen eines modernen Frontend-Stacks. diff --git a/docs/de/docs/python-types.md b/docs/de/docs/python-types.md index a67b8b3094..2c52fccb39 100644 --- a/docs/de/docs/python-types.md +++ b/docs/de/docs/python-types.md @@ -269,7 +269,7 @@ Es bedeutet nicht: „`one_person` ist die **Klasse** namens `Person`“. ## Pydantic-Modelle { #pydantic-models } -[Pydantic](https://docs.pydantic.dev/) ist eine Python-Bibliothek für die Validierung von Daten. +[Pydantic](https://pydantic.dev/docs/) ist eine Python-Bibliothek für die Validierung von Daten. Sie deklarieren die „Form“ der Daten als Klassen mit Attributen. @@ -285,7 +285,7 @@ Ein Beispiel aus der offiziellen Pydantic-Dokumentation: /// note | Hinweis -Um mehr über [Pydantic zu erfahren, schauen Sie sich dessen Dokumentation an](https://docs.pydantic.dev/). +Um mehr über [Pydantic zu erfahren, schauen Sie sich dessen Dokumentation an](https://pydantic.dev/docs/). /// diff --git a/docs/de/docs/tutorial/background-tasks.md b/docs/de/docs/tutorial/background-tasks.md index 7d6c35a1c0..ffd5732e77 100644 --- a/docs/de/docs/tutorial/background-tasks.md +++ b/docs/de/docs/tutorial/background-tasks.md @@ -63,7 +63,7 @@ Und dann schreibt ein weiterer Hintergrundtask, der in der *Pfadoperation-Funkti ## Technische Details { #technical-details } -Die Klasse `BackgroundTasks` stammt direkt von [`starlette.background`](https://www.starlette.dev/background/). +Die Klasse `BackgroundTasks` stammt direkt von [`starlette.background`](https://starlette.dev/background/). Sie wird direkt in FastAPI importiert/inkludiert, sodass Sie sie von `fastapi` importieren können und vermeiden, versehentlich das alternative `BackgroundTask` (ohne das `s` am Ende) von `starlette.background` zu importieren. @@ -71,7 +71,7 @@ Indem Sie nur `BackgroundTasks` (und nicht `BackgroundTask`) verwenden, ist es d Es ist immer noch möglich, `BackgroundTask` allein in FastAPI zu verwenden, aber Sie müssen das Objekt in Ihrem Code erstellen und eine Starlette-`Response` zurückgeben, die es enthält. -Weitere Details finden Sie in [Starlettes offizieller Dokumentation für Hintergrundtasks](https://www.starlette.dev/background/). +Weitere Details finden Sie in [Starlettes offizieller Dokumentation für Hintergrundtasks](https://starlette.dev/background/). ## Vorbehalt { #caveat } diff --git a/docs/de/docs/tutorial/bigger-applications.md b/docs/de/docs/tutorial/bigger-applications.md index 119f3e8c02..be4a5f4df4 100644 --- a/docs/de/docs/tutorial/bigger-applications.md +++ b/docs/de/docs/tutorial/bigger-applications.md @@ -487,7 +487,7 @@ Auf diese Weise weiß der `fastapi`-Befehl, wo er Ihre App findet. Sie könnten auch den Pfad an den Befehl übergeben, etwa: ```console -$ fastapi dev app/main.py +$ uv run fastapi dev app/main.py ``` Aber dann müssten Sie sich jedes Mal, wenn Sie den `fastapi`-Befehl aufrufen, an den korrekten Pfad erinnern. @@ -503,7 +503,7 @@ Führen Sie nun Ihre App aus:
```console -$ fastapi dev +$ uv run fastapi dev INFO: Uvicorn running on http://127.0.0.1:8000 (Press CTRL+C to quit) ``` diff --git a/docs/de/docs/tutorial/body-nested-models.md b/docs/de/docs/tutorial/body-nested-models.md index f95b65e574..b12bb765f6 100644 --- a/docs/de/docs/tutorial/body-nested-models.md +++ b/docs/de/docs/tutorial/body-nested-models.md @@ -96,7 +96,7 @@ Wiederum, nur mit dieser Deklaration erhalten Sie mit **FastAPI**: Abgesehen von normalen einfachen Typen wie `str`, `int`, `float`, usw. können Sie komplexere einfache Typen verwenden, die von `str` erben. -Um alle Optionen kennenzulernen, die Sie haben, schauen Sie sich [Pydantics Typübersicht](https://docs.pydantic.dev/latest/concepts/types/) an. Sie werden einige Beispiele im nächsten Kapitel kennenlernen. +Um alle Optionen kennenzulernen, die Sie haben, schauen Sie sich [Pydantics Typübersicht](https://pydantic.dev/docs/validation/latest/concepts/types/) an. Sie werden einige Beispiele im nächsten Kapitel kennenlernen. Zum Beispiel, da wir im `Image`-Modell ein Feld `url` haben, können wir deklarieren, dass das eine Instanz von Pydantics `HttpUrl` sein soll, anstelle eines `str`: diff --git a/docs/de/docs/tutorial/body.md b/docs/de/docs/tutorial/body.md index 6ced5f732e..847762dd19 100644 --- a/docs/de/docs/tutorial/body.md +++ b/docs/de/docs/tutorial/body.md @@ -6,7 +6,7 @@ Ein **Request**body sind Daten, die vom Clie Ihre API muss fast immer einen **Response**body senden. Aber Clients müssen nicht unbedingt immer **Requestbodys** senden, manchmal fordern sie nur einen Pfad an, vielleicht mit einigen Query-Parametern, aber senden keinen Body. -Um einen **Request**body zu deklarieren, verwenden Sie [Pydantic](https://docs.pydantic.dev/)-Modelle mit all deren Fähigkeiten und Vorzügen. +Um einen **Request**body zu deklarieren, verwenden Sie [Pydantic](https://pydantic.dev/docs/)-Modelle mit all deren Fähigkeiten und Vorzügen. /// note | Hinweis diff --git a/docs/de/docs/tutorial/debugging.md b/docs/de/docs/tutorial/debugging.md index f7949d027d..d764fed698 100644 --- a/docs/de/docs/tutorial/debugging.md +++ b/docs/de/docs/tutorial/debugging.md @@ -15,7 +15,7 @@ Der Hauptzweck von `__name__ == "__main__"` ist, dass Code ausgeführt wird, wen
```console -$ python myapp.py +$ uv run python myapp.py ```
@@ -35,7 +35,7 @@ Wenn Sie sie mit folgendem Befehl ausführen:
```console -$ python myapp.py +$ uv run python myapp.py ```
@@ -88,7 +88,7 @@ Zum Beispiel können Sie in Visual Studio Code: * Zum „Debug“-Panel gehen. * „Konfiguration hinzufügen ...“ auswählen. -* „Python“ auswählen. +* „Python“ auswählen * Den Debugger mit der Option „`Python: Current File (Integrated Terminal)`“ ausführen. Der Server wird dann mit Ihrem **FastAPI**-Code gestartet, an Ihren Haltepunkten angehalten, usw. diff --git a/docs/de/docs/tutorial/extra-data-types.md b/docs/de/docs/tutorial/extra-data-types.md index d1feab1a0a..38a6f27e7d 100644 --- a/docs/de/docs/tutorial/extra-data-types.md +++ b/docs/de/docs/tutorial/extra-data-types.md @@ -1,6 +1,5 @@ # Zusätzliche Datentypen { #extra-data-types } - Bisher haben Sie gängige Datentypen verwendet, wie zum Beispiel: * `int` @@ -37,7 +36,7 @@ Hier sind einige der zusätzlichen Datentypen, die Sie verwenden können: * `datetime.timedelta`: * Ein Python-`datetime.timedelta`. * Wird in Requests und Responses als `float` der Gesamtsekunden dargestellt. - * Pydantic ermöglicht auch die Darstellung als „ISO 8601 Zeitdifferenz-Kodierung“, [siehe die Dokumentation für weitere Informationen](https://docs.pydantic.dev/latest/concepts/serialization/#custom-serializers). + * Pydantic ermöglicht auch die Darstellung als „ISO 8601 Zeitdifferenz-Kodierung“, [siehe die Dokumentation für weitere Informationen](https://pydantic.dev/docs/validation/latest/concepts/serialization/#custom-serializers). * `frozenset`: * Wird in Requests und Responses wie ein `set` behandelt: * Bei Requests wird eine Liste gelesen, Duplikate entfernt und in ein `set` umgewandelt. @@ -50,7 +49,7 @@ Hier sind einige der zusätzlichen Datentypen, die Sie verwenden können: * `Decimal`: * Standard-Python-`Decimal`. * In Requests und Responses wird es wie ein `float` behandelt. -* Sie können alle gültigen Pydantic-Datentypen hier überprüfen: [Pydantic-Datentypen](https://docs.pydantic.dev/latest/usage/types/types/). +* Sie können alle gültigen Pydantic-Datentypen hier überprüfen: [Pydantic-Datentypen](https://pydantic.dev/docs/validation/latest/concepts/types/). ## Beispiel { #example } diff --git a/docs/de/docs/tutorial/extra-models.md b/docs/de/docs/tutorial/extra-models.md index 8e0b094ad5..4e8bc24716 100644 --- a/docs/de/docs/tutorial/extra-models.md +++ b/docs/de/docs/tutorial/extra-models.md @@ -166,7 +166,7 @@ Um das zu tun, verwenden Sie den Standard-Python-Typhinweis [`typing.Union`](htt /// note | Hinweis -Wenn Sie eine [`Union`](https://docs.pydantic.dev/latest/concepts/types/#unions) definieren, listen Sie den spezifischeren Typ zuerst auf, gefolgt vom weniger spezifischen Typ. Im Beispiel unten steht `PlaneItem` vor `CarItem` in `Union[PlaneItem, CarItem]`. +Wenn Sie eine [`Union`](https://pydantic.dev/docs/validation/latest/concepts/unions/) definieren, listen Sie den spezifischsten Typ zuerst auf, gefolgt vom weniger spezifischen Typ. Im folgenden Beispiel kommt der spezifischere `PlaneItem` vor `CarItem` in `Union[PlaneItem, CarItem]`. /// diff --git a/docs/de/docs/tutorial/first-steps.md b/docs/de/docs/tutorial/first-steps.md index 8e97b5b5d9..04daf416ef 100644 --- a/docs/de/docs/tutorial/first-steps.md +++ b/docs/de/docs/tutorial/first-steps.md @@ -6,12 +6,18 @@ Die einfachste FastAPI-Datei könnte wie folgt aussehen: Kopieren Sie das in eine Datei `main.py`. +/// tip | Tipp + +FastAPI hat eine [offizielle Erweiterung für VS Code](https://marketplace.visualstudio.com/items?itemName=FastAPILabs.fastapi-vscode) (und Cursor), die viele Features bereitstellt, darunter einen Pfadoperation-Explorer, Pfadoperation-Suche, CodeLens-Navigation in Tests (Sprung zur Definition aus Tests) sowie Deployment und Logs von FastAPI Cloud, alles aus Ihrem Editor heraus. + +/// + Starten Sie den Live-Server:
```console -$ fastapi dev +$ uv run fastapi dev FastAPI Starting development server 🚀 @@ -78,7 +84,7 @@ Sie werden die automatisch erzeugte, interaktive API-Dokumentation sehen (bereit Gehen Sie nun auf [http://127.0.0.1:8000/redoc](http://127.0.0.1:8000/redoc). -Dort sehen Sie die alternative, automatische Dokumentation (bereitgestellt durch [ReDoc](https://github.com/Rebilly/ReDoc)): +Dort sehen Sie die alternative, automatische Dokumentation (bereitgestellt durch [ReDoc](https://github.com/Redocly/redoc)): ![ReDoc](https://fastapi.tiangolo.com/img/index/index-02-redoc-simple.png) @@ -185,13 +191,13 @@ from backend.main import app Sie können auch den Dateipfad an den Befehl `fastapi dev` übergeben, und er wird das zu verwendende FastAPI-App-Objekt erraten: ```console -$ fastapi dev main.py +$ uv run fastapi dev main.py ``` Oder Sie können die Option `--entrypoint` an den Befehl `fastapi dev` übergeben: ```console -$ fastapi dev --entrypoint main:app +$ uv run fastapi dev --entrypoint main:app ``` Aber Sie müssten sich daran erinnern, bei jedem Aufruf des `fastapi`-Befehls den korrekten Pfad\entrypoint zu übergeben. @@ -205,7 +211,7 @@ Sie können optional Ihre FastAPI-App in der [FastAPI Cloud](https://fastapiclou
```console -$ fastapi deploy +$ uv run fastapi deploy Deploying to FastAPI Cloud... @@ -218,7 +224,7 @@ Deploying to FastAPI Cloud... Das CLI erkennt Ihre FastAPI-Anwendung automatisch und deployt sie in die Cloud. Wenn Sie nicht eingeloggt sind, wird Ihr Browser geöffnet, um die Authentifizierung abzuschließen. -Das war's! Jetzt können Sie Ihre App unter dieser URL aufrufen. ✨ +Das war’s! Jetzt können Sie Ihre App unter dieser URL aufrufen. ✨ ## Zusammenfassung, Schritt für Schritt { #recap-step-by-step } @@ -232,7 +238,7 @@ Das war's! Jetzt können Sie Ihre App unter dieser URL aufrufen. ✨ `FastAPI` ist eine Klasse, die direkt von `Starlette` erbt. -Sie können alle [Starlette](https://www.starlette.dev/)-Funktionalitäten auch mit `FastAPI` nutzen. +Sie können alle [Starlette](https://starlette.dev/)-Funktionalitäten auch mit `FastAPI` nutzen. /// @@ -349,7 +355,7 @@ Es steht Ihnen frei, jede Operation (HTTP-Methode) so zu verwenden, wie Sie es m Die hier aufgeführten Informationen dienen als Leitfaden und sind nicht verbindlich. -Wenn Sie beispielsweise GraphQL verwenden, führen Sie normalerweise alle Aktionen nur mit „POST“-Operationen durch. +Wenn Sie beispielsweise GraphQL verwenden, führen Sie normalerweise alle Aktionen nur mit `POST`-Operationen durch. /// diff --git a/docs/de/docs/tutorial/frontend.md b/docs/de/docs/tutorial/frontend.md index 55213e550d..91b7119f6b 100644 --- a/docs/de/docs/tutorial/frontend.md +++ b/docs/de/docs/tutorial/frontend.md @@ -52,7 +52,7 @@ Verwenden Sie dafür `fallback="index.html"`: {* ../../docs_src/frontend/tutorial002_py310.py hl[5] *} -**FastAPI** verwendet diesen Fallback nur für `GET`- und `HEAD`-Requests, die wie Browser-Navigation aussehen. Fehlende Dateien wie JavaScript, CSS und Bilder geben weiterhin `404` zurück. +**FastAPI** verwendet diesen Fallback nur für `GET`- und `HEAD`-Requests, die explizit HTML mit `Accept: text/html` oder `Accept: application/xhtml+xml` akzeptieren, wie Browser-Navigationsrequests es normalerweise tun. Fehlende Dateien wie JavaScript, CSS und Bilder geben weiterhin `404` zurück. Requests mit anderen Methoden, wie `POST` oder `PUT`, an Pfade, die nur zum Frontend-Fallback passen, geben ebenfalls `404` zurück. Reguläre **FastAPI**-*Pfadoperationen* haben weiterhin eine höhere Priorität als Frontend-Routen. @@ -106,9 +106,13 @@ Dann geben fehlende Frontend-Pfade das normale `404` zurück. ## Verzeichnis prüfen { #check-directory } -Standardmäßig prüft `app.frontend()`, dass das Verzeichnis existiert, wenn die App erstellt wird. +Standardmäßig verwendet `app.frontend()` `check_dir="auto"`. -Das hilft, Konfigurationsfehler früh zu erkennen. Wenn zum Beispiel das Output-Verzeichnis des Frontend-Builds fehlt, löst **FastAPI** beim Startup einen Fehler aus. +Wenn die `FASTAPI_ENV`-Umgebungsvariable auf `development` gesetzt ist, zeigt **FastAPI** nur eine Warnung an, wenn das Output-Verzeichnis des Frontend-Builds fehlt. Der [`fastapi dev`-Befehl](https://github.com/fastapi/fastapi-cli#fastapi-dev) setzt diese Umgebungsvariable für Sie, wenn sie nicht bereits gesetzt ist. Dadurch können Sie während der Entwicklung das Backend starten, bevor Sie das Frontend bauen oder starten. + +In jeder anderen Umgebung löst **FastAPI** einen Fehler aus, wenn die App erstellt wird. Das hilft, Konfigurationsfehler früh zu erkennen, bevor eine App ohne ihre Frontend-Dateien deployt wird. + +Sie können auch `check_dir=True` setzen, um das Verzeichnis immer zu prüfen, wenn die App erstellt wird. Wenn Ihre Frontend-Dateien später erstellt werden, zum Beispiel durch einen separaten Build-Schritt, nachdem das App-Objekt erstellt wurde, setzen Sie `check_dir=False`: @@ -132,6 +136,8 @@ Frontend-Responses laufen innerhalb der normalen **FastAPI**-Anwendung, daher gi Abhängigkeiten aus der App, aus einem `APIRouter` und aus `include_router()` gelten ebenfalls für Frontend-Responses. Das kann nützlich sein, um ein Frontend mit Cookie-Authentifizierung oder Ähnlichem zu schützen. +Abhängigkeiten können auch Response-Header ändern und Hintergrundtasks hinzufügen, wie bei normalen *Pfadoperationen*. + ## Nur statischer Build-Output { #static-build-output-only } `app.frontend()` liefert Dateien aus, die bereits von Ihrem Frontend-Build generiert wurden. diff --git a/docs/de/docs/tutorial/handling-errors.md b/docs/de/docs/tutorial/handling-errors.md index 17e2767fef..6fdc2fcdcb 100644 --- a/docs/de/docs/tutorial/handling-errors.md +++ b/docs/de/docs/tutorial/handling-errors.md @@ -81,7 +81,7 @@ Aber falls Sie es für ein fortgeschrittenes Szenario benötigen, können Sie be ## Benutzerdefinierte Exceptionhandler installieren { #install-custom-exception-handlers } -Sie können benutzerdefinierte Exceptionhandler mit [denselben Exception-Werkzeugen von Starlette](https://www.starlette.dev/exceptions/) hinzufügen. +Sie können benutzerdefinierte Exceptionhandler mit [denselben Exception-Werkzeugen von Starlette](https://starlette.dev/exceptions/) hinzufügen. Angenommen, Sie haben eine benutzerdefinierte Exception `UnicornException`, die Sie (oder eine Bibliothek, die Sie verwenden) `raise`n könnten. diff --git a/docs/de/docs/tutorial/index.md b/docs/de/docs/tutorial/index.md index c0f25c916d..f19dfa0069 100644 --- a/docs/de/docs/tutorial/index.md +++ b/docs/de/docs/tutorial/index.md @@ -1,22 +1,21 @@ # Tutorial – Benutzerhandbuch { #tutorial-user-guide } +This tutorial shows you how to use **FastAPI** with most of its features, step by step. -Dieses Tutorial zeigt Ihnen Schritt für Schritt, wie Sie **FastAPI** mit den meisten seiner Funktionen verwenden können. +Each section gradually builds on the previous ones, but it's structured to separate topics, so that you can go directly to any specific one to solve your specific API needs. -Jeder Abschnitt baut schrittweise auf den vorhergehenden auf, ist jedoch in einzelne Themen gegliedert, sodass Sie direkt zu einem bestimmten Thema übergehen können, um Ihre spezifischen API-Anforderungen zu lösen. - -Es ist auch so gestaltet, dass es als zukünftige Referenz dient, sodass Sie jederzeit zurückkommen und genau das sehen, was Sie benötigen. +It is also built to work as a future reference so you can come back and see exactly what you need. ## Den Code ausführen { #run-the-code } Alle Codeblöcke können kopiert und direkt verwendet werden (es sind tatsächlich getestete Python-Dateien). -Um eines der Beispiele auszuführen, kopieren Sie den Code in eine Datei `main.py`, und starten Sie `fastapi dev`: +Um eines der Beispiele auszuführen, kopieren Sie den Code in eine Datei `main.py`, und starten Sie `fastapi dev` mit `uv run`:
```console -$ fastapi dev +$ uv run fastapi dev FastAPI Starting development server 🚀 @@ -61,36 +60,76 @@ Die Verwendung in Ihrem eigenen Editor zeigt Ihnen die Vorteile von FastAPI am b ## FastAPI installieren { #install-fastapi } -Der erste Schritt besteht darin, FastAPI zu installieren. +Der erste Schritt besteht darin, Ihr Projekt einzurichten und FastAPI hinzuzufügen. -Stellen Sie sicher, dass Sie eine [virtuelle Umgebung](../virtual-environments.md) erstellen, sie aktivieren und dann **FastAPI installieren**: +Installieren Sie [`uv`](https://docs.astral.sh/uv/getting-started/installation/), erstellen Sie dann ein Projekt und fügen Sie FastAPI hinzu:
```console -$ pip install "fastapi[standard]" +$ uv init awesome-project --bare +$ cd awesome-project +$ uv add "fastapi[standard]" ---> 100% ```
-/// note | Hinweis +`uv add` erstellt die virtuelle Umgebung des Projekts in `.venv`, fügt FastAPI zu `pyproject.toml` hinzu und erstellt `uv.lock`, sodass dieselben Packageversionen später installiert werden können. + +/// details | Was diese Befehle tun + +* `uv init`: Erstellt ein neues Python-Projekt. +* `awesome-project`: Erstellt das Projekt in einem neuen Verzeichnis mit diesem Namen. +* `--bare`: Erstellt nur die minimale Datei `pyproject.toml`, ohne eine Beispiel-`main.py`, `README.md` oder andere Dateien zu generieren. Sie erstellen die Anwendungsdateien in den nächsten Schritten dieses Tutorials selbst. + +Dann betritt `cd awesome-project` das neue Projektverzeichnis, bevor FastAPI hinzugefügt wird. + +`uv` verwendet eine kompatible Python-Version, die bereits auf Ihrem System installiert ist, oder lädt bei Bedarf eine herunter. -Wenn Sie mit `pip install "fastapi[standard]"` installieren, werden einige optionale Standard-Abhängigkeiten mit installiert, einschließlich `fastapi-cloud-cli`, welches Ihnen das Deployment in der [FastAPI Cloud](https://fastapicloud.com) ermöglicht. +Wenn Sie `uv add` ausführen, wählt es kompatible Versionen von FastAPI und aller Packages aus, von denen FastAPI abhängt. Es zeichnet die exakten Versionen in `uv.lock` auf, wodurch es möglich wird, dieselben Packageversionen später auf einem anderen Computer oder beim Deployen der Anwendung zu installieren. -Wenn Sie diese optionalen Abhängigkeiten nicht haben möchten, können Sie stattdessen `pip install fastapi` installieren. +Das Erstellen oder Aktualisieren dieser Datei wird [**Locking** der Projektabhängigkeiten](https://docs.astral.sh/uv/concepts/projects/sync/) genannt. `uv` erledigt dies automatisch, wenn Sie ein Package hinzufügen. -Wenn Sie die Standard-Abhängigkeiten, aber ohne das `fastapi-cloud-cli` installieren möchten, können Sie mit `pip install "fastapi[standard-no-fastapi-cloud-cli]"` installieren. +/// + +/// details | FastAPI-Installationsoptionen + +Wenn Sie mit `uv add "fastapi[standard]"` installieren, werden einige optionale Standard-Abhängigkeiten mit installiert, einschließlich `fastapi-cloud-cli`, welches Ihnen das Deployment in der [FastAPI Cloud](https://fastapicloud.com) ermöglicht. + +Wenn Sie diese optionalen Abhängigkeiten nicht haben möchten, können Sie stattdessen `uv add fastapi` installieren. + +Wenn Sie die Standard-Abhängigkeiten, aber ohne das `fastapi-cloud-cli` installieren möchten, können Sie mit `uv add "fastapi[standard-no-fastapi-cloud-cli]"` installieren. /// -/// tip | Tipp +/// details | Stattdessen `pip` verwenden + +Wenn Sie es bevorzugen, eine virtuelle Umgebung und Packages manuell zu verwalten, erstellen und aktivieren Sie eine virtuelle Umgebung und installieren Sie dann FastAPI mit `pip install "fastapi[standard]"`. -FastAPI hat eine [offizielle Erweiterung für VS Code](https://marketplace.visualstudio.com/items?itemName=FastAPILabs.fastapi-vscode) (und Cursor), die viele Funktionen bereitstellt, darunter einen Pfadoperation-Explorer, eine Pfadoperation-Suche, CodeLens-Navigation in Tests (zur Definition aus Tests springen) sowie FastAPI-Cloud-Deployment und Logs – alles direkt aus Ihrem Editor. +Lesen Sie den [Leitfaden zu virtuellen Umgebungen](https://tiangolo.com/guides/virtual-environments/) für die detaillierten Schritte. /// +## Skills für AI-Agenten { #ai-agent-skills } + +FastAPI enthält einen offiziellen Skill für AI-Coding-Agenten. Er ist mit dem Package gebündelt, sodass seine Anleitung mit der in Ihrem Projekt installierten FastAPI-Version übereinstimmt und aktualisiert wird, wenn Sie FastAPI aktualisieren. + +Nachdem Sie FastAPI in Ihrem Projekt installiert haben, können Sie den Skill mit Library Skills installieren: + +```bash +uvx library-skills +``` + +/// note | Hinweis + +`uvx` ist ein Alias für `uv tool run`. Es führt Library Skills in einer temporären, isolierten Umgebung aus, während Library Skills die in Ihrem Projekt installierten Packages scannt. + +/// + +Der Skill ist kompatibel mit Codex, Claude Code, Cursor, GitHub Copilot, Gemini CLI, Pi, OpenCode und den meisten anderen Coding-Agenten. Wählen Sie bei Claude Code `.claude/skills`, wenn Sie gefragt werden, wo der Skill installiert werden soll. + ## Handbuch für fortgeschrittene Benutzer { #advanced-user-guide } Es gibt auch ein **Handbuch für fortgeschrittene Benutzer**, das Sie nach diesem **Tutorial – Benutzerhandbuch** lesen können. diff --git a/docs/de/docs/tutorial/middleware.md b/docs/de/docs/tutorial/middleware.md index 0e8da4dcef..c1647735ea 100644 --- a/docs/de/docs/tutorial/middleware.md +++ b/docs/de/docs/tutorial/middleware.md @@ -5,10 +5,10 @@ Sie können Middleware zu **FastAPI**-Anwendungen hinzufügen. Eine „Middleware“ ist eine Funktion, die mit jedem **Request** arbeitet, bevor er von einer bestimmten *Pfadoperation* verarbeitet wird. Und auch mit jeder **Response**, bevor sie zurückgegeben wird. * Sie nimmt jeden **Request** entgegen, der an Ihre Anwendung gesendet wird. -* Sie kann dann etwas mit diesem **Request** tun oder beliebigen Code ausführen. +* Sie kann dann etwas mit diesem **Request** tun oder jeden notwendigen Code ausführen. * Dann gibt sie den **Request** zur Verarbeitung durch den Rest der Anwendung weiter (durch eine bestimmte *Pfadoperation*). * Sie nimmt dann die **Response** entgegen, die von der Anwendung generiert wurde (durch eine bestimmte *Pfadoperation*). -* Sie kann etwas mit dieser **Response** tun oder beliebigen Code ausführen. +* Sie kann etwas mit dieser **Response** tun oder jeden notwendigen Code ausführen. * Dann gibt sie die **Response** zurück. /// note | Technische Details @@ -28,8 +28,8 @@ Die Middleware-Funktion erhält: * Den `request`. * Eine Funktion `call_next`, die den `request` als Parameter erhält. * Diese Funktion gibt den `request` an die entsprechende *Pfadoperation* weiter. - * Dann gibt es die von der entsprechenden *Pfadoperation* generierte `response` zurück. -* Sie können die `response` dann weiter modifizieren, bevor Sie sie zurückgeben. + * Dann gibt sie die von der entsprechenden *Pfadoperation* generierte `response` zurück. +* Sie können die `response` dann weiter ändern, bevor Sie sie zurückgeben. {* ../../docs_src/middleware/tutorial001_py310.py hl[8:9,11,14] *} @@ -37,7 +37,7 @@ Die Middleware-Funktion erhält: Beachten Sie, dass benutzerdefinierte proprietäre Header hinzugefügt werden können [unter Verwendung des `X-`-Präfixes](https://developer.mozilla.org/en-US/docs/Web/HTTP/Headers). -Wenn Sie jedoch benutzerdefinierte Header haben, die ein Client in einem Browser sehen soll, müssen Sie sie zu Ihrer CORS-Konfiguration ([CORS (Cross-Origin Resource Sharing)](cors.md)) hinzufügen, indem Sie den Parameter `expose_headers` verwenden, der in [Starlettes CORS-Dokumentation](https://www.starlette.dev/middleware/#corsmiddleware) dokumentiert ist. +Wenn Sie jedoch benutzerdefinierte Header haben, die ein Client in einem Browser sehen soll, müssen Sie sie zu Ihren CORS-Konfigurationen ([CORS (Cross-Origin Resource Sharing)](cors.md)) hinzufügen, indem Sie den Parameter `expose_headers` verwenden, der in [Starlettes CORS-Dokumentation](https://starlette.dev/middleware/#corsmiddleware) dokumentiert ist. /// @@ -67,7 +67,7 @@ Hier verwenden wir [`time.perf_counter()`](https://docs.python.org/3/library/tim ## Ausführungsreihenfolge bei mehreren Middlewares { #multiple-middleware-execution-order } -Wenn Sie mehrere Middlewares hinzufügen, entweder mit dem `@app.middleware()` Dekorator oder der Methode `app.add_middleware()`, umschließt jede neue Middleware die Anwendung und bildet einen Stapel. Die zuletzt hinzugefügte Middleware ist die *äußerste*, und die erste ist die *innerste*. +Wenn Sie mehrere Middlewares hinzufügen, entweder mit dem `@app.middleware()`-Dekorator oder der Methode `app.add_middleware()`, wrappt jede neue Middleware die Anwendung und bildet einen Stapel. Die zuletzt hinzugefügte Middleware ist die *äußerste*, und die erste ist die *innerste*. Auf dem Requestpfad läuft die *äußerste* Middleware zuerst. @@ -92,4 +92,4 @@ Dieses Stapelverhalten stellt sicher, dass Middlewares in einer vorhersehbaren u Sie können später mehr über andere Middlewares im [Handbuch für fortgeschrittene Benutzer: Fortgeschrittene Middleware](../advanced/middleware.md) lesen. -In der nächsten Sektion erfahren Sie, wie Sie CORS mit einer Middleware behandeln können. +In der nächsten Sektion erfahren Sie, wie Sie CORS mit einer Middleware behandeln können. diff --git a/docs/de/docs/tutorial/path-params.md b/docs/de/docs/tutorial/path-params.md index d462a74075..9ec82805c8 100644 --- a/docs/de/docs/tutorial/path-params.md +++ b/docs/de/docs/tutorial/path-params.md @@ -6,7 +6,7 @@ Sie können Pfad-„Parameter“ oder -„Variablen“ mit der gleichen Syntax d Der Wert des Pfad-Parameters `item_id` wird Ihrer Funktion als das Argument `item_id` übergeben. -Wenn Sie dieses Beispiel ausführen und auf [http://127.0.0.1:8000/items/foo](http://127.0.0.1:8000/items/foo) gehen, sehen Sie als Response: +Wenn Sie also dieses Beispiel ausführen und auf [http://127.0.0.1:8000/items/foo](http://127.0.0.1:8000/items/foo) gehen, sehen Sie als Response: ```JSON {"item_id":"foo"} @@ -14,11 +14,11 @@ Wenn Sie dieses Beispiel ausführen und auf [http://127.0.0.1:8000/items/foo](ht ## Pfad-Parameter mit Typen { #path-parameters-with-types } -Sie können den Typ eines Pfad-Parameters in der Argumentliste der Funktion deklarieren, mit Standard-Python-Typannotationen: +Sie können den Typ eines Pfad-Parameters in der Funktion deklarieren, mit Standard-Python-Typannotationen: {* ../../docs_src/path_params/tutorial002_py310.py hl[7] *} -In diesem Fall wird `item_id` als `int` deklariert, also als Ganzzahl. +In diesem Fall wird `item_id` als `int` deklariert. /// tip | Tipp @@ -36,9 +36,9 @@ Wenn Sie dieses Beispiel ausführen und Ihren Browser unter [http://127.0.0.1:80 /// tip | Tipp -Beachten Sie, dass der Wert, den Ihre Funktion erhält und zurückgibt, die Zahl `3` ist, also ein `int`. Nicht der String „3“, also ein `str`. +Beachten Sie, dass der Wert, den Ihre Funktion erhalten (und zurückgegeben) hat, `3` ist, als Python-`int`, nicht als String `"3"`. -Sprich, mit dieser Typdeklaration wird **FastAPI** den „parsen“. +Sprich, mit dieser Typdeklaration bietet **FastAPI** Ihnen automatisches Request-„Parsing“. /// @@ -62,9 +62,9 @@ Wenn Sie aber im Browser [http://127.0.0.1:8000/items/foo](http://127.0.0.1:8000 } ``` -Der Pfad-Parameter `item_id` hatte den Wert „foo“, was kein `int` ist. +denn der Pfad-Parameter `item_id` hatte den Wert `"foo"`, was kein `int` ist. -Die gleiche Fehlermeldung würde angezeigt werden, wenn Sie ein `float` (also eine Kommazahl) statt eines `int`s übergeben würden, wie etwa in: [http://127.0.0.1:8000/items/4.2](http://127.0.0.1:8000/items/4.2) +Die gleiche Fehlermeldung würde angezeigt werden, wenn Sie ein `float` statt eines `int`s übergeben würden, wie etwa in: [http://127.0.0.1:8000/items/4.2](http://127.0.0.1:8000/items/4.2) /// tip | Tipp @@ -78,101 +78,101 @@ Das ist unglaublich hilfreich, wenn Sie Code entwickeln und debuggen, welcher mi ## Dokumentation { #documentation } -Wenn Sie die Seite [http://127.0.0.1:8000/docs](http://127.0.0.1:8000/docs) in Ihrem Browser öffnen, sehen Sie eine automatische, interaktive API-Dokumentation: +Und wenn Sie die Seite [http://127.0.0.1:8000/docs](http://127.0.0.1:8000/docs) in Ihrem Browser öffnen, sehen Sie eine automatische, interaktive API-Dokumentation wie: /// tip | Tipp -Wiederum, mit dieser gleichen Python-Typdeklaration gibt Ihnen **FastAPI** eine automatische, interaktive Dokumentation (verwendet die Swagger-Benutzeroberfläche). +Wiederum, nur mit dieser gleichen Python-Typdeklaration gibt Ihnen **FastAPI** eine automatische, interaktive Dokumentation (integriert Swagger UI). Beachten Sie, dass der Pfad-Parameter dort als Ganzzahl deklariert ist. /// -## Nützliche Standards, alternative Dokumentation { #standards-based-benefits-alternative-documentation } +## Standardbasierte Vorteile, alternative Dokumentation { #standards-based-benefits-alternative-documentation } -Und weil das generierte Schema vom [OpenAPI](https://github.com/OAI/OpenAPI-Specification/blob/master/versions/3.1.0.md)-Standard kommt, gibt es viele kompatible Tools. +Und weil das generierte Schema vom [OpenAPI](https://github.com/OAI/OpenAPI-Specification/blob/main/versions/3.1.0.md)-Standard kommt, gibt es viele kompatible Tools. -Zum Beispiel bietet **FastAPI** selbst eine alternative API-Dokumentation (verwendet ReDoc), welche Sie unter [http://127.0.0.1:8000/redoc](http://127.0.0.1:8000/redoc) einsehen können: +Aus diesem Grund bietet **FastAPI** selbst eine alternative API-Dokumentation (verwendet ReDoc), welche Sie unter [http://127.0.0.1:8000/redoc](http://127.0.0.1:8000/redoc) einsehen können: -Und viele weitere kompatible Tools. Inklusive Codegenerierung für viele Sprachen. +Auf die gleiche Weise gibt es viele kompatible Tools. Inklusive Codegenerierungstools für viele Sprachen. ## Pydantic { #pydantic } -Die ganze Datenvalidierung wird hinter den Kulissen von [Pydantic](https://docs.pydantic.dev/) durchgeführt, Sie profitieren also von dessen Vorteilen. Und Sie wissen, dass Sie in guten Händen sind. +Die ganze Datenvalidierung wird hinter den Kulissen von [Pydantic](https://pydantic.dev/docs/) durchgeführt, Sie profitieren also von dessen Vorteilen. Und Sie wissen, dass Sie in guten Händen sind. -Sie können für Typdeklarationen auch `str`, `float`, `bool` und viele andere komplexe Datentypen verwenden. +Sie können die gleichen Typdeklarationen auch mit `str`, `float`, `bool` und vielen anderen komplexen Datentypen verwenden. -Mehrere davon werden wir in den nächsten Kapiteln erkunden. +Mehrere davon werden in den nächsten Kapiteln des Tutorials erkundet. ## Die Reihenfolge ist wichtig { #order-matters } -Wenn Sie *Pfadoperationen* erstellen, haben Sie manchmal einen fixen Pfad. +Wenn Sie *Pfadoperationen* erstellen, haben Sie manchmal Situationen, in denen Sie einen fixen Pfad haben. -Etwa `/users/me`, um Daten über den aktuellen Benutzer zu erhalten. +Etwa `/users/me`, sagen wir, um Daten über den aktuellen Benutzer zu erhalten. -Und Sie haben auch einen Pfad `/users/{user_id}`, um Daten über einen spezifischen Benutzer zu erhalten, mittels einer Benutzer-ID. +Und Sie können auch einen Pfad `/users/{user_id}` haben, um Daten über einen spezifischen Benutzer mittels irgendeiner Benutzer-ID zu erhalten. -Weil *Pfadoperationen* in ihrer Reihenfolge ausgewertet werden, müssen Sie sicherstellen, dass der Pfad `/users/me` vor `/users/{user_id}` deklariert wurde: +Weil *Pfadoperationen* in ihrer Reihenfolge ausgewertet werden, müssen Sie sicherstellen, dass der Pfad für `/users/me` vor dem für `/users/{user_id}` deklariert wurde: {* ../../docs_src/path_params/tutorial003_py310.py hl[6,11] *} -Ansonsten würde der Pfad für `/users/{user_id}` auch `/users/me` auswerten, und annehmen, dass ein Parameter `user_id` mit dem Wert „me“ übergeben wurde. +Ansonsten würde der Pfad für `/users/{user_id}` auch auf `/users/me` passen und „denken“, dass er einen Parameter `user_id` mit dem Wert `"me"` erhält. -Sie können eine Pfadoperation auch nicht erneut definieren: +Ebenso können Sie eine Pfadoperation nicht erneut definieren: {* ../../docs_src/path_params/tutorial003b_py310.py hl[6,11] *} Die erste Definition wird immer verwendet werden, da ihr Pfad zuerst übereinstimmt. -## Vordefinierte Parameterwerte { #predefined-values } +## Vordefinierte Werte { #predefined-values } -Wenn Sie eine *Pfadoperation* haben, welche einen *Pfad-Parameter* hat, aber Sie wollen, dass dessen gültige Werte vordefiniert sind, können Sie ein Standard-Python `Enum` verwenden. +Wenn Sie eine *Pfadoperation* haben, welche einen *Pfad-Parameter* erhält, aber Sie wollen, dass die möglichen gültigen *Pfad-Parameter*-Werte vordefiniert sind, können Sie ein Standard-Python-`Enum` verwenden. ### Eine `Enum`-Klasse erstellen { #create-an-enum-class } Importieren Sie `Enum` und erstellen Sie eine Unterklasse, die von `str` und `Enum` erbt. -Indem Sie von `str` erben, weiß die API-Dokumentation, dass die Werte vom Typ `str` sein müssen, und wird in der Lage sein, korrekt zu rendern. +Indem Sie von `str` erben, weiß die API-Dokumentation, dass die Werte vom Typ `string` sein müssen, und wird in der Lage sein, korrekt zu rendern. -Erstellen Sie dann Klassen-Attribute mit festgelegten Werten, welches die erlaubten Werte sein werden: +Erstellen Sie dann Klassen-Attribute mit festgelegten Werten, welche die verfügbaren gültigen Werte sein werden: {* ../../docs_src/path_params/tutorial005_py310.py hl[1,6:9] *} /// tip | Tipp -Falls Sie sich fragen, was „AlexNet“, „ResNet“ und „LeNet“ ist, das sind Namen von Modellen für maschinelles Lernen. +Falls Sie sich fragen: „AlexNet“, „ResNet“ und „LeNet“ sind nur Namen von Modellen für maschinelles Lernen. /// ### Einen *Pfad-Parameter* deklarieren { #declare-a-path-parameter } -Dann erstellen Sie einen *Pfad-Parameter*, der als Typ die gerade erstellte Enum-Klasse hat (`ModelName`): +Dann erstellen Sie einen *Pfad-Parameter* mit einer Typannotation, welche die von Ihnen erstellte Enum-Klasse (`ModelName`) verwendet: {* ../../docs_src/path_params/tutorial005_py310.py hl[16] *} -### Die API-Dokumentation testen { #check-the-docs } +### Die Dokumentation testen { #check-the-docs } -Weil die erlaubten Werte für den *Pfad-Parameter* nun vordefiniert sind, kann die interaktive Dokumentation sie als Auswahl-Drop-Down anzeigen: +Weil die verfügbaren Werte für den *Pfad-Parameter* nun vordefiniert sind, kann die interaktive Dokumentation diese hübsch anzeigen: ### Mit Python-*Enumerationen* arbeiten { #working-with-python-enumerations } -Der *Pfad-Parameter* wird ein *Member einer Enumeration* sein. +Der Wert des *Pfad-Parameters* wird ein *Member einer Enumeration* sein. #### *Enumeration-Member* vergleichen { #compare-enumeration-members } -Sie können ihn mit einem Member Ihrer Enumeration `ModelName` vergleichen: +Sie können ihn mit dem *Enumeration-Member* in Ihrem erstellten Enum `ModelName` vergleichen: {* ../../docs_src/path_params/tutorial005_py310.py hl[17] *} #### *Enumerations-Wert* erhalten { #get-the-enumeration-value } -Den tatsächlichen Wert (in diesem Fall ein `str`) erhalten Sie via `model_name.value`, oder generell, `your_enum_member.value`: +Den tatsächlichen Wert (in diesem Fall ein `str`) erhalten Sie mittels `model_name.value`, oder generell, `your_enum_member.value`: {* ../../docs_src/path_params/tutorial005_py310.py hl[20] *} @@ -184,13 +184,13 @@ Sie können den Wert `"lenet"` außerdem mittels `ModelName.lenet.value` abrufen #### *Enumeration-Member* zurückgeben { #return-enumeration-members } -Sie können *Enum-Member* in ihrer *Pfadoperation* zurückgeben, sogar verschachtelt in einem JSON-Body (z. B. als `dict`). +Sie können *Enum-Member* von Ihrer *Pfadoperation* zurückgeben, sogar verschachtelt in einem JSON-Body (z. B. als `dict`). -Diese werden zu ihren entsprechenden Werten konvertiert (in diesem Fall Strings), bevor sie zum Client übertragen werden: +Diese werden zu ihren entsprechenden Werten konvertiert (in diesem Fall Strings), bevor sie an den Client zurückgegeben werden: {* ../../docs_src/path_params/tutorial005_py310.py hl[18,21,23] *} -In Ihrem Client erhalten Sie eine JSON-Response, wie etwa: +In Ihrem Client erhalten Sie eine JSON-Response wie: ```JSON { @@ -209,21 +209,21 @@ Sprich, die URL für diese Datei wäre etwas wie: `/files/home/johndoe/myfile.tx ### OpenAPI-Unterstützung { #openapi-support } -OpenAPI bietet nicht die Möglichkeit, dass ein *Pfad-Parameter* seinerseits einen *Pfad* enthalten kann, das würde zu Szenarios führen, die schwierig zu testen und zu definieren sind. +OpenAPI bietet nicht die Möglichkeit, zu deklarieren, dass ein *Pfad-Parameter* in sich einen *Pfad* enthalten kann, da das zu Szenarios führen könnte, die schwierig zu testen und zu definieren sind. Trotzdem können Sie das in **FastAPI** tun, indem Sie eines der internen Tools von Starlette verwenden. -Die Dokumentation würde weiterhin funktionieren, allerdings wird nicht dokumentiert werden, dass der Parameter ein Pfad sein sollte. +Die Dokumentation würde weiterhin funktionieren, allerdings ohne irgendeine Dokumentation hinzuzufügen, die besagt, dass der Parameter einen Pfad enthalten sollte. ### Pfad-Konverter { #path-convertor } -Mittels einer Option direkt von Starlette können Sie einen *Pfad-Parameter* deklarieren, der einen Pfad enthalten soll, indem Sie eine URL wie folgt definieren: +Mittels einer Option direkt von Starlette können Sie einen *Pfad-Parameter* deklarieren, der einen *Pfad* enthält, indem Sie eine URL wie folgt definieren: ``` /files/{file_path:path} ``` -In diesem Fall ist der Name des Parameters `file_path`. Der letzte Teil, `:path`, sagt aus, dass der Parameter ein *Pfad* sein soll. +In diesem Fall ist der Name des Parameters `file_path`, und der letzte Teil, `:path`, sagt ihm, dass der Parameter mit jedem *Pfad* übereinstimmen sollte. Sie verwenden das also wie folgt: @@ -231,7 +231,7 @@ Sie verwenden das also wie folgt: /// tip | Tipp -Der Parameter könnte einen führenden Schrägstrich (`/`) haben, wie etwa in `/home/johndoe/myfile.txt`. +Der Parameter könnte `/home/johndoe/myfile.txt` enthalten müssen, mit einem führenden Schrägstrich (`/`). In dem Fall wäre die URL: `/files//home/johndoe/myfile.txt`, mit einem doppelten Schrägstrich (`//`) zwischen `files` und `home`. @@ -239,13 +239,13 @@ In dem Fall wäre die URL: `/files//home/johndoe/myfile.txt`, mit einem doppelte ## Zusammenfassung { #recap } -In **FastAPI** erhalten Sie mittels kurzer, intuitiver Typdeklarationen: +Mit **FastAPI** erhalten Sie mittels kurzer, intuitiver und Standard-Python-Typdeklarationen: * Editor-Unterstützung: Fehlerprüfungen, Codevervollständigung, usw. * Daten „parsen“ * Datenvalidierung -* API-Annotationen und automatische Dokumentation +* API-Annotation und automatische Dokumentation Und Sie müssen sie nur einmal deklarieren. -Das ist wahrscheinlich der sichtbarste Unterschied zwischen **FastAPI** und alternativen Frameworks (abgesehen von der reinen Performanz). +Das ist wahrscheinlich der wichtigste sichtbare Vorteil von **FastAPI** im Vergleich zu alternativen Frameworks (abgesehen von der rohen Performanz). diff --git a/docs/de/docs/tutorial/query-params-str-validations.md b/docs/de/docs/tutorial/query-params-str-validations.md index bec5f574a1..09f8b0b145 100644 --- a/docs/de/docs/tutorial/query-params-str-validations.md +++ b/docs/de/docs/tutorial/query-params-str-validations.md @@ -369,11 +369,11 @@ Es kann Fälle geben, in denen Sie eine **benutzerdefinierte Validierung** durch In diesen Fällen können Sie eine **benutzerdefinierte Validierungsfunktion** verwenden, die nach der normalen Validierung angewendet wird (z. B. nach der Validierung, dass der Wert ein `str` ist). -Sie können dies mit [Pydantics `AfterValidator`](https://docs.pydantic.dev/latest/concepts/validators/#field-after-validator) innerhalb von `Annotated` erreichen. +Sie können dies mit [Pydantics `AfterValidator`](https://pydantic.dev/docs/validation/latest/concepts/validators/#field-after-validator) innerhalb von `Annotated` erreichen. /// tip | Tipp -Pydantic unterstützt auch [`BeforeValidator`](https://docs.pydantic.dev/latest/concepts/validators/#field-before-validator) und andere. 🤓 +Pydantic unterstützt auch [`BeforeValidator`](https://pydantic.dev/docs/validation/latest/concepts/validators/#field-before-validator) und andere. 🤓 /// diff --git a/docs/de/docs/tutorial/request-files.md b/docs/de/docs/tutorial/request-files.md index 7a344604ae..59c878cd84 100644 --- a/docs/de/docs/tutorial/request-files.md +++ b/docs/de/docs/tutorial/request-files.md @@ -6,10 +6,10 @@ Sie können Dateien, die vom Client hochgeladen werden, mithilfe von `File` defi Um hochgeladene Dateien zu empfangen, installieren Sie zuerst [`python-multipart`](https://github.com/Kludex/python-multipart). -Stellen Sie sicher, dass Sie eine [virtuelle Umgebung](../virtual-environments.md) erstellen, sie aktivieren und dann das Paket installieren, zum Beispiel: +Fügen Sie es Ihrem Projekt hinzu: ```console -$ pip install python-multipart +$ uv add python-multipart ``` Das liegt daran, dass hochgeladene Dateien als „Formulardaten“ gesendet werden. @@ -147,7 +147,7 @@ Sie können auch `File()` mit `UploadFile` verwenden, um zum Beispiel zusätzlic ## Mehrere Datei-Uploads { #multiple-file-uploads } -Es ist auch möglich, mehrere Dateien gleichzeitig hochzuladen. +Es ist möglich, mehrere Dateien gleichzeitig hochzuladen. Diese werden demselben „Formularfeld“ zugeordnet, welches mittels „Formulardaten“ gesendet wird. @@ -159,7 +159,7 @@ Sie erhalten, wie deklariert, eine `list` von `bytes` oder `UploadFile`s. /// note | Technische Details -Sie können auch `from starlette.responses import HTMLResponse` verwenden. +Sie könnten auch `from starlette.responses import HTMLResponse` verwenden. **FastAPI** bietet dieselben `starlette.responses` auch via `fastapi.responses` an, als Annehmlichkeit für Sie, den Entwickler. Die meisten verfügbaren Responses kommen aber direkt von Starlette. diff --git a/docs/de/docs/tutorial/request-form-models.md b/docs/de/docs/tutorial/request-form-models.md index b40d60d0bb..5da7038f92 100644 --- a/docs/de/docs/tutorial/request-form-models.md +++ b/docs/de/docs/tutorial/request-form-models.md @@ -6,10 +6,10 @@ Sie können **Pydantic-Modelle** verwenden, um **Formularfelder** in FastAPI zu Um Formulare zu verwenden, installieren Sie zuerst [`python-multipart`](https://github.com/Kludex/python-multipart). -Stellen Sie sicher, dass Sie eine [Virtuelle Umgebung](../virtual-environments.md) erstellen, sie aktivieren und es dann installieren, zum Beispiel: +Fügen Sie es zu Ihrem Projekt hinzu: ```console -$ pip install python-multipart +$ uv add python-multipart ``` /// @@ -38,7 +38,7 @@ Sie können dies in der Dokumentations-UI unter `/docs` testen: ## Zusätzliche Formularfelder verbieten { #forbid-extra-form-fields } -In einigen speziellen Anwendungsfällen (wahrscheinlich nicht sehr häufig) möchten Sie möglicherweise die Formularfelder auf nur diejenigen beschränken, die im Pydantic-Modell deklariert sind, und jegliche **zusätzlichen** Felder **verbieten**. +In einigen speziellen Anwendungsfällen (wahrscheinlich nicht sehr häufig) möchten Sie möglicherweise die Formularfelder auf nur diejenigen **beschränken**, die im Pydantic-Modell deklariert sind. Und jegliche **zusätzlichen** Felder **verbieten**. /// note | Hinweis @@ -46,11 +46,11 @@ Dies wird seit FastAPI Version `0.114.0` unterstützt. 🤓 /// -Sie können die Modellkonfiguration von Pydantic verwenden, um jegliche `extra` Felder zu `verbieten`: +Sie können Pydantics Modellkonfiguration verwenden, um jegliche `extra`-Felder auf `forbid` zu setzen: {* ../../docs_src/request_form_models/tutorial002_an_py310.py hl[12] *} -Wenn ein Client versucht, einige zusätzliche Daten zu senden, erhält er eine **Error-Response**. +Wenn ein Client versucht, einige zusätzliche Daten zu senden, erhält er eine **Error**-Response. Zum Beispiel, wenn der Client versucht, folgende Formularfelder zu senden: @@ -58,7 +58,7 @@ Zum Beispiel, wenn der Client versucht, folgende Formularfelder zu senden: * `password`: `Portal Gun` * `extra`: `Mr. Poopybutthole` -erhält er eine Error-Response, die ihm mitteilt, dass das Feld `extra` nicht erlaubt ist: +Er erhält eine Error-Response, die ihm mitteilt, dass das Feld `extra` nicht erlaubt ist: ```json { diff --git a/docs/de/docs/tutorial/request-forms-and-files.md b/docs/de/docs/tutorial/request-forms-and-files.md index 98e5428519..b03380283e 100644 --- a/docs/de/docs/tutorial/request-forms-and-files.md +++ b/docs/de/docs/tutorial/request-forms-and-files.md @@ -1,15 +1,15 @@ # Formulardaten und Dateien im Request { #request-forms-and-files } -Sie können gleichzeitig Dateien und Formulardaten mit `File` und `Form` definieren. +Sie können gleichzeitig Dateien und Formularfelder mit `File` und `Form` definieren. /// note | Hinweis Um hochgeladene Dateien und/oder Formulardaten zu empfangen, installieren Sie zuerst [`python-multipart`](https://github.com/Kludex/python-multipart). -Stellen Sie sicher, dass Sie eine [virtuelle Umgebung](../virtual-environments.md) erstellen, diese aktivieren und es dann installieren, z. B.: +Fügen Sie es Ihrem Projekt hinzu: ```console -$ pip install python-multipart +$ uv add python-multipart ``` /// diff --git a/docs/de/docs/tutorial/request-forms.md b/docs/de/docs/tutorial/request-forms.md index aedcd4a51f..c93945cf52 100644 --- a/docs/de/docs/tutorial/request-forms.md +++ b/docs/de/docs/tutorial/request-forms.md @@ -7,10 +7,10 @@ Wenn Sie Felder aus Formularen statt JSON empfangen müssen, können Sie `Form` Um Formulare zu verwenden, installieren Sie zuerst [`python-multipart`](https://github.com/Kludex/python-multipart). -Erstellen Sie unbedingt eine [virtuelle Umgebung](../virtual-environments.md), aktivieren Sie diese und installieren Sie dann das Paket, zum Beispiel: +Fügen Sie es Ihrem Projekt hinzu: ```console -$ pip install python-multipart +$ uv add python-multipart ``` /// diff --git a/docs/de/docs/tutorial/response-model.md b/docs/de/docs/tutorial/response-model.md index 2b580bd6d5..443f555d12 100644 --- a/docs/de/docs/tutorial/response-model.md +++ b/docs/de/docs/tutorial/response-model.md @@ -1,8 +1,8 @@ # Responsemodell – Rückgabetyp { #response-model-return-type } -Sie können den Typ der Response deklarieren, indem Sie den **Rückgabetyp** der *Pfadoperation* annotieren. +Sie können den Typ der Response deklarieren, indem Sie den **Rückgabetyp** der *Pfadoperation-Funktion* annotieren. -Hierbei können Sie **Typannotationen** genauso verwenden, wie Sie es bei Werten von Funktions-**Parametern** machen; verwenden Sie Pydantic-Modelle, Listen, Dicts und skalare Werte wie Nummern, Booleans, usw. +Hierbei können Sie **Typannotationen** genauso verwenden, wie Sie es bei Eingabedaten in Funktions-**Parametern** machen; verwenden Sie Pydantic-Modelle, Listen, Dictionaries und skalare Werte wie Integer, Booleans, usw. {* ../../docs_src/response_model/tutorial001_01_py310.py hl[16,21] *} @@ -24,9 +24,9 @@ Aber am wichtigsten: Es gibt Fälle, da möchten oder müssen Sie Daten zurückgeben, die nicht genau dem entsprechen, was der Typ deklariert. -Zum Beispiel könnten Sie **ein Dictionary zurückgeben** wollen, oder ein Datenbank-Objekt, aber **es als Pydantic-Modell deklarieren**. Auf diese Weise übernimmt das Pydantic-Modell alle Datendokumentation, -validierung, usw. für das Objekt, welches Sie zurückgeben (z. B. ein Dictionary oder ein Datenbank-Objekt). +Zum Beispiel könnten Sie **ein Dictionary zurückgeben** wollen, oder ein Datenbankobjekt, aber **es als Pydantic-Modell deklarieren**. Auf diese Weise übernimmt das Pydantic-Modell alle Datendokumentation, -validierung, usw. für das Objekt, welches Sie zurückgeben (z. B. ein Dictionary oder ein Datenbankobjekt). -Würden Sie eine hierfür eine Rückgabetyp-Annotation verwenden, dann würden Tools und Editoren (korrekterweise) Fehler ausgeben, die Ihnen sagen, dass Ihre Funktion einen Typ zurückgibt (z. B. ein Dict), der sich unterscheidet von dem, was Sie deklariert haben (z. B. ein Pydantic-Modell). +Würden Sie eine Rückgabetyp-Annotation hinzufügen, dann würden Tools und Editoren (korrekterweise) Fehler ausgeben, die Ihnen sagen, dass Ihre Funktion einen Typ zurückgibt (z. B. ein Dict), der sich unterscheidet von dem, was Sie deklariert haben (z. B. ein Pydantic-Modell). In solchen Fällen können Sie statt des Rückgabetyps den **Pfadoperation-Dekorator**-Parameter `response_model` verwenden. @@ -42,17 +42,17 @@ Sie können `response_model` in jeder möglichen *Pfadoperation* verwenden: /// note | Hinweis -Beachten Sie, dass `response_model` ein Parameter der „Dekorator“-Methode ist (`get`, `post`, usw.). Nicht der *Pfadoperation-Funktion*, so wie die anderen Parameter und der Body. +Beachten Sie, dass `response_model` ein Parameter der „Dekorator“-Methode ist (`get`, `post`, usw.). Nicht Ihrer *Pfadoperation-Funktion*, so wie alle Parameter und der Body. /// -`response_model` nimmt denselben Typ entgegen, den Sie auch für ein Pydantic-Modellfeld deklarieren würden, also etwa ein Pydantic-Modell, aber es kann auch z. B. eine `list`e von Pydantic-Modellen sein, wie etwa `List[Item]`. +`response_model` nimmt denselben Typ entgegen, den Sie auch für ein Pydantic-Modellfeld deklarieren würden, also etwa ein Pydantic-Modell, aber es kann auch z. B. eine `list` von Pydantic-Modellen sein, wie etwa `List[Item]`. FastAPI wird dieses `response_model` nehmen, um die Daten zu dokumentieren, validieren, usw. und auch, um **die Ausgabedaten** entsprechend der Typdeklaration **zu konvertieren und filtern**. /// tip | Tipp -Wenn Sie in Ihrem Editor strikte Typchecks haben, mypy, usw., können Sie den Funktions-Rückgabetyp als `Any` deklarieren. +Wenn Sie in Ihrem Editor strikte Typchecks haben, mypy, usw., können Sie den Funktions-Rückgabetyp als `Any` deklarieren. So sagen Sie dem Editor, dass Sie absichtlich *irgendetwas* zurückgeben. Aber FastAPI wird trotzdem die Dokumentation, Validierung, Filterung, usw. der Daten übernehmen, via `response_model`. @@ -60,11 +60,11 @@ So sagen Sie dem Editor, dass Sie absichtlich *irgendetwas* zurückgeben. Aber F ### `response_model`-Priorität { #response-model-priority } -Wenn sowohl Rückgabetyp als auch `response_model` deklariert sind, hat `response_model` die Priorität und wird von FastAPI bevorzugt verwendet. +Wenn sowohl Rückgabetyp als auch `response_model` deklariert sind, hat `response_model` die Priorität und wird von FastAPI verwendet. -So können Sie korrekte Typannotationen zu Ihrer Funktion hinzufügen, die von Ihrem Editor und Tools wie mypy verwendet werden. Und dennoch übernimmt FastAPI die Validierung und Dokumentation, usw., der Daten anhand von `response_model`. +So können Sie korrekte Typannotationen zu Ihren Funktionen hinzufügen, selbst wenn Sie einen anderen Typ als das Responsemodell zurückgeben, die von Ihrem Editor und Tools wie mypy verwendet werden. Und dennoch übernimmt FastAPI die Validierung und Dokumentation, usw., der Daten anhand von `response_model`. -Sie können auch `response_model=None` verwenden, um das Erstellen eines Responsemodells für diese *Pfadoperation* zu unterbinden. Sie könnten das tun wollen, wenn Sie Dinge annotieren, die nicht gültige Pydantic-Felder sind. Ein Beispiel dazu werden Sie in einer der Abschnitte unten sehen. +Sie können auch `response_model=None` verwenden, um das Erstellen eines Responsemodells für diese *Pfadoperation* zu unterbinden. Sie könnten das tun müssen, wenn Sie Typannotationen für Dinge hinzufügen, die keine gültigen Pydantic-Felder sind. Ein Beispiel dazu werden Sie in einem der Abschnitte unten sehen. ## Dieselben Eingabedaten zurückgeben { #return-the-same-input-data } @@ -76,16 +76,16 @@ Im Folgenden deklarieren wir ein `UserIn`-Modell; es enthält ein Klartext-Passw Um `EmailStr` zu verwenden, installieren Sie zuerst [`email-validator`](https://github.com/JoshData/python-email-validator). -Stellen Sie sicher, dass Sie eine [virtuelle Umgebung](../virtual-environments.md) erstellen, sie aktivieren und es dann installieren, zum Beispiel: +Fügen Sie es Ihrem Projekt hinzu: ```console -$ pip install email-validator +$ uv add email-validator ``` oder mit: ```console -$ pip install "pydantic[email]" +$ uv add "pydantic[email]" ``` /// @@ -98,11 +98,11 @@ Immer wenn jetzt ein Browser einen Benutzer mit Passwort erzeugt, gibt die API d Hier ist das möglicherweise kein Problem, da es derselbe Benutzer ist, der das Passwort sendet. -Aber wenn wir dasselbe Modell für eine andere *Pfadoperation* verwenden, könnten wir das Passwort dieses Benutzers zu jedem Client schicken. +Aber wenn wir dasselbe Modell für eine andere *Pfadoperation* verwenden, könnten wir die Passwörter unserer Benutzer an jeden Client senden. /// danger | Gefahr -Speichern Sie niemals das Klartext-Passwort eines Benutzers, oder versenden Sie es in einer Response wie dieser, wenn Sie sich nicht der resultierenden Gefahren bewusst sind und nicht wissen, was Sie tun. +Speichern Sie niemals das Klartext-Passwort eines Benutzers, oder versenden Sie es in einer Response wie dieser, es sei denn, Sie kennen alle Einschränkungen und wissen, was Sie tun. /// @@ -116,31 +116,31 @@ Obwohl unsere *Pfadoperation-Funktion* hier denselben `user` von der Eingabe zur {* ../../docs_src/response_model/tutorial003_py310.py hl[24] *} -... haben wir deklariert, dass `response_model` das Modell `UserOut` ist, welches das Passwort nicht enthält: +... haben wir deklariert, dass `response_model` unser Modell `UserOut` ist, welches das Passwort nicht enthält: {* ../../docs_src/response_model/tutorial003_py310.py hl[22] *} Darum wird **FastAPI** sich darum kümmern, dass alle Daten, die nicht im Ausgabemodell deklariert sind, herausgefiltert werden (mittels Pydantic). -### `response_model` oder Rückgabewert { #response-model-or-return-type } +### `response_model` oder Rückgabetyp { #response-model-or-return-type } -Da unsere zwei Modelle in diesem Fall unterschiedlich sind, würde, wenn wir den Rückgabewert der Funktion als `UserOut` deklarieren, der Editor sich beschweren, dass wir einen ungültigen Typ zurückgeben, weil das unterschiedliche Klassen sind. +Da unsere zwei Modelle in diesem Fall unterschiedlich sind, würde, wenn wir den Funktions-Rückgabetyp als `UserOut` deklarieren, der Editor sich beschweren, dass wir einen ungültigen Typ zurückgeben, weil das unterschiedliche Klassen sind. -Darum müssen wir es in diesem Fall im `response_model`-Parameter deklarieren. +Darum müssen wir es in diesem Beispiel im `response_model`-Parameter deklarieren. ... aber lesen Sie weiter, um zu sehen, wie man das anders lösen kann. -## Rückgabewert und Datenfilterung { #return-type-and-data-filtering } +## Rückgabetyp und Datenfilterung { #return-type-and-data-filtering } Führen wir unser vorheriges Beispiel fort. Wir wollten **die Funktion mit einem Typ annotieren**, aber wir wollten in der Funktion tatsächlich etwas zurückgeben, das **mehr Daten** enthält. Wir möchten, dass FastAPI die Daten weiterhin mithilfe des Responsemodells **filtert**. Selbst wenn die Funktion mehr Daten zurückgibt, soll die Response nur die Felder enthalten, die im Responsemodell deklariert sind. -Im vorherigen Beispiel mussten wir den `response_model`-Parameter verwenden, weil die Klassen unterschiedlich waren. Das bedeutet aber auch, wir bekommen keine Unterstützung vom Editor und anderen Tools, die den Funktions-Rückgabewert überprüfen. +Im vorherigen Beispiel mussten wir den `response_model`-Parameter verwenden, weil die Klassen unterschiedlich waren. Das bedeutet aber auch, wir bekommen keine Unterstützung vom Editor und anderen Tools, die den Funktions-Rückgabetyp überprüfen. Aber in den meisten Fällen, wenn wir so etwas machen, wollen wir nur, dass das Modell einige der Daten **filtert/entfernt**, so wie in diesem Beispiel. -Und in solchen Fällen können wir Klassen und Vererbung verwenden, um Vorteil aus den Typannotationen in der Funktion zu ziehen, was vom Editor und von Tools besser unterstützt wird, während wir gleichzeitig FastAPIs **Datenfilterung** behalten. +Und in solchen Fällen können wir Klassen und Vererbung verwenden, um Vorteil aus den **Typannotationen** in der Funktion zu ziehen, was vom Editor und von Tools besser unterstützt wird, während wir gleichzeitig FastAPIs **Datenfilterung** behalten. {* ../../docs_src/response_model/tutorial003_01_py310.py hl[7:10,13:14,18] *} @@ -156,7 +156,7 @@ Sehen wir uns zunächst an, wie Editor, mypy und andere Tools dies sehen würden Wir annotieren den Funktionsrückgabetyp als `BaseUser`, geben aber tatsächlich eine `UserIn`-Instanz zurück. -Für den Editor, mypy und andere Tools ist das kein Problem, da `UserIn` eine Unterklasse von `BaseUser` ist (Salopp: `UserIn` ist ein `BaseUser`). Es handelt sich um einen *gültigen* Typ, solange irgendetwas überreicht wird, das ein `BaseUser` ist. +Der Editor, mypy und andere Tools werden sich darüber nicht beschweren, weil `UserIn` im Sinne des Typings eine Unterklasse von `BaseUser` ist. Das bedeutet, es ist ein *gültiger* Typ, wenn etwas erwartet wird, das ein `BaseUser` ist. ### FastAPI Datenfilterung { #fastapi-data-filtering } @@ -182,7 +182,7 @@ Es kann Fälle geben, bei denen Sie etwas zurückgeben, das kein gültiges Pydan ### Eine Response direkt zurückgeben { #return-a-response-directly } -Der häufigste Anwendungsfall ist, wenn Sie [eine Response direkt zurückgeben, wie es später im Handbuch für fortgeschrittene Benutzer erläutert wird](../advanced/response-directly.md). +Der häufigste Anwendungsfall ist, wenn Sie [eine Response direkt zurückgeben, wie es später in der Dokumentation für fortgeschrittene Benutzer erläutert wird](../advanced/response-directly.md). {* ../../docs_src/response_model/tutorial003_02_py310.py hl[8,10:11] *} @@ -192,7 +192,7 @@ Und Tools werden auch glücklich sein, weil sowohl `RedirectResponse` als auch ` ### Eine Unterklasse von Response annotieren { #annotate-a-response-subclass } -Sie können auch eine Unterklasse von `Response` in der Typannotation verwenden. +Sie können auch eine Unterklasse von `Response` in der Typannotation verwenden: {* ../../docs_src/response_model/tutorial003_03_py310.py hl[8:9] *} @@ -200,9 +200,9 @@ Das wird ebenfalls funktionieren, weil `RedirectResponse` eine Unterklasse von ` ### Ungültige Rückgabetyp-Annotationen { #invalid-return-type-annotations } -Aber wenn Sie ein beliebiges anderes Objekt zurückgeben, das kein gültiger Pydantic-Typ ist (z. B. ein Datenbank-Objekt), und Sie annotieren es so in der Funktion, wird FastAPI versuchen, ein Pydantic-Responsemodell von dieser Typannotation zu erstellen, und scheitern. +Aber wenn Sie ein beliebiges anderes Objekt zurückgeben, das kein gültiger Pydantic-Typ ist (z. B. ein Datenbankobjekt), und Sie annotieren es so in der Funktion, wird FastAPI versuchen, ein Pydantic-Responsemodell von dieser Typannotation zu erstellen, und scheitern. -Das gleiche wird passieren, wenn Sie eine Union mehrerer Typen haben, und einer oder mehrere sind nicht gültige Pydantic-Typen. Zum Beispiel funktioniert folgendes nicht 💥: +Das gleiche wird passieren, wenn Sie eine Union mehrerer Typen haben, und einer oder mehrere sind nicht gültige Pydantic-Typen. Zum Beispiel funktioniert folgendes nicht 💥: {* ../../docs_src/response_model/tutorial003_04_py310.py hl[8] *} @@ -230,7 +230,7 @@ Ihr Responsemodell könnte Defaultwerte haben, wie: * `tax: float = 10.5` hat einen Defaultwert `10.5`. * `tags: List[str] = []` hat eine leere Liste als Defaultwert: `[]`. -Aber Sie möchten diese vielleicht vom Resultat ausschließen, wenn Sie gar nicht gesetzt wurden. +Aber Sie möchten diese vielleicht vom Resultat ausschließen, wenn sie tatsächlich nicht gespeichert wurden. Wenn Sie zum Beispiel Modelle mit vielen optionalen Attributen in einer NoSQL-Datenbank haben, und Sie möchten nicht ellenlange JSON-Responses voller Defaultwerte senden. @@ -242,7 +242,7 @@ Sie können den *Pfadoperation-Dekorator*-Parameter `response_model_exclude_unse Die Defaultwerte werden dann nicht in der Response enthalten sein, sondern nur die tatsächlich gesetzten Werte. -Wenn Sie also den Artikel mit der ID `foo` bei der *Pfadoperation* anfragen, wird (ohne die Defaultwerte) die Response sein: +Wenn Sie also einen Request an diese *Pfadoperation* für den Artikel mit der ID `foo` senden, wird (ohne die Defaultwerte) die Response sein: ```JSON { @@ -258,13 +258,13 @@ Sie können auch: * `response_model_exclude_defaults=True` * `response_model_exclude_none=True` -verwenden, wie in der [Pydantic-Dokumentation](https://docs.pydantic.dev/1.10/usage/exporting_models/#modeldict) für `exclude_defaults` und `exclude_none` beschrieben. +verwenden, wie in der [Pydantic-Dokumentation](https://pydantic.dev/docs/validation/latest/concepts/serialization/#excluding-and-including-fields-based-on-their-value) für `exclude_defaults` und `exclude_none` beschrieben. /// #### Daten mit Werten für Felder mit Defaultwerten { #data-with-values-for-fields-with-defaults } -Aber wenn Ihre Daten Werte für Modellfelder mit Defaultwerten haben, wie etwa der Artikel mit der ID `bar`: +Aber wenn Ihre Daten Werte für die Felder des Modells mit Defaultwerten haben, wie etwa der Artikel mit der ID `bar`: ```Python hl_lines="3 5" { @@ -331,14 +331,14 @@ Die Syntax `{"name", "description"}` erzeugt ein `set` mit diesen zwei Werten. /// -#### `list`en statt `set`s verwenden { #using-lists-instead-of-sets } +#### `list`s statt `set`s verwenden { #using-lists-instead-of-sets } -Wenn Sie vergessen, ein `set` zu verwenden, und stattdessen eine `list`e oder ein `tuple` übergeben, wird FastAPI die dennoch in ein `set` konvertieren, und es wird korrekt funktionieren: +Wenn Sie vergessen, ein `set` zu verwenden, und stattdessen eine `list` oder ein `tuple` übergeben, wird FastAPI die dennoch in ein `set` konvertieren, und es wird korrekt funktionieren: {* ../../docs_src/response_model/tutorial006_py310.py hl[29,35] *} ## Zusammenfassung { #recap } -Verwenden Sie den Parameter `response_model` im *Pfadoperation-Dekorator*, um Responsemodelle zu definieren, und besonders, um private Daten herauszufiltern. +Verwenden Sie den Parameter `response_model` im *Pfadoperation-Dekorator*, um Responsemodelle zu definieren, und besonders, um sicherzustellen, dass private Daten herausgefiltert werden. Verwenden Sie `response_model_exclude_unset`, um nur explizit gesetzte Werte zurückzugeben. diff --git a/docs/de/docs/tutorial/schema-extra-example.md b/docs/de/docs/tutorial/schema-extra-example.md index 9bf0eafecd..1d52f5a028 100644 --- a/docs/de/docs/tutorial/schema-extra-example.md +++ b/docs/de/docs/tutorial/schema-extra-example.md @@ -12,7 +12,7 @@ Sie können `examples` („Beispiele“) für ein Pydantic-Modell deklarieren, w Diese zusätzlichen Informationen werden unverändert zum für dieses Modell ausgegebenen **JSON-Schema** hinzugefügt und in der API-Dokumentation verwendet. -Sie können das Attribut `model_config` verwenden, das ein `dict` akzeptiert, wie beschrieben in [Pydantic-Dokumentation: Configuration](https://docs.pydantic.dev/latest/api/config/). +Sie können das Attribut `model_config` verwenden, das ein `dict` akzeptiert, wie beschrieben in [Pydantic-Dokumentation: Configuration](https://pydantic.dev/docs/validation/latest/api/pydantic/config/). Sie können `"json_schema_extra"` setzen, mit einem `dict`, das alle zusätzlichen Daten enthält, die im generierten JSON-Schema angezeigt werden sollen, einschließlich `examples`. diff --git a/docs/de/docs/tutorial/security/first-steps.md b/docs/de/docs/tutorial/security/first-steps.md index 69e8abec0b..1c527f2807 100644 --- a/docs/de/docs/tutorial/security/first-steps.md +++ b/docs/de/docs/tutorial/security/first-steps.md @@ -1,6 +1,5 @@ # Sicherheit – Erste Schritte { #security-first-steps } - Stellen wir uns vor, dass Sie Ihre **Backend**-API auf einer Domain haben. Und Sie haben ein **Frontend** auf einer anderen Domain oder in einem anderen Pfad derselben Domain (oder in einer Mobile-Anwendung). @@ -27,18 +26,16 @@ Kopieren Sie das Beispiel in eine Datei `main.py`: /// note | Hinweis -Das Paket [`python-multipart`](https://github.com/Kludex/python-multipart) wird automatisch mit **FastAPI** installiert, wenn Sie den Befehl `pip install "fastapi[standard]"` ausführen. +Das Paket [`python-multipart`](https://github.com/Kludex/python-multipart) wird automatisch mit **FastAPI** installiert, wenn Sie den Befehl `uv add "fastapi[standard]"` ausführen. -Wenn Sie jedoch den Befehl `pip install fastapi` verwenden, ist das Paket `python-multipart` nicht standardmäßig enthalten. +Wenn Sie jedoch den Befehl `uv add fastapi` verwenden, ist das Paket `python-multipart` nicht standardmäßig enthalten. -Um es manuell zu installieren, stellen Sie sicher, dass Sie eine [virtuelle Umgebung](../../virtual-environments.md) erstellen, sie aktivieren und es dann mit: +Um es manuell zu installieren, fügen Sie es Ihrem Projekt hinzu mit: ```console -$ pip install python-multipart +$ uv add python-multipart ``` -installieren. - Das liegt daran, dass **OAuth2** „Formulardaten“ zum Senden von `username` und `password` verwendet. /// @@ -48,7 +45,7 @@ Führen Sie das Beispiel aus mit:
```console -$ fastapi dev +$ uv run fastapi dev INFO: Uvicorn running on http://127.0.0.1:8000 (Press CTRL+C to quit) ``` diff --git a/docs/de/docs/tutorial/security/oauth2-jwt.md b/docs/de/docs/tutorial/security/oauth2-jwt.md index d04bd00d44..2b7e4ba803 100644 --- a/docs/de/docs/tutorial/security/oauth2-jwt.md +++ b/docs/de/docs/tutorial/security/oauth2-jwt.md @@ -30,12 +30,12 @@ Wenn Sie mit JWT-Tokens spielen und sehen möchten, wie sie funktionieren, schau Wir müssen `PyJWT` installieren, um die JWT-Tokens in Python zu generieren und zu verifizieren. -Stellen Sie sicher, dass Sie eine [virtuelle Umgebung](../../virtual-environments.md) erstellen, sie aktivieren und dann `pyjwt` installieren: +Fügen Sie `pyjwt` zu Ihrem Projekt hinzu:
```console -$ pip install pyjwt +$ uv add pyjwt ---> 100% ``` @@ -44,7 +44,7 @@ $ pip install pyjwt /// note | Hinweis -Wenn Sie planen, digitale Signaturalgorithmen wie RSA oder ECDSA zu verwenden, sollten Sie die Kryptografie-Abhängigkeit `pyjwt[crypto]` installieren. +Wenn Sie planen, digitale Signaturalgorithmen wie RSA oder ECDSA zu verwenden, sollten Sie die Kryptografie-Bibliotheksabhängigkeit `pyjwt[crypto]` installieren. Weitere Informationen finden Sie in der [PyJWT-Installationsdokumentation](https://pyjwt.readthedocs.io/en/latest/installation.html). @@ -72,12 +72,12 @@ Es unterstützt viele sichere Hashing-Algorithmen und Werkzeuge, um mit diesen z Der empfohlene Algorithmus ist „Argon2“. -Stellen Sie sicher, dass Sie eine [virtuelle Umgebung](../../virtual-environments.md) erstellen, sie aktivieren, und installieren Sie dann pwdlib mit Argon2: +Fügen Sie `pwdlib` mit Argon2 zu Ihrem Projekt hinzu:
```console -$ pip install "pwdlib[argon2]" +$ uv add "pwdlib[argon2]" ---> 100% ``` @@ -206,7 +206,7 @@ Die Benutzeroberfläche sieht wie folgt aus: -Melden Sie sich bei der Anwendung auf die gleiche Weise wie zuvor an. +Autorisieren Sie die Anwendung auf die gleiche Weise wie zuvor. Verwenden Sie die Anmeldeinformationen: @@ -260,7 +260,7 @@ Mit dem, was Sie bis hier gesehen haben, können Sie eine sichere **FastAPI**-An In fast jedem Framework wird die Handhabung der Sicherheit recht schnell zu einem ziemlich komplexen Thema. -Viele Packages, die es stark vereinfachen, müssen viele Kompromisse beim Datenmodell, der Datenbank und den verfügbaren Funktionen eingehen. Und einige dieser Pakete, die die Dinge zu sehr vereinfachen, weisen tatsächlich Sicherheitslücken auf. +Viele Packages, die es stark vereinfachen, müssen viele Kompromisse beim Datenmodell, der Datenbank und den verfügbaren Funktionen eingehen. Und einige dieser Packages, die die Dinge zu sehr vereinfachen, weisen tatsächlich Sicherheitslücken auf. --- @@ -268,7 +268,7 @@ Viele Packages, die es stark vereinfachen, müssen viele Kompromisse beim Datenm Es gibt Ihnen die volle Flexibilität, diejenigen auszuwählen, die am besten zu Ihrem Projekt passen. -Und Sie können viele gut gepflegte und weit verbreitete Packages wie `pwdlib` und `PyJWT` direkt verwenden, da **FastAPI** keine komplexen Mechanismen zur Integration externer Pakete erfordert. +Und Sie können viele gut gepflegte und weit verbreitete Packages wie `pwdlib` und `PyJWT` direkt verwenden, da **FastAPI** keine komplexen Mechanismen zur Integration externer Packages erfordert. Aber es bietet Ihnen die Werkzeuge, um den Prozess so weit wie möglich zu vereinfachen, ohne Kompromisse bei Flexibilität, Robustheit oder Sicherheit einzugehen. diff --git a/docs/de/docs/tutorial/sql-databases.md b/docs/de/docs/tutorial/sql-databases.md index 3c7aabae3f..acd1165579 100644 --- a/docs/de/docs/tutorial/sql-databases.md +++ b/docs/de/docs/tutorial/sql-databases.md @@ -8,7 +8,7 @@ Hier werden wir ein Beispiel mit [SQLModel](https://sqlmodel.tiangolo.com/) sehe /// tip | Tipp -Sie könnten jede andere SQL- oder NoSQL-Datenbankbibliothek verwenden, die Sie möchten (in einigen Fällen als „ORMs“ bezeichnet), FastAPI zwingt Sie nicht, irgendetwas zu verwenden. 😎 +Sie könnten jede andere SQL- oder NoSQL-Datenbankbibliothek verwenden, die Sie möchten (in einigen Fällen als „ORMs“ bezeichnet), FastAPI zwingt Sie nicht, irgendetwas zu verwenden. 😎 /// @@ -34,12 +34,12 @@ Dies ist ein sehr einfaches und kurzes Tutorial. Wenn Sie mehr über Datenbanken ## `SQLModel` installieren { #install-sqlmodel } -Stellen Sie zunächst sicher, dass Sie Ihre [virtuelle Umgebung](../virtual-environments.md) erstellen, sie aktivieren und dann `sqlmodel` installieren: +Fügen Sie `sqlmodel` Ihrem Projekt hinzu:
```console -$ pip install sqlmodel +$ uv add sqlmodel ---> 100% ``` @@ -152,7 +152,7 @@ Sie können die App ausführen:
```console -$ fastapi dev +$ uv run fastapi dev INFO: Uvicorn running on http://127.0.0.1:8000 (Press CTRL+C to quit) ``` @@ -337,7 +337,7 @@ Sie können die App erneut ausführen:
```console -$ fastapi dev +$ uv run fastapi dev INFO: Uvicorn running on http://127.0.0.1:8000 (Press CTRL+C to quit) ``` diff --git a/docs/de/docs/tutorial/static-files.md b/docs/de/docs/tutorial/static-files.md index ef75ca91a0..3c535bd9eb 100644 --- a/docs/de/docs/tutorial/static-files.md +++ b/docs/de/docs/tutorial/static-files.md @@ -21,7 +21,7 @@ Wenn Sie ein Frontend hosten müssen, verwenden Sie stattdessen `app.frontend()` Sie könnten auch `from starlette.staticfiles import StaticFiles` verwenden. -**FastAPI** stellt dasselbe `starlette.staticfiles` auch via `fastapi.staticfiles` bereit, als Annehmlichkeit für Sie, den Entwickler. Es kommt aber tatsächlich direkt von Starlette. +**FastAPI** stellt dasselbe `starlette.staticfiles` auch als `fastapi.staticfiles` bereit, nur als Annehmlichkeit für Sie, den Entwickler. Es kommt aber tatsächlich direkt von Starlette. /// @@ -45,4 +45,4 @@ Alle diese Parameter können anders als „`static`“ lauten, passen Sie sie an ## Weitere Informationen { #more-info } -Weitere Details und Optionen finden Sie in [Starlettes Dokumentation zu statischen Dateien](https://www.starlette.dev/staticfiles/). +Weitere Details und Optionen finden Sie in [Starlettes Dokumentation zu statischen Dateien](https://starlette.dev/staticfiles/). diff --git a/docs/de/docs/tutorial/testing.md b/docs/de/docs/tutorial/testing.md index 59d0be6bb7..066a456402 100644 --- a/docs/de/docs/tutorial/testing.md +++ b/docs/de/docs/tutorial/testing.md @@ -1,6 +1,6 @@ # Testen { #testing } -Dank [Starlette](https://www.starlette.dev/testclient/) ist das Testen von **FastAPI**-Anwendungen einfach und macht Spaß. +Dank [Starlette](https://starlette.dev/testclient/) ist das Testen von **FastAPI**-Anwendungen einfach und macht Spaß. Es basiert auf [HTTPX](https://www.python-httpx.org), welches wiederum auf der Grundlage von Requests konzipiert wurde, es ist also sehr vertraut und intuitiv. @@ -12,10 +12,10 @@ Damit können Sie [pytest](https://docs.pytest.org/) direkt mit **FastAPI** verw Um `TestClient` zu verwenden, installieren Sie zunächst [`httpx`](https://www.python-httpx.org). -Erstellen Sie eine [virtuelle Umgebung](../virtual-environments.md), aktivieren Sie sie und installieren Sie es dann, z. B.: +Fügen Sie es zu Ihrem Projekt hinzu: ```console -$ pip install httpx +$ uv add httpx ``` /// @@ -52,7 +52,7 @@ Sie könnten auch `from starlette.testclient import TestClient` verwenden. /// tip | Tipp -Wenn Sie in Ihren Tests neben dem Senden von Requests an Ihre FastAPI-Anwendung auch `async`-Funktionen aufrufen möchten (z. B. asynchrone Datenbankfunktionen), werfen Sie einen Blick auf die [Async-Tests](../advanced/async-tests.md) im Handbuch für fortgeschrittene Benutzer. +Wenn Sie in Ihren Tests neben dem Senden von Requests an Ihre FastAPI-Anwendung auch `async`-Funktionen aufrufen möchten (z. B. asynchrone Datenbankfunktionen), werfen Sie einen Blick auf die [Async-Tests](../advanced/async-tests.md) im Tutorial für fortgeschrittene Benutzer. /// @@ -153,16 +153,16 @@ Wenn Sie ein Pydantic-Modell in Ihrem Test haben und dessen Daten während des T /// -## Tests ausführen { #run-it } +## Ausführen { #run-it } Danach müssen Sie nur noch `pytest` installieren. -Erstellen Sie eine [virtuelle Umgebung](../virtual-environments.md), aktivieren Sie sie und installieren Sie es dann, z. B.: +Fügen Sie es zu Ihrem Projekt hinzu:
```console -$ pip install pytest +$ uv add pytest ---> 100% ``` @@ -176,7 +176,7 @@ Führen Sie die Tests aus, mit:
```console -$ pytest +$ uv run pytest ================ test session starts ================ platform linux -- Python 3.6.9, pytest-5.3.5, py-1.8.1, pluggy-0.13.1 diff --git a/docs/de/docs/virtual-environments.md b/docs/de/docs/virtual-environments.md index 782d1cdcf0..945989003b 100644 --- a/docs/de/docs/virtual-environments.md +++ b/docs/de/docs/virtual-environments.md @@ -1,864 +1,35 @@ # Virtuelle Umgebungen { #virtual-environments } -Wenn Sie an Python-Projekten arbeiten, sollten Sie wahrscheinlich eine **virtuelle Umgebung** (oder einen ähnlichen Mechanismus) verwenden, um die Packages, die Sie für jedes Projekt installieren, zu isolieren. +Wenn Sie mit Python-Projekten arbeiten, sollten Sie eine **virtuelle Umgebung** verwenden, um die für jedes Projekt installierten Packages zu isolieren. -/// note | Hinweis - -Wenn Sie bereits über virtuelle Umgebungen Bescheid wissen, wie man sie erstellt und verwendet, möchten Sie diesen Abschnitt vielleicht überspringen. 🤓 - -/// - -/// tip | Tipp - -Eine **virtuelle Umgebung** unterscheidet sich von einer **Umgebungsvariable**. - -Eine **Umgebungsvariable** ist eine Variable im System, die von Programmen verwendet werden kann. - -Eine **virtuelle Umgebung** ist ein Verzeichnis mit einigen Dateien darin. - -/// - -/// note | Hinweis - -Diese Seite wird Ihnen beibringen, wie Sie **virtuelle Umgebungen** verwenden und wie sie funktionieren. - -Wenn Sie bereit sind, ein **Tool zu verwenden, das alles für Sie verwaltet** (einschließlich der Installation von Python), probieren Sie [uv](https://github.com/astral-sh/uv). - -/// +Für FastAPI-Projekte empfehle ich die Verwendung von [uv](https://docs.astral.sh/uv/), um das Projekt, seine Abhängigkeiten und seine virtuelle Umgebung zu verwalten. ## Ein Projekt erstellen { #create-a-project } -Erstellen Sie zuerst ein Verzeichnis für Ihr Projekt. - -Was ich normalerweise mache, ist, dass ich ein Verzeichnis namens `code` in meinem Home/Benutzerverzeichnis erstelle. - -Und darin erstelle ich ein Verzeichnis pro Projekt. +Installieren Sie `uv` mithilfe der [offiziellen Installationsanleitung](https://docs.astral.sh/uv/getting-started/installation/) und erstellen Sie dann ein Projekt:
```console -// Gehe zum Home-Verzeichnis -$ cd -// Erstelle ein Verzeichnis für alle Ihre Code-Projekte -$ mkdir code -// Gehe in dieses Code-Verzeichnis -$ cd code -// Erstelle ein Verzeichnis für dieses Projekt -$ mkdir awesome-project -// Gehe in dieses Projektverzeichnis +$ uv init awesome-project --bare $ cd awesome-project +$ uv add "fastapi[standard]" ```
-## Eine virtuelle Umgebung erstellen { #create-a-virtual-environment } - -Wenn Sie zum **ersten Mal** an einem Python-Projekt arbeiten, erstellen Sie eine virtuelle Umgebung **innerhalb Ihres Projekts**. - -/// tip | Tipp - -Sie müssen dies nur **einmal pro Projekt** tun, nicht jedes Mal, wenn Sie daran arbeiten. - -/// - -//// tab | `venv` - -Um eine virtuelle Umgebung zu erstellen, können Sie das `venv`-Modul verwenden, das mit Python geliefert wird. - -
- -```console -$ python -m venv .venv -``` - -
- -/// details | Was dieser Befehl bedeutet - -* `python`: das Programm namens `python` verwenden -* `-m`: ein Modul als Skript aufrufen, wir geben als nächstes an, welches Modul -* `venv`: das Modul namens `venv` verwenden, das normalerweise mit Python installiert wird -* `.venv`: die virtuelle Umgebung im neuen Verzeichnis `.venv` erstellen - -/// - -//// - -//// tab | `uv` - -Wenn Sie [`uv`](https://github.com/astral-sh/uv) installiert haben, können Sie es verwenden, um eine virtuelle Umgebung zu erstellen. - -
- -```console -$ uv venv -``` - -
- -/// tip | Tipp - -Standardmäßig erstellt `uv` eine virtuelle Umgebung in einem Verzeichnis namens `.venv`. - -Aber Sie könnten es anpassen, indem Sie ein zusätzliches Argument mit dem Verzeichnisnamen übergeben. - -/// - -//// - -Dieser Befehl erstellt eine neue virtuelle Umgebung in einem Verzeichnis namens `.venv`. - -/// details | `.venv` oder ein anderer Name - -Sie könnten die virtuelle Umgebung in einem anderen Verzeichnis erstellen, aber es ist eine Konvention, sie `.venv` zu nennen. - -/// - -## Die virtuelle Umgebung aktivieren { #activate-the-virtual-environment } - -Aktivieren Sie die neue virtuelle Umgebung, damit jeder Python-Befehl, den Sie ausführen oder jedes Paket, das Sie installieren, diese Umgebung verwendet. - -/// tip | Tipp - -Tun Sie dies **jedes Mal**, wenn Sie eine **neue Terminalsitzung** starten, um an dem Projekt zu arbeiten. - -/// - -//// tab | Linux, macOS - -
- -```console -$ source .venv/bin/activate -``` - -
- -//// - -//// tab | Windows PowerShell - -
- -```console -$ .venv\Scripts\Activate.ps1 -``` - -
- -//// - -//// tab | Windows Bash - -Oder wenn Sie Bash für Windows verwenden (z. B. [Git Bash](https://gitforwindows.org/)): - -
- -```console -$ source .venv/Scripts/activate -``` - -
- -//// - -/// tip | Tipp - -Jedes Mal, wenn Sie ein **neues Paket** in dieser Umgebung installieren, aktivieren Sie die Umgebung erneut. - -So stellen Sie sicher, dass, wenn Sie ein **Terminalprogramm (CLI)** verwenden, das durch dieses Paket installiert wurde, Sie das aus Ihrer virtuellen Umgebung verwenden und nicht eines, das global installiert ist, wahrscheinlich mit einer anderen Version als der, die Sie benötigen. - -/// - -## Testen, ob die virtuelle Umgebung aktiv ist { #check-the-virtual-environment-is-active } - -Testen Sie, dass die virtuelle Umgebung aktiv ist (der vorherige Befehl funktioniert hat). - -/// tip | Tipp - -Dies ist **optional**, aber es ist eine gute Möglichkeit, **zu überprüfen**, ob alles wie erwartet funktioniert und Sie die beabsichtigte virtuelle Umgebung verwenden. - -/// - -//// tab | Linux, macOS, Windows Bash - -
- -```console -$ which python - -/home/user/code/awesome-project/.venv/bin/python -``` - -
- -Wenn es das `python`-Binary in `.venv/bin/python` anzeigt, innerhalb Ihres Projekts (in diesem Fall `awesome-project`), dann hat es funktioniert. 🎉 - -//// +`uv` erstellt automatisch eine virtuelle Umgebung für das Projekt. Sie müssen selbst keine erstellen oder aktivieren. -//// tab | Windows PowerShell +Führen Sie Befehle innerhalb der Projektumgebung mit `uv run` aus, zum Beispiel:
```console -$ Get-Command python - -C:\Users\user\code\awesome-project\.venv\Scripts\python +$ uv run fastapi dev ```
-Wenn es das `python`-Binary in `.venv\Scripts\python` anzeigt, innerhalb Ihres Projekts (in diesem Fall `awesome-project`), dann hat es funktioniert. 🎉 - -//// - -## `pip` aktualisieren { #upgrade-pip } - -/// tip | Tipp - -Wenn Sie [`uv`](https://github.com/astral-sh/uv) verwenden, würden Sie das verwenden, um Dinge zu installieren anstelle von `pip`, sodass Sie `pip` nicht aktualisieren müssen. 😎 - -/// - -Wenn Sie `pip` verwenden, um Pakete zu installieren (es wird standardmäßig mit Python geliefert), sollten Sie es auf die neueste Version **aktualisieren**. - -Viele exotische Fehler beim Installieren eines Pakets werden einfach dadurch gelöst, dass zuerst `pip` aktualisiert wird. - -/// tip | Tipp - -Normalerweise würden Sie dies **einmal** tun, unmittelbar nachdem Sie die virtuelle Umgebung erstellt haben. - -/// - -Stellen Sie sicher, dass die virtuelle Umgebung aktiv ist (mit dem obigen Befehl) und führen Sie dann aus: - -
- -```console -$ python -m pip install --upgrade pip - ----> 100% -``` - -
- -/// tip | Tipp - -Manchmal kann beim Versuch, `pip` zu aktualisieren, der Fehler **`No module named pip`** auftreten. - -Wenn das passiert, installieren und aktualisieren Sie `pip` mit dem folgenden Befehl: - -
- -```console -$ python -m ensurepip --upgrade - ----> 100% -``` - -
- -Dieser Befehl installiert `pip`, falls es noch nicht installiert ist, und stellt außerdem sicher, dass die installierte Version von `pip` mindestens so aktuell ist wie die in `ensurepip` verfügbare. - -/// - -## `.gitignore` hinzufügen { #add-gitignore } - -Wenn Sie **Git** verwenden (was Sie sollten), fügen Sie eine `.gitignore`-Datei hinzu, um alles in Ihrem `.venv` von Git auszuschließen. - -/// tip | Tipp - -Wenn Sie [`uv`](https://github.com/astral-sh/uv) verwendet haben, um die virtuelle Umgebung zu erstellen, hat es dies bereits für Sie getan, Sie können diesen Schritt überspringen. 😎 - -/// - -/// tip | Tipp - -Tun Sie dies **einmal**, unmittelbar nachdem Sie die virtuelle Umgebung erstellt haben. - -/// - -
- -```console -$ echo "*" > .venv/.gitignore -``` - -
- -/// details | Was dieser Befehl bedeutet - -* `echo "*"`: wird den Text `*` im Terminal „drucken“ (der nächste Teil ändert das ein wenig) -* `>`: alles, was durch den Befehl links von `>` im Terminal ausgegeben wird, sollte nicht gedruckt, sondern stattdessen in die Datei geschrieben werden, die rechts von `>` kommt -* `.gitignore`: der Name der Datei, in die der Text geschrieben werden soll - -Und `*` bedeutet für Git „alles“. Also wird alles im `.venv`-Verzeichnis ignoriert. - -Dieser Befehl erstellt eine Datei `.gitignore` mit dem Inhalt: - -```gitignore -* -``` - -/// - -## Pakete installieren { #install-packages } - -Nachdem Sie die Umgebung aktiviert haben, können Sie Pakete darin installieren. - -/// tip | Tipp - -Tun Sie dies **einmal**, wenn Sie die Pakete installieren oder aktualisieren, die Ihr Projekt benötigt. - -Wenn Sie eine Version aktualisieren oder ein neues Paket hinzufügen müssen, würden Sie **dies erneut tun**. - -/// - -### Pakete direkt installieren { #install-packages-directly } - -Wenn Sie es eilig haben und keine Datei verwenden möchten, um die Paketanforderungen Ihres Projekts zu deklarieren, können Sie sie direkt installieren. - -/// tip | Tipp - -Es ist eine (sehr) gute Idee, die Pakete und Versionen, die Ihr Programm benötigt, in einer Datei zu speichern (zum Beispiel `requirements.txt` oder `pyproject.toml`). - -/// - -//// tab | `pip` - -
- -```console -$ pip install "fastapi[standard]" - ----> 100% -``` - -
- -//// - -//// tab | `uv` - -Wenn Sie [`uv`](https://github.com/astral-sh/uv) haben: - -
- -```console -$ uv pip install "fastapi[standard]" ----> 100% -``` - -
- -//// - -### Installation von `requirements.txt` { #install-from-requirements-txt } - -Wenn Sie eine `requirements.txt` haben, können Sie diese nun verwenden, um deren Pakete zu installieren. - -//// tab | `pip` - -
- -```console -$ pip install -r requirements.txt ----> 100% -``` - -
- -//// - -//// tab | `uv` - -Wenn Sie [`uv`](https://github.com/astral-sh/uv) haben: - -
- -```console -$ uv pip install -r requirements.txt ----> 100% -``` - -
- -//// - -/// details | `requirements.txt` - -Eine `requirements.txt` mit einigen Paketen könnte folgendermaßen aussehen: - -```requirements.txt -fastapi[standard]==0.113.0 -pydantic==2.8.0 -``` - -/// - -## Ihr Programm ausführen { #run-your-program } - -Nachdem Sie die virtuelle Umgebung aktiviert haben, können Sie Ihr Programm ausführen, und es wird das Python innerhalb Ihrer virtuellen Umgebung mit den Paketen verwenden, die Sie dort installiert haben. - -
- -```console -$ python main.py - -Hello World -``` - -
- -## Ihren Editor konfigurieren { #configure-your-editor } - -Sie würden wahrscheinlich einen Editor verwenden, stellen Sie sicher, dass Sie ihn so konfigurieren, dass er dieselbe virtuelle Umgebung verwendet, die Sie erstellt haben (er wird sie wahrscheinlich automatisch erkennen), sodass Sie Autovervollständigungen und Inline-Fehler erhalten können. - -Zum Beispiel: - -* [VS Code](https://code.visualstudio.com/docs/python/environments#_select-and-activate-an-environment) -* [PyCharm](https://www.jetbrains.com/help/pycharm/creating-virtual-environment.html) - -/// tip | Tipp - -Normalerweise müssen Sie dies nur **einmal** tun, wenn Sie die virtuelle Umgebung erstellen. - -/// - -## Die virtuelle Umgebung deaktivieren { #deactivate-the-virtual-environment } - -Sobald Sie mit der Arbeit an Ihrem Projekt fertig sind, können Sie die virtuelle Umgebung **deaktivieren**. - -
- -```console -$ deactivate -``` - -
- -Auf diese Weise, wenn Sie `python` ausführen, wird nicht versucht, es aus dieser virtuellen Umgebung mit den dort installierten Paketen auszuführen. - -## Bereit zu arbeiten { #ready-to-work } - -Jetzt sind Sie bereit, mit Ihrem Projekt zu arbeiten. - - - -/// tip | Tipp - -Möchten Sie verstehen, was das alles oben bedeutet? - -Lesen Sie weiter. 👇🤓 - -/// - -## Warum virtuelle Umgebungen { #why-virtual-environments } - -Um mit FastAPI zu arbeiten, müssen Sie [Python](https://www.python.org/) installieren. - -Danach müssen Sie FastAPI und alle anderen **Pakete**, die Sie verwenden möchten, **installieren**. - -Um Pakete zu installieren, würden Sie normalerweise den `pip`-Befehl verwenden, der mit Python geliefert wird (oder ähnliche Alternativen). - -Wenn Sie jedoch `pip` direkt verwenden, werden die Pakete in Ihrer **globalen Python-Umgebung** (der globalen Installation von Python) installiert. - -### Das Problem { #the-problem } - -Was ist also das Problem beim Installieren von Paketen in der globalen Python-Umgebung? - -Irgendwann werden Sie wahrscheinlich viele verschiedene Programme schreiben, die von **verschiedenen Paketen** abhängen. Und einige dieser Projekte, an denen Sie arbeiten, werden von **verschiedenen Versionen** desselben Pakets abhängen. 😱 - -Zum Beispiel könnten Sie ein Projekt namens `philosophers-stone` erstellen, dieses Programm hängt von einem anderen Paket namens **`harry`, Version `1`** ab. Also müssen Sie `harry` installieren. - -```mermaid -flowchart LR - stone(philosophers-stone) -->|benötigt| harry-1[harry v1] -``` - -Dann erstellen Sie zu einem späteren Zeitpunkt ein weiteres Projekt namens `prisoner-of-azkaban`, und dieses Projekt hängt ebenfalls von `harry` ab, aber dieses Projekt benötigt **`harry` Version `3`**. - -```mermaid -flowchart LR - azkaban(prisoner-of-azkaban) --> |benötigt| harry-3[harry v3] -``` - -Aber jetzt ist das Problem, wenn Sie die Pakete global (in der globalen Umgebung) installieren anstatt in einer lokalen **virtuellen Umgebung**, müssen Sie wählen, welche Version von `harry` zu installieren ist. - -Wenn Sie `philosophers-stone` ausführen möchten, müssen Sie zuerst `harry` Version `1` installieren, zum Beispiel mit: - -
- -```console -$ pip install "harry==1" -``` - -
- -Und dann hätten Sie `harry` Version `1` in Ihrer globalen Python-Umgebung installiert. - -```mermaid -flowchart LR - subgraph global[globale Umgebung] - harry-1[harry v1] - end - subgraph stone-project[philosophers-stone-Projekt] - stone(philosophers-stone) -->|benötigt| harry-1 - end -``` - -Aber dann, wenn Sie `prisoner-of-azkaban` ausführen möchten, müssen Sie `harry` Version `1` deinstallieren und `harry` Version `3` installieren (oder einfach die Version `3` installieren, was die Version `1` automatisch deinstallieren würde). - -
- -```console -$ pip install "harry==3" -``` - -
- -Und dann hätten Sie `harry` Version `3` in Ihrer globalen Python-Umgebung installiert. - -Und wenn Sie versuchen, `philosophers-stone` erneut auszuführen, besteht die Möglichkeit, dass es **nicht funktioniert**, weil es `harry` Version `1` benötigt. - -```mermaid -flowchart LR - subgraph global[globale Umgebung] - harry-1[harry v1] - style harry-1 fill:#ccc,stroke-dasharray: 5 5 - harry-3[harry v3] - end - subgraph stone-project[philosophers-stone-Projekt] - stone(philosophers-stone) -.-x|⛔️| harry-1 - end - subgraph azkaban-project[prisoner-of-azkaban-Projekt] - azkaban(prisoner-of-azkaban) --> |benötigt| harry-3 - end -``` - -/// tip | Tipp - -Es ist sehr üblich in Python-Paketen, alles zu versuchen, **Breaking Changes** in **neuen Versionen** zu vermeiden, aber es ist besser, auf Nummer sicher zu gehen und neue Versionen absichtlich zu installieren und wenn Sie die Tests ausführen können, sicherzustellen, dass alles korrekt funktioniert. - -/// - -Stellen Sie sich das jetzt mit **vielen** anderen **Paketen** vor, von denen alle Ihre **Projekte abhängen**. Das ist sehr schwierig zu verwalten. Und Sie würden wahrscheinlich einige Projekte mit einigen **inkompatiblen Versionen** der Pakete ausführen und nicht wissen, warum etwas nicht funktioniert. - -Darüber hinaus könnte es je nach Ihrem Betriebssystem (z. B. Linux, Windows, macOS) bereits mit installiertem Python geliefert worden sein. Und in diesem Fall hatte es wahrscheinlich einige Pakete mit bestimmten Versionen **installiert**, die von Ihrem System benötigt werden. Wenn Sie Pakete in der globalen Python-Umgebung installieren, könnten Sie einige der Programme, die mit Ihrem Betriebssystem geliefert wurden, **kaputtmachen**. - -## Wo werden Pakete installiert { #where-are-packages-installed } - -Wenn Sie Python installieren, werden einige Verzeichnisse mit einigen Dateien auf Ihrem Rechner erstellt. - -Einige dieser Verzeichnisse sind dafür zuständig, alle Pakete, die Sie installieren, aufzunehmen. - -Wenn Sie ausführen: - -
- -```console -// Führen Sie dies jetzt nicht aus, es ist nur ein Beispiel 🤓 -$ pip install "fastapi[standard]" ----> 100% -``` - -
- -Das lädt eine komprimierte Datei mit dem FastAPI-Code herunter, normalerweise von [PyPI](https://pypi.org/project/fastapi/). - -Es wird auch Dateien für andere Pakete **herunterladen**, von denen FastAPI abhängt. - -Dann wird es all diese Dateien **extrahieren** und sie in ein Verzeichnis auf Ihrem Rechner legen. - -Standardmäßig werden diese heruntergeladenen und extrahierten Dateien in das Verzeichnis gelegt, das mit Ihrer Python-Installation kommt, das ist die **globale Umgebung**. - -## Was sind virtuelle Umgebungen { #what-are-virtual-environments } - -Die Lösung für die Probleme, alle Pakete in der globalen Umgebung zu haben, besteht darin, eine **virtuelle Umgebung für jedes Projekt** zu verwenden, an dem Sie arbeiten. - -Eine virtuelle Umgebung ist ein **Verzeichnis**, sehr ähnlich zu dem globalen, in dem Sie die Pakete für ein Projekt installieren können. - -Auf diese Weise hat jedes Projekt seine eigene virtuelle Umgebung (`.venv`-Verzeichnis) mit seinen eigenen Paketen. - -```mermaid -flowchart TB - subgraph stone-project[philosophers-stone-Projekt] - stone(philosophers-stone) --->|benötigt| harry-1 - subgraph venv1[.venv] - harry-1[harry v1] - end - end - subgraph azkaban-project[prisoner-of-azkaban-Projekt] - azkaban(prisoner-of-azkaban) --->|benötigt| harry-3 - subgraph venv2[.venv] - harry-3[harry v3] - end - end - stone-project ~~~ azkaban-project -``` - -## Was bedeutet das Aktivieren einer virtuellen Umgebung { #what-does-activating-a-virtual-environment-mean } - -Wenn Sie eine virtuelle Umgebung aktivieren, zum Beispiel mit: - -//// tab | Linux, macOS - -
- -```console -$ source .venv/bin/activate -``` - -
- -//// - -//// tab | Windows PowerShell - -
- -```console -$ .venv\Scripts\Activate.ps1 -``` - -
- -//// - -//// tab | Windows Bash - -Oder wenn Sie Bash für Windows verwenden (z. B. [Git Bash](https://gitforwindows.org/)): - -
- -```console -$ source .venv/Scripts/activate -``` - -
- -//// - -Dieser Befehl erstellt oder ändert einige [Umgebungsvariablen](environment-variables.md), die für die nächsten Befehle verfügbar sein werden. - -Eine dieser Variablen ist die `PATH`-Variable. - -/// tip | Tipp - -Sie können mehr über die `PATH`-Umgebungsvariable im Abschnitt [Umgebungsvariablen](environment-variables.md#path-environment-variable) erfahren. - -/// - -Das Aktivieren einer virtuellen Umgebung fügt deren Pfad `.venv/bin` (auf Linux und macOS) oder `.venv\Scripts` (auf Windows) zur `PATH`-Umgebungsvariable hinzu. - -Angenommen, die `PATH`-Variable sah vor dem Aktivieren der Umgebung so aus: - -//// tab | Linux, macOS - -```plaintext -/usr/bin:/bin:/usr/sbin:/sbin -``` - -Das bedeutet, dass das System nach Programmen sucht in: - -* `/usr/bin` -* `/bin` -* `/usr/sbin` -* `/sbin` - -//// - -//// tab | Windows - -```plaintext -C:\Windows\System32 -``` - -Das bedeutet, dass das System nach Programmen sucht in: - -* `C:\Windows\System32` - -//// - -Nach dem Aktivieren der virtuellen Umgebung würde die `PATH`-Variable folgendermaßen aussehen: - -//// tab | Linux, macOS - -```plaintext -/home/user/code/awesome-project/.venv/bin:/usr/bin:/bin:/usr/sbin:/sbin -``` - -Das bedeutet, dass das System nun zuerst nach Programmen sucht in: - -```plaintext -/home/user/code/awesome-project/.venv/bin -``` - -bevor es in den anderen Verzeichnissen sucht. - -Wenn Sie also `python` im Terminal eingeben, wird das System das Python-Programm in - -```plaintext -/home/user/code/awesome-project/.venv/bin/python -``` - -finden und dieses verwenden. - -//// - -//// tab | Windows - -```plaintext -C:\Users\user\code\awesome-project\.venv\Scripts;C:\Windows\System32 -``` - -Das bedeutet, dass das System nun zuerst nach Programmen sucht in: - -```plaintext -C:\Users\user\code\awesome-project\.venv\Scripts -``` - -bevor es in den anderen Verzeichnissen sucht. - -Wenn Sie also `python` im Terminal eingeben, wird das System das Python-Programm in - -```plaintext -C:\Users\user\code\awesome-project\.venv\Scripts\python -``` - -finden und dieses verwenden. - -//// - -Ein wichtiger Punkt ist, dass es den Pfad der virtuellen Umgebung am **Anfang** der `PATH`-Variable platziert. Das System wird es **vor** allen anderen verfügbaren Pythons finden. Auf diese Weise, wenn Sie `python` ausführen, wird das Python **aus der virtuellen Umgebung** verwendet anstelle eines anderen `python` (zum Beispiel, einem `python` aus einer globalen Umgebung). - -Das Aktivieren einer virtuellen Umgebung ändert auch ein paar andere Dinge, aber dies ist eines der wichtigsten Dinge, die es tut. - -## Testen einer virtuellen Umgebung { #checking-a-virtual-environment } - -Wenn Sie testen, ob eine virtuelle Umgebung aktiv ist, zum Beispiel mit: - -//// tab | Linux, macOS, Windows Bash - -
- -```console -$ which python - -/home/user/code/awesome-project/.venv/bin/python -``` - -
- -//// - -//// tab | Windows PowerShell - -
- -```console -$ Get-Command python - -C:\Users\user\code\awesome-project\.venv\Scripts\python -``` - -
- -//// - -bedeutet das, dass das `python`-Programm, das verwendet wird, das in der **virtuellen Umgebung** ist. - -Sie verwenden `which` auf Linux und macOS und `Get-Command` in Windows PowerShell. - -So funktioniert dieser Befehl: Er wird in der `PATH`-Umgebungsvariable nachsehen und **jeden Pfad in der Reihenfolge durchgehen**, um das Programm namens `python` zu finden. Sobald er es findet, wird er Ihnen **den Pfad** zu diesem Programm anzeigen. - -Der wichtigste Punkt ist, dass, wenn Sie `python` aufrufen, genau dieses „`python`“ ausgeführt wird. - -So können Sie überprüfen, ob Sie sich in der richtigen virtuellen Umgebung befinden. - -/// tip | Tipp - -Es ist einfach, eine virtuelle Umgebung zu aktivieren, ein Python zu bekommen und dann **zu einem anderen Projekt zu wechseln**. - -Und das zweite Projekt **würde nicht funktionieren**, weil Sie das **falsche Python** verwenden, aus einer virtuellen Umgebung für ein anderes Projekt. - -Es ist nützlich, überprüfen zu können, welches `python` verwendet wird. 🤓 - -/// - -## Warum eine virtuelle Umgebung deaktivieren { #why-deactivate-a-virtual-environment } - -Zum Beispiel könnten Sie an einem Projekt `philosophers-stone` arbeiten, diese virtuelle Umgebung **aktivieren**, Pakete installieren und mit dieser Umgebung arbeiten. - -Und dann möchten Sie an **einem anderen Projekt** `prisoner-of-azkaban` arbeiten. - -Sie gehen zu diesem Projekt: - -
- -```console -$ cd ~/code/prisoner-of-azkaban -``` - -
- -Wenn Sie die virtuelle Umgebung für `philosophers-stone` nicht deaktivieren, wird beim Ausführen von `python` im Terminal versucht, das Python von `philosophers-stone` zu verwenden. - -
- -```console -$ cd ~/code/prisoner-of-azkaban - -$ python main.py - -// Fehler beim Importieren von sirius, es ist nicht installiert 😱 -Traceback (most recent call last): - File "main.py", line 1, in - import sirius -``` - -
- -Wenn Sie jedoch die virtuelle Umgebung deaktivieren und die neue für `prisoner-of-azkaban` aktivieren, wird beim Ausführen von `python` das Python aus der virtuellen Umgebung in `prisoner-of-azkaban` verwendet. - -
- -```console -$ cd ~/code/prisoner-of-azkaban - -// Sie müssen nicht im alten Verzeichnis sein, um zu deaktivieren, Sie können dies überall tun, sogar nachdem Sie zum anderen Projekt gewechselt haben 😎 -$ deactivate - -// Die virtuelle Umgebung in prisoner-of-azkaban/.venv 🚀 aktivieren -$ source .venv/bin/activate - -// Jetzt, wenn Sie python ausführen, wird das Paket sirius in dieser virtuellen Umgebung gefunden ✨ -$ python main.py - -I solemnly swear 🐺 -``` - -
- -## Alternativen { #alternatives } - -Dies ist ein einfacher Leitfaden, um Ihnen den Einstieg zu erleichtern und Ihnen beizubringen, wie alles **unter der Haube** funktioniert. - -Es gibt viele **Alternativen** zur Verwaltung von virtuellen Umgebungen, Paketabhängigkeiten (Anforderungen), Projekten. - -Sobald Sie bereit sind und ein Tool verwenden möchten, das **das gesamte Projekt verwaltet**, Paketabhängigkeiten, virtuelle Umgebungen usw., würde ich Ihnen vorschlagen, [uv](https://github.com/astral-sh/uv) auszuprobieren. - -`uv` kann viele Dinge tun, es kann: - -* **Python für Sie installieren**, einschließlich verschiedener Versionen -* Die **virtuelle Umgebung** für Ihre Projekte verwalten -* **Pakete installieren** -* Paket**abhängigkeiten und Versionen** für Ihr Projekt verwalten -* Sicherstellen, dass Sie eine **exakte** Menge an Paketen und Versionen zur Installation haben, einschließlich ihrer Abhängigkeiten, damit Sie sicher sein können, dass Sie Ihr Projekt in der Produktionsumgebung genauso ausführen können wie auf Ihrem Rechner während der Entwicklung, dies wird **Locking** genannt -* Und viele andere Dinge - -## Fazit { #conclusion } - -Wenn Sie das alles gelesen und verstanden haben, wissen Sie jetzt **viel mehr** über virtuelle Umgebungen als viele Entwickler da draußen. 🤓 +## Mehr erfahren { #learn-more } -Das Wissen über diese Details wird in Zukunft wahrscheinlich nützlich sein, wenn Sie etwas debuggen, das komplex erscheint, aber Sie werden wissen, **wie alles unter der Haube funktioniert**. 😎 +Lesen Sie den [Leitfaden zu virtuellen Umgebungen](https://tiangolo.com/guides/virtual-environments/), um zu erfahren, wie virtuelle Umgebungen unter der Haube funktionieren, einschließlich Aktivierung und dem alternativen `python -m venv`- und `pip`-Workflow.