From 16c186f0aceb0ae94a73f6ebd8b9b2e20dda113f Mon Sep 17 00:00:00 2001 From: Nils Lindemann Date: Wed, 4 Oct 2023 04:38:48 +0200 Subject: [PATCH 01/12] =?UTF-8?q?=F0=9F=8C=90=20Add=20German=20translation?= =?UTF-8?q?=20for=20`docs/de/docs/tutorial/handling-errors.md`?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit * Full translation * In sync with current docs/en/docs/tutorial/handling-errors.md * Manually translated (Google translate rarely used) * Checked for errors using LanguageTool * Manually checked --- docs/de/docs/tutorial/handling-errors.md | 261 +++++++++++++++++++++++ 1 file changed, 261 insertions(+) create mode 100644 docs/de/docs/tutorial/handling-errors.md diff --git a/docs/de/docs/tutorial/handling-errors.md b/docs/de/docs/tutorial/handling-errors.md new file mode 100644 index 0000000000000..49116b434f3eb --- /dev/null +++ b/docs/de/docs/tutorial/handling-errors.md @@ -0,0 +1,261 @@ +# Fehlerbehandlung + +Es gibt viele Situationen, in denen Sie einem Client, der Ihre API benutzt, einen Fehler zurückgeben müssen. + +Dieser Client könnte ein Browser mit einem Frontend, Code von jemand anderem, ein IoT-Gerät, usw., sein. + +Sie müssten beispielsweise einem Client sagen: + +* Dass er nicht die notwendigen Berechtigungen hat, eine Aktion auszuführen. +* Dass er zu einer Ressource keinen Zugriff hat. +* Dass die Ressource, auf die er zugreifen möchte, nicht existiert. +* usw. + +In diesen Fällen geben Sie normalerweise einen **HTTP-Statuscode** im Bereich **400** (400 bis 499) zurück. + +Das ist vergleichbar mit den HTTP-Statuscodes im Bereich 200 (von 200 bis 299). Diese "200"er Statuscodes bedeuten, dass der Request in einem bestimmten Aspekt ein "Success" ("Erfolg") war. + +Die Statuscodes im 400er-Bereich bedeuten hingegen, dass es einen Fehler gab. + +Erinnern Sie sich an all diese **404 Not Found** Fehler (und Witze)? + +## `HTTPException` verwenden + +Um HTTP-Responses mit Fehlern zum Client zurückzugeben, verwenden Sie `HTTPException`. + +### `HTTPException` importieren + +```Python hl_lines="1" +{!../../../docs_src/handling_errors/tutorial001.py!} +``` + +### Eine `HTTPException` in Ihrem Code werfen + +`HTTPException` ist eine normale Python-Exception mit einigen zusätzlichen Daten, die für APIs relevant sind. + +Weil es eine Python-Exception ist, geben Sie sie nicht zurück, (`return`), sondern Sie werfen sie (`raise`). + +Das bedeutet auch, wenn Sie in einer Hilfsfunktion sind, die Sie von ihrer *Pfadoperation-Funktion* aus aufrufen, und Sie werfen eine `HTTPException` von innerhalb dieser Hilfsfunktion, dann wird der Rest der *Pfadoperation-Funktion* nicht ausgeführt, sondern der Request wird sofort abgebrochen und der HTTP-Error der `HTTP-Exception` wird zum Client gesendet. + +Der Vorteil, eine Exception zu werfen (`raise`), statt sie zurückzugeben (`return`) wird im Abschnitt über Abhängigkeiten und Sicherheit klarer werden. + +Im folgenden Beispiel werfen wir, wenn der Client eine ID anfragt, die nicht existiert, eine Exception mit dem Statuscode `404`. + +```Python hl_lines="11" +{!../../../docs_src/handling_errors/tutorial001.py!} +``` + +### Die resultierende Response + +Wenn der Client `http://example.com/items/foo` anfragt (ein `item_id` `"foo"`), erhält dieser Client einen HTTP-Statuscode 200 und folgende JSON-Response: + +```JSON +{ + "item": "The Foo Wrestlers" +} +``` + +Aber wenn der Client `http://example.com/items/bar` anfragt (ein nicht-existierendes `item_id` `"bar"`), erhält er einen HTTP-Statuscode 404 (der "Not Found"-Fehler), und eine JSON-Response wie folgt: + +```JSON +{ + "detail": "Item not found" +} +``` + +!!! tip + Wenn Sie eine `HTTPException` werfen, können Sie dem Parameter `detail` jeden Wert übergeben, der nach JSON konvertiert werden kann, nicht nur `str`. + + Zum Beispiel ein `dict`, eine `list`, usw. + + Das wird automatisch von **FastAPI** gehandhabt und nach JSON konvertiert. + +## Benutzerdefinierte Header hinzufügen + +Es gibt Situationen, da ist es nützlich, dem HTTP-Error benutzerdefinierte Header hinzufügen zu können, etwa in einigen Sicherheitsszenarien. + +Sie müssen das wahrscheinlich nicht direkt in ihrem Code verwenden. + +Aber falls es in einem fortgeschrittenen Szenario notwendig ist, können Sie benutzerdefinierte Header wie folgt hinzufügen: + +```Python hl_lines="14" +{!../../../docs_src/handling_errors/tutorial002.py!} +``` + +## Benutzerdefinierte Exceptionhandler definieren + +Sie können benutzerdefinierte Exceptionhandler hinzufügen, mithilfe derselben Tools für Exceptions von Starlette. + +Nehmen wir an, Sie haben eine benutzerdefinierte Exception `UnicornException`, die Sie (oder eine Bibliothek, die Sie verwenden) `raise`n könnten. + +Und Sie möchten diese Exception global mit FastAPI handhaben. + +Sie könnten einen benutzerdefinierten Exceptionhandler mittels `@app.exception_handler()` hinzufügen: + +```Python hl_lines="5-7 13-18 24" +{!../../../docs_src/handling_errors/tutorial003.py!} +``` + +Wenn Sie nun `/unicorns/yolo` anfragen, `raise`d die *Pfadoperation* eine `UnicornException`. + +Aber es wird vom `unicorn_exception_handler` gehandhabt. + +Sie erhalten also einen sauberen Error mit einem Statuscode `418` und dem JSON-Inhalt: + +```JSON +{"message": "Oops! yolo did something. There goes a rainbow..."} +``` + +!!! note "Technische Details" + Sie können auch `from starlette.requests import Request` und `from starlette.responses import JSONResponse` verwenden. + + **FastAPI** bietet die gleichen `starlette.responses` auch via `fastapi.responses` an, als Annehmlichkeit für den Entwickler. Aber die meisten verfügbaren Responses kommen direkt von Starlette. Das Gleiche gilt für `Request`. + +## Die Default-Exceptionhandler überschreiben + +**FastAPI** hat einige Default-Exceptionhandler. + +Diese Handler kümmern sich darum, Default-JSON-Responses zurückzugeben, wenn Sie eine `HTTPException` `raise`n, und wenn der Request ungültige Daten enthält. + +Sie können diese Exceptionhandler mit ihren eigenen überschreiben. + +### Request-Validierung-Exceptions überschreiben + +Wenn ein Request ungültige Daten enthält, wirft **FastAPI** intern einen `RequestValidationError`. + +Und bietet auch einen Default-Exceptionhandler dafür. + +Um diesen zu überschreiben, importieren Sie den `RequestValidationError` und verwenden Sie ihn in `@app.exception_handler(RequestValidationError)`, um Ihren Exceptionhandler zu dekorieren. + +Der Exceptionhandler wird einen `Request` und die Exception entgegennehmen. + +```Python hl_lines="2 14-16" +{!../../../docs_src/handling_errors/tutorial004.py!} +``` + +Wenn Sie nun `/items/foo` besuchen, erhalten Sie statt des Default-JSON-Errors: + +```JSON +{ + "detail": [ + { + "loc": [ + "path", + "item_id" + ], + "msg": "value is not a valid integer", + "type": "type_error.integer" + } + ] +} +``` + +eine Textversion: + +``` +1 validation error +path -> item_id + value is not a valid integer (type=type_error.integer) +``` + +#### `RequestValidationError` vs. `ValidationError` + +!!! warning "Achtung" + Das folgende sind technische Details, die Sie überspringen können, wenn sie für Sie nicht wichtig sind. + +`RequestValidationError` ist eine Kindklasse von Pydantics `ValidationError`. + +**FastAPI** verwendet diesen, sodass Sie, wenn Sie ein Pydantic-Modell für `response_model` verwenden, und ihre Daten fehlerhaft sind, einen Fehler in ihrem Log sehen. + +Aber der Client/Nutzer sieht ihn nicht. Stattdessen erhält der Client einen "Internal Server Error" mit einem HTTP-Statuscode `500`. + +Das ist, wie es sein sollte, denn wenn Sie einen Pydantic-`ValidationError` in Ihrer *Response* oder irgendwo sonst in ihrem Code haben (es sei denn, im Request des Clients), ist das tatsächlich ein Bug in ihrem Code. + +Und während Sie den Fehler beheben, sollten ihre Clients/Nutzer keinen Zugriff auf interne Informationen über den Fehler haben, da das eine Sicherheitslücke aufdecken könnte. + +### den `HTTPException`-Handler überschreiben + +Genauso können Sie den `HTTPException`-Handler überschreiben. + +Zum Beispiel könnten Sie eine Klartext-Response statt JSON für diese Fehler zurückgeben wollen: + +```Python hl_lines="3-4 9-11 22" +{!../../../docs_src/handling_errors/tutorial004.py!} +``` + +!!! note "Technische Details" + Sie können auch `from starlette.responses import PlainTextResponse` verwenden. + + **FastAPI** bietet die gleichen `starlette.responses` auch via `fastapi.responses` an, als Annehmlichkeit für den Entwickler. Aber die meisten verfügbaren Responses kommen direkt von Starlette. + +### Den `RequestValidationError`-Body verwenden + +Der `RequestValidationError` enthält den empfangenen `body` mit den ungültigen Daten. + +Sie könnten diesen verwenden, während Sie Ihre Anwendung entwickeln, um den Body zu loggen und zu debuggen, ihn zum Nutzer zurückzugeben, usw. + +```Python hl_lines="14" +{!../../../docs_src/handling_errors/tutorial005.py!} +``` + +Jetzt versuchen Sie, einen ungültigen Artikel zu senden: + +```JSON +{ + "title": "towel", + "size": "XL" +} +``` + +Sie erhalten eine Response, die Ihnen sagt, dass die Daten ungültig sind, und welche den empfangenen Body enthält. + +```JSON hl_lines="12-15" +{ + "detail": [ + { + "loc": [ + "body", + "size" + ], + "msg": "value is not a valid integer", + "type": "type_error.integer" + } + ], + "body": { + "title": "towel", + "size": "XL" + } +} +``` + +#### FastAPIs `HTTPException` vs. Starlettes `HTTPException` + +**FastAPI** hat seine eigene `HTTPException`. + +Und **FastAPI**s `HTTPException`-Fehlerklasse erbt von Starlettes `HTTPException`-Fehlerklasse. + +Der einzige Unterschied ist, dass **FastAPI**s `HTTPException` Ihnen erlaubt, Header zur Response hinzuzufügen. + +Das wird intern gebraucht/verwendet für OAuth 2.0 und für einige Sicherheits-Tools. + +Sie können also weiterhin **FastAPI**s `HTTPException` wie üblich in Ihrem Code werfen. + +Aber wenn Sie einen Exceptionhandler registrieren, registrieren Sie ihn für Starlettes `HTTPException`. + +Auf diese Weise wird Ihr Handler, wenn irgendein Teil von Starlettes internem Code, oder eine Starlette-Erweiterung, oder -Plugin eine Starlette-`HTTPException` wirft, in der Lage sein, diese zu fangen und zu handhaben. + +Damit wir in diesem Beispiel beide `HTTPException`s im selben Code haben können, benennen wir Starlettes Exception um zu `StarletteHTTPException`: + +```Python +from starlette.exceptions import HTTPException as StarletteHTTPException +``` + +### **FastAPI**s Exceptionhandler wiederverwenden + +Wenn Sie die Exception zusammen mit denselben Default-Exceptionhandlern von **FastAPI** verwenden möchten, können Sie die Default-Exceptionhandler von `fastapi.Exception_handlers` importieren und wiederverwenden: + +```Python hl_lines="2-5 15 21" +{!../../../docs_src/handling_errors/tutorial006.py!} +``` + +In diesem Beispiel `print`en Sie nur den Fehler mit einer sehr ausdrucksstarken Nachricht, aber Sie sehen, worauf wir hinauswollen. Sie können mit der Exception etwas machen und dann einfach die Default-Exceptionhandler wiederverwenden. From 8697d0d0d95a938f44ca9075ce3d894c55161588 Mon Sep 17 00:00:00 2001 From: Nils Lindemann Date: Wed, 4 Oct 2023 05:34:14 +0200 Subject: [PATCH 02/12] Another Review Reading the preview --- docs/de/docs/tutorial/handling-errors.md | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/docs/de/docs/tutorial/handling-errors.md b/docs/de/docs/tutorial/handling-errors.md index 49116b434f3eb..78f08d36f054a 100644 --- a/docs/de/docs/tutorial/handling-errors.md +++ b/docs/de/docs/tutorial/handling-errors.md @@ -68,7 +68,7 @@ Aber wenn der Client `http://example.com/items/bar` anfragt (ein nicht-existiere Zum Beispiel ein `dict`, eine `list`, usw. - Das wird automatisch von **FastAPI** gehandhabt und nach JSON konvertiert. + Das wird automatisch von **FastAPI** gehandhabt und der Wert nach JSON konvertiert. ## Benutzerdefinierte Header hinzufügen @@ -98,7 +98,7 @@ Sie könnten einen benutzerdefinierten Exceptionhandler mittels `@app.exception_ Wenn Sie nun `/unicorns/yolo` anfragen, `raise`d die *Pfadoperation* eine `UnicornException`. -Aber es wird vom `unicorn_exception_handler` gehandhabt. +Aber diese wird von `unicorn_exception_handler` gehandhabt. Sie erhalten also einen sauberen Error mit einem Statuscode `418` und dem JSON-Inhalt: @@ -169,7 +169,7 @@ path -> item_id Aber der Client/Nutzer sieht ihn nicht. Stattdessen erhält der Client einen "Internal Server Error" mit einem HTTP-Statuscode `500`. -Das ist, wie es sein sollte, denn wenn Sie einen Pydantic-`ValidationError` in Ihrer *Response* oder irgendwo sonst in ihrem Code haben (es sei denn, im Request des Clients), ist das tatsächlich ein Bug in ihrem Code. +Das ist, wie es sein sollte, denn wenn Sie einen Pydantic-`ValidationError` in Ihrer *Response* oder irgendwo sonst in ihrem Code haben (es sei denn, im *Request* des Clients), ist das tatsächlich ein Bug in ihrem Code. Und während Sie den Fehler beheben, sollten ihre Clients/Nutzer keinen Zugriff auf interne Informationen über den Fehler haben, da das eine Sicherheitslücke aufdecken könnte. From 8e5dea49f4a65a747bd972600849aeaf8b74d401 Mon Sep 17 00:00:00 2001 From: Nils Lindemann Date: Sun, 22 Oct 2023 17:56:14 +0200 Subject: [PATCH 03/12] "Utility" -> "Werkzeug" --- docs/de/docs/tutorial/handling-errors.md | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/docs/de/docs/tutorial/handling-errors.md b/docs/de/docs/tutorial/handling-errors.md index 78f08d36f054a..41727a6fb1e47 100644 --- a/docs/de/docs/tutorial/handling-errors.md +++ b/docs/de/docs/tutorial/handling-errors.md @@ -84,7 +84,7 @@ Aber falls es in einem fortgeschrittenen Szenario notwendig ist, können Sie ben ## Benutzerdefinierte Exceptionhandler definieren -Sie können benutzerdefinierte Exceptionhandler hinzufügen, mithilfe derselben Tools für Exceptions von Starlette. +Sie können benutzerdefinierte Exceptionhandler hinzufügen, mithilfe derselben Werkzeuge für Exceptions von Starlette. Nehmen wir an, Sie haben eine benutzerdefinierte Exception `UnicornException`, die Sie (oder eine Bibliothek, die Sie verwenden) `raise`n könnten. @@ -236,7 +236,7 @@ Und **FastAPI**s `HTTPException`-Fehlerklasse erbt von Starlettes `HTTPException Der einzige Unterschied ist, dass **FastAPI**s `HTTPException` Ihnen erlaubt, Header zur Response hinzuzufügen. -Das wird intern gebraucht/verwendet für OAuth 2.0 und für einige Sicherheits-Tools. +Das wird intern gebraucht/verwendet für OAuth 2.0 und für einige Sicherheits-Werkzeuge. Sie können also weiterhin **FastAPI**s `HTTPException` wie üblich in Ihrem Code werfen. From dcb14726826b960dc459daab11f98767401c63a3 Mon Sep 17 00:00:00 2001 From: Nils Lindemann Date: Sun, 22 Oct 2023 18:21:43 +0200 Subject: [PATCH 04/12] "Tip" -> "Tipp" --- docs/de/docs/tutorial/handling-errors.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/docs/de/docs/tutorial/handling-errors.md b/docs/de/docs/tutorial/handling-errors.md index 41727a6fb1e47..9c198f84d3713 100644 --- a/docs/de/docs/tutorial/handling-errors.md +++ b/docs/de/docs/tutorial/handling-errors.md @@ -63,7 +63,7 @@ Aber wenn der Client `http://example.com/items/bar` anfragt (ein nicht-existiere } ``` -!!! tip +!!! tip "Tipp" Wenn Sie eine `HTTPException` werfen, können Sie dem Parameter `detail` jeden Wert übergeben, der nach JSON konvertiert werden kann, nicht nur `str`. Zum Beispiel ein `dict`, eine `list`, usw. From 3aae1cb132f708f07d817c52f05e81eaa0627c5e Mon Sep 17 00:00:00 2001 From: Nils Lindemann Date: Wed, 25 Oct 2023 23:37:57 +0200 Subject: [PATCH 05/12] "Nutzer" -> "Benutzer" --- docs/de/docs/tutorial/handling-errors.md | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/docs/de/docs/tutorial/handling-errors.md b/docs/de/docs/tutorial/handling-errors.md index 9c198f84d3713..53d1ca43be6bc 100644 --- a/docs/de/docs/tutorial/handling-errors.md +++ b/docs/de/docs/tutorial/handling-errors.md @@ -167,11 +167,11 @@ path -> item_id **FastAPI** verwendet diesen, sodass Sie, wenn Sie ein Pydantic-Modell für `response_model` verwenden, und ihre Daten fehlerhaft sind, einen Fehler in ihrem Log sehen. -Aber der Client/Nutzer sieht ihn nicht. Stattdessen erhält der Client einen "Internal Server Error" mit einem HTTP-Statuscode `500`. +Aber der Client/Benutzer sieht ihn nicht. Stattdessen erhält der Client einen "Internal Server Error" mit einem HTTP-Statuscode `500`. Das ist, wie es sein sollte, denn wenn Sie einen Pydantic-`ValidationError` in Ihrer *Response* oder irgendwo sonst in ihrem Code haben (es sei denn, im *Request* des Clients), ist das tatsächlich ein Bug in ihrem Code. -Und während Sie den Fehler beheben, sollten ihre Clients/Nutzer keinen Zugriff auf interne Informationen über den Fehler haben, da das eine Sicherheitslücke aufdecken könnte. +Und während Sie den Fehler beheben, sollten ihre Clients/Benutzer keinen Zugriff auf interne Informationen über den Fehler haben, da das eine Sicherheitslücke aufdecken könnte. ### den `HTTPException`-Handler überschreiben @@ -192,7 +192,7 @@ Zum Beispiel könnten Sie eine Klartext-Response statt JSON für diese Fehler zu Der `RequestValidationError` enthält den empfangenen `body` mit den ungültigen Daten. -Sie könnten diesen verwenden, während Sie Ihre Anwendung entwickeln, um den Body zu loggen und zu debuggen, ihn zum Nutzer zurückzugeben, usw. +Sie könnten diesen verwenden, während Sie Ihre Anwendung entwickeln, um den Body zu loggen und zu debuggen, ihn zum Benutzer zurückzugeben, usw. ```Python hl_lines="14" {!../../../docs_src/handling_errors/tutorial005.py!} From a3bbfadd73c3ab432b86e00b218c53b79fb3e75a Mon Sep 17 00:00:00 2001 From: Nils Lindemann Date: Sun, 29 Oct 2023 04:56:31 +0100 Subject: [PATCH 06/12] Use typographic quotes --- docs/de/docs/tutorial/handling-errors.md | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/docs/de/docs/tutorial/handling-errors.md b/docs/de/docs/tutorial/handling-errors.md index 53d1ca43be6bc..b5939a7f4c058 100644 --- a/docs/de/docs/tutorial/handling-errors.md +++ b/docs/de/docs/tutorial/handling-errors.md @@ -13,7 +13,7 @@ Sie müssten beispielsweise einem Client sagen: In diesen Fällen geben Sie normalerweise einen **HTTP-Statuscode** im Bereich **400** (400 bis 499) zurück. -Das ist vergleichbar mit den HTTP-Statuscodes im Bereich 200 (von 200 bis 299). Diese "200"er Statuscodes bedeuten, dass der Request in einem bestimmten Aspekt ein "Success" ("Erfolg") war. +Das ist vergleichbar mit den HTTP-Statuscodes im Bereich 200 (von 200 bis 299). Diese „200“er Statuscodes bedeuten, dass der Request in einem bestimmten Aspekt ein „Success“ („Erfolg“) war. Die Statuscodes im 400er-Bereich bedeuten hingegen, dass es einen Fehler gab. @@ -55,7 +55,7 @@ Wenn der Client `http://example.com/items/foo` anfragt (ein `item_id` `"foo"`), } ``` -Aber wenn der Client `http://example.com/items/bar` anfragt (ein nicht-existierendes `item_id` `"bar"`), erhält er einen HTTP-Statuscode 404 (der "Not Found"-Fehler), und eine JSON-Response wie folgt: +Aber wenn der Client `http://example.com/items/bar` anfragt (ein nicht-existierendes `item_id` `"bar"`), erhält er einen HTTP-Statuscode 404 (der „Not Found“-Fehler), und eine JSON-Response wie folgt: ```JSON { @@ -167,7 +167,7 @@ path -> item_id **FastAPI** verwendet diesen, sodass Sie, wenn Sie ein Pydantic-Modell für `response_model` verwenden, und ihre Daten fehlerhaft sind, einen Fehler in ihrem Log sehen. -Aber der Client/Benutzer sieht ihn nicht. Stattdessen erhält der Client einen "Internal Server Error" mit einem HTTP-Statuscode `500`. +Aber der Client/Benutzer sieht ihn nicht. Stattdessen erhält der Client einen „Internal Server Error“ mit einem HTTP-Statuscode `500`. Das ist, wie es sein sollte, denn wenn Sie einen Pydantic-`ValidationError` in Ihrer *Response* oder irgendwo sonst in ihrem Code haben (es sei denn, im *Request* des Clients), ist das tatsächlich ein Bug in ihrem Code. From deb146b46044403ecd6f06f177d34f3366260a44 Mon Sep 17 00:00:00 2001 From: Nils Lindemann Date: Fri, 10 Nov 2023 02:46:24 +0100 Subject: [PATCH 07/12] "Kindklasse" -> "Unterklasse" --- docs/de/docs/tutorial/handling-errors.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/docs/de/docs/tutorial/handling-errors.md b/docs/de/docs/tutorial/handling-errors.md index b5939a7f4c058..81df4e53af909 100644 --- a/docs/de/docs/tutorial/handling-errors.md +++ b/docs/de/docs/tutorial/handling-errors.md @@ -163,7 +163,7 @@ path -> item_id !!! warning "Achtung" Das folgende sind technische Details, die Sie überspringen können, wenn sie für Sie nicht wichtig sind. -`RequestValidationError` ist eine Kindklasse von Pydantics `ValidationError`. +`RequestValidationError` ist eine Unterklasse von Pydantics `ValidationError`. **FastAPI** verwendet diesen, sodass Sie, wenn Sie ein Pydantic-Modell für `response_model` verwenden, und ihre Daten fehlerhaft sind, einen Fehler in ihrem Log sehen. From 0018e95da04f1e2254ecfed277d98931c59ae915 Mon Sep 17 00:00:00 2001 From: Nils Lindemann Date: Sun, 12 Nov 2023 02:35:46 +0100 Subject: [PATCH 08/12] More precise translation of this reappearing info box --- docs/de/docs/tutorial/handling-errors.md | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/docs/de/docs/tutorial/handling-errors.md b/docs/de/docs/tutorial/handling-errors.md index 81df4e53af909..7716be3728419 100644 --- a/docs/de/docs/tutorial/handling-errors.md +++ b/docs/de/docs/tutorial/handling-errors.md @@ -109,7 +109,7 @@ Sie erhalten also einen sauberen Error mit einem Statuscode `418` und dem JSON-I !!! note "Technische Details" Sie können auch `from starlette.requests import Request` und `from starlette.responses import JSONResponse` verwenden. - **FastAPI** bietet die gleichen `starlette.responses` auch via `fastapi.responses` an, als Annehmlichkeit für den Entwickler. Aber die meisten verfügbaren Responses kommen direkt von Starlette. Das Gleiche gilt für `Request`. + **FastAPI** bietet die gleichen `starlette.responses` auch via `fastapi.responses` an, als Annehmlichkeit für Sie, den Entwickler. Die meisten verfügbaren Responses kommen aber direkt von Starlette. Das Gleiche gilt für `Request`. ## Die Default-Exceptionhandler überschreiben @@ -186,7 +186,7 @@ Zum Beispiel könnten Sie eine Klartext-Response statt JSON für diese Fehler zu !!! note "Technische Details" Sie können auch `from starlette.responses import PlainTextResponse` verwenden. - **FastAPI** bietet die gleichen `starlette.responses` auch via `fastapi.responses` an, als Annehmlichkeit für den Entwickler. Aber die meisten verfügbaren Responses kommen direkt von Starlette. + **FastAPI** bietet die gleichen `starlette.responses` auch via `fastapi.responses` an, als Annehmlichkeit für Sie, den Entwickler. Die meisten verfügbaren Responses kommen aber direkt von Starlette. ### Den `RequestValidationError`-Body verwenden From 527aebab4e802518fc6dfd90683359a995e278e1 Mon Sep 17 00:00:00 2001 From: Nils Lindemann Date: Tue, 14 Nov 2023 07:38:43 +0100 Subject: [PATCH 09/12] =?UTF-8?q?"werfen"=20->=20"ausl=C3=B6sen"?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- docs/de/docs/tutorial/handling-errors.md | 18 +++++++++--------- 1 file changed, 9 insertions(+), 9 deletions(-) diff --git a/docs/de/docs/tutorial/handling-errors.md b/docs/de/docs/tutorial/handling-errors.md index 7716be3728419..8102a5204b08d 100644 --- a/docs/de/docs/tutorial/handling-errors.md +++ b/docs/de/docs/tutorial/handling-errors.md @@ -29,17 +29,17 @@ Um HTTP-Responses mit Fehlern zum Client zurückzugeben, verwenden Sie `HTTPExce {!../../../docs_src/handling_errors/tutorial001.py!} ``` -### Eine `HTTPException` in Ihrem Code werfen +### Eine `HTTPException` in Ihrem Code auslösen `HTTPException` ist eine normale Python-Exception mit einigen zusätzlichen Daten, die für APIs relevant sind. -Weil es eine Python-Exception ist, geben Sie sie nicht zurück, (`return`), sondern Sie werfen sie (`raise`). +Weil es eine Python-Exception ist, geben Sie sie nicht zurück, (`return`), sondern Sie lösen sie aus (`raise`). -Das bedeutet auch, wenn Sie in einer Hilfsfunktion sind, die Sie von ihrer *Pfadoperation-Funktion* aus aufrufen, und Sie werfen eine `HTTPException` von innerhalb dieser Hilfsfunktion, dann wird der Rest der *Pfadoperation-Funktion* nicht ausgeführt, sondern der Request wird sofort abgebrochen und der HTTP-Error der `HTTP-Exception` wird zum Client gesendet. +Das bedeutet auch, wenn Sie in einer Hilfsfunktion sind, die Sie von ihrer *Pfadoperation-Funktion* aus aufrufen, und Sie lösen eine `HTTPException` von innerhalb dieser Hilfsfunktion aus, dann wird der Rest der *Pfadoperation-Funktion* nicht ausgeführt, sondern der Request wird sofort abgebrochen und der HTTP-Error der `HTTP-Exception` wird zum Client gesendet. -Der Vorteil, eine Exception zu werfen (`raise`), statt sie zurückzugeben (`return`) wird im Abschnitt über Abhängigkeiten und Sicherheit klarer werden. +Der Vorteil, eine Exception auszulösen (`raise`), statt sie zurückzugeben (`return`) wird im Abschnitt über Abhängigkeiten und Sicherheit klarer werden. -Im folgenden Beispiel werfen wir, wenn der Client eine ID anfragt, die nicht existiert, eine Exception mit dem Statuscode `404`. +Im folgenden Beispiel lösen wir, wenn der Client eine ID anfragt, die nicht existiert, eine Exception mit dem Statuscode `404` aus. ```Python hl_lines="11" {!../../../docs_src/handling_errors/tutorial001.py!} @@ -64,7 +64,7 @@ Aber wenn der Client `http://example.com/items/bar` anfragt (ein nicht-existiere ``` !!! tip "Tipp" - Wenn Sie eine `HTTPException` werfen, können Sie dem Parameter `detail` jeden Wert übergeben, der nach JSON konvertiert werden kann, nicht nur `str`. + Wenn Sie eine `HTTPException` auslösen, können Sie dem Parameter `detail` jeden Wert übergeben, der nach JSON konvertiert werden kann, nicht nur `str`. Zum Beispiel ein `dict`, eine `list`, usw. @@ -121,7 +121,7 @@ Sie können diese Exceptionhandler mit ihren eigenen überschreiben. ### Request-Validierung-Exceptions überschreiben -Wenn ein Request ungültige Daten enthält, wirft **FastAPI** intern einen `RequestValidationError`. +Wenn ein Request ungültige Daten enthält, löst **FastAPI** intern einen `RequestValidationError` aus. Und bietet auch einen Default-Exceptionhandler dafür. @@ -238,11 +238,11 @@ Der einzige Unterschied ist, dass **FastAPI**s `HTTPException` Ihnen erlaubt, He Das wird intern gebraucht/verwendet für OAuth 2.0 und für einige Sicherheits-Werkzeuge. -Sie können also weiterhin **FastAPI**s `HTTPException` wie üblich in Ihrem Code werfen. +Sie können also weiterhin **FastAPI**s `HTTPException` wie üblich in Ihrem Code auslösen. Aber wenn Sie einen Exceptionhandler registrieren, registrieren Sie ihn für Starlettes `HTTPException`. -Auf diese Weise wird Ihr Handler, wenn irgendein Teil von Starlettes internem Code, oder eine Starlette-Erweiterung, oder -Plugin eine Starlette-`HTTPException` wirft, in der Lage sein, diese zu fangen und zu handhaben. +Auf diese Weise wird Ihr Handler, wenn irgendein Teil von Starlettes internem Code, oder eine Starlette-Erweiterung, oder -Plugin eine Starlette-`HTTPException` auslöst, in der Lage sein, diese zu fangen und zu handhaben. Damit wir in diesem Beispiel beide `HTTPException`s im selben Code haben können, benennen wir Starlettes Exception um zu `StarletteHTTPException`: From 29458c65e8152bf0a96d2f160e9fd2358d1ea0fd Mon Sep 17 00:00:00 2001 From: Nils Lindemann Date: Sat, 18 Nov 2023 14:48:00 +0100 Subject: [PATCH 10/12] "das gleiche" vs "dasselbe" --- docs/de/docs/tutorial/handling-errors.md | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/docs/de/docs/tutorial/handling-errors.md b/docs/de/docs/tutorial/handling-errors.md index 8102a5204b08d..179a2118bba09 100644 --- a/docs/de/docs/tutorial/handling-errors.md +++ b/docs/de/docs/tutorial/handling-errors.md @@ -109,7 +109,7 @@ Sie erhalten also einen sauberen Error mit einem Statuscode `418` und dem JSON-I !!! note "Technische Details" Sie können auch `from starlette.requests import Request` und `from starlette.responses import JSONResponse` verwenden. - **FastAPI** bietet die gleichen `starlette.responses` auch via `fastapi.responses` an, als Annehmlichkeit für Sie, den Entwickler. Die meisten verfügbaren Responses kommen aber direkt von Starlette. Das Gleiche gilt für `Request`. + **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. Das Gleiche gilt für `Request`. ## Die Default-Exceptionhandler überschreiben @@ -186,7 +186,7 @@ Zum Beispiel könnten Sie eine Klartext-Response statt JSON für diese Fehler zu !!! note "Technische Details" Sie können auch `from starlette.responses import PlainTextResponse` verwenden. - **FastAPI** bietet die gleichen `starlette.responses` auch via `fastapi.responses` an, als Annehmlichkeit für Sie, den Entwickler. Die meisten verfügbaren Responses kommen aber direkt von Starlette. + **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. ### Den `RequestValidationError`-Body verwenden From 0efe031ede4293ca9531b60e8e21c671c72b4e46 Mon Sep 17 00:00:00 2001 From: Nils Lindemann Date: Thu, 28 Dec 2023 20:56:11 +0100 Subject: [PATCH 11/12] Remove "-" --- docs/de/docs/tutorial/handling-errors.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/docs/de/docs/tutorial/handling-errors.md b/docs/de/docs/tutorial/handling-errors.md index 179a2118bba09..55ecd2f072479 100644 --- a/docs/de/docs/tutorial/handling-errors.md +++ b/docs/de/docs/tutorial/handling-errors.md @@ -119,7 +119,7 @@ Diese Handler kümmern sich darum, Default-JSON-Responses zurückzugeben, wenn S Sie können diese Exceptionhandler mit ihren eigenen überschreiben. -### Request-Validierung-Exceptions überschreiben +### Requestvalidierung-Exceptions überschreiben Wenn ein Request ungültige Daten enthält, löst **FastAPI** intern einen `RequestValidationError` aus. From b767ab616f209a281f0bbca6939684d06b0d65a0 Mon Sep 17 00:00:00 2001 From: Nils Lindemann Date: Wed, 17 Jan 2024 12:28:51 +0100 Subject: [PATCH 12/12] Sync with #5418 --- docs/de/docs/tutorial/handling-errors.md | 4 +--- 1 file changed, 1 insertion(+), 3 deletions(-) diff --git a/docs/de/docs/tutorial/handling-errors.md b/docs/de/docs/tutorial/handling-errors.md index 55ecd2f072479..af658b9715093 100644 --- a/docs/de/docs/tutorial/handling-errors.md +++ b/docs/de/docs/tutorial/handling-errors.md @@ -234,9 +234,7 @@ Sie erhalten eine Response, die Ihnen sagt, dass die Daten ungültig sind, und w Und **FastAPI**s `HTTPException`-Fehlerklasse erbt von Starlettes `HTTPException`-Fehlerklasse. -Der einzige Unterschied ist, dass **FastAPI**s `HTTPException` Ihnen erlaubt, Header zur Response hinzuzufügen. - -Das wird intern gebraucht/verwendet für OAuth 2.0 und für einige Sicherheits-Werkzeuge. +Der einzige Unterschied besteht darin, dass **FastAPIs** `HTTPException` alles für das Feld `detail` akzeptiert, was nach JSON konvertiert werden kann, während Starlettes `HTTPException` nur Strings zulässt. Sie können also weiterhin **FastAPI**s `HTTPException` wie üblich in Ihrem Code auslösen.