785 changed files with 40534 additions and 23131 deletions
@ -4,13 +4,13 @@ contact_links: |
|||||
about: Please report security vulnerabilities to [email protected] |
about: Please report security vulnerabilities to [email protected] |
||||
- name: Question or Problem |
- name: Question or Problem |
||||
about: Ask a question or ask about a problem in GitHub Discussions. |
about: Ask a question or ask about a problem in GitHub Discussions. |
||||
url: https://github.com/tiangolo/fastapi/discussions/categories/questions |
url: https://github.com/fastapi/fastapi/discussions/categories/questions |
||||
- name: Feature Request |
- name: Feature Request |
||||
about: To suggest an idea or ask about a feature, please start with a question saying what you would like to achieve. There might be a way to do it already. |
about: To suggest an idea or ask about a feature, please start with a question saying what you would like to achieve. There might be a way to do it already. |
||||
url: https://github.com/tiangolo/fastapi/discussions/categories/questions |
url: https://github.com/fastapi/fastapi/discussions/categories/questions |
||||
- name: Show and tell |
- name: Show and tell |
||||
about: Show what you built with FastAPI or to be used with FastAPI. |
about: Show what you built with FastAPI or to be used with FastAPI. |
||||
url: https://github.com/tiangolo/fastapi/discussions/categories/show-and-tell |
url: https://github.com/fastapi/fastapi/discussions/categories/show-and-tell |
||||
- name: Translations |
- name: Translations |
||||
about: Coordinate translations in GitHub Discussions. |
about: Coordinate translations in GitHub Discussions. |
||||
url: https://github.com/tiangolo/fastapi/discussions/categories/translations |
url: https://github.com/fastapi/fastapi/discussions/categories/translations |
||||
|
@ -1,9 +0,0 @@ |
|||||
FROM python:3.10 |
|
||||
|
|
||||
COPY ./requirements.txt /app/requirements.txt |
|
||||
|
|
||||
RUN pip install -r /app/requirements.txt |
|
||||
|
|
||||
COPY ./app /app |
|
||||
|
|
||||
CMD ["python", "/app/main.py"] |
|
@ -1,13 +0,0 @@ |
|||||
name: Comment Docs Preview in PR |
|
||||
description: Comment with the docs URL preview in the PR |
|
||||
author: Sebastián Ramírez <[email protected]> |
|
||||
inputs: |
|
||||
token: |
|
||||
description: Token for the repo. Can be passed in using {{ secrets.GITHUB_TOKEN }} |
|
||||
required: true |
|
||||
deploy_url: |
|
||||
description: The deployment URL to comment in the PR |
|
||||
required: true |
|
||||
runs: |
|
||||
using: docker |
|
||||
image: Dockerfile |
|
@ -1,69 +0,0 @@ |
|||||
import logging |
|
||||
import sys |
|
||||
from pathlib import Path |
|
||||
from typing import Union |
|
||||
|
|
||||
import httpx |
|
||||
from github import Github |
|
||||
from github.PullRequest import PullRequest |
|
||||
from pydantic import BaseModel, SecretStr, ValidationError |
|
||||
from pydantic_settings import BaseSettings |
|
||||
|
|
||||
github_api = "https://api.github.com" |
|
||||
|
|
||||
|
|
||||
class Settings(BaseSettings): |
|
||||
github_repository: str |
|
||||
github_event_path: Path |
|
||||
github_event_name: Union[str, None] = None |
|
||||
input_token: SecretStr |
|
||||
input_deploy_url: str |
|
||||
|
|
||||
|
|
||||
class PartialGithubEventHeadCommit(BaseModel): |
|
||||
id: str |
|
||||
|
|
||||
|
|
||||
class PartialGithubEventWorkflowRun(BaseModel): |
|
||||
head_commit: PartialGithubEventHeadCommit |
|
||||
|
|
||||
|
|
||||
class PartialGithubEvent(BaseModel): |
|
||||
workflow_run: PartialGithubEventWorkflowRun |
|
||||
|
|
||||
|
|
||||
if __name__ == "__main__": |
|
||||
logging.basicConfig(level=logging.INFO) |
|
||||
settings = Settings() |
|
||||
logging.info(f"Using config: {settings.json()}") |
|
||||
g = Github(settings.input_token.get_secret_value()) |
|
||||
repo = g.get_repo(settings.github_repository) |
|
||||
try: |
|
||||
event = PartialGithubEvent.parse_file(settings.github_event_path) |
|
||||
except ValidationError as e: |
|
||||
logging.error(f"Error parsing event file: {e.errors()}") |
|
||||
sys.exit(0) |
|
||||
use_pr: Union[PullRequest, None] = None |
|
||||
for pr in repo.get_pulls(): |
|
||||
if pr.head.sha == event.workflow_run.head_commit.id: |
|
||||
use_pr = pr |
|
||||
break |
|
||||
if not use_pr: |
|
||||
logging.error(f"No PR found for hash: {event.workflow_run.head_commit.id}") |
|
||||
sys.exit(0) |
|
||||
github_headers = { |
|
||||
"Authorization": f"token {settings.input_token.get_secret_value()}" |
|
||||
} |
|
||||
url = f"{github_api}/repos/{settings.github_repository}/issues/{use_pr.number}/comments" |
|
||||
logging.info(f"Using comments URL: {url}") |
|
||||
response = httpx.post( |
|
||||
url, |
|
||||
headers=github_headers, |
|
||||
json={ |
|
||||
"body": f"📝 Docs preview for commit {use_pr.head.sha} at: {settings.input_deploy_url}" |
|
||||
}, |
|
||||
) |
|
||||
if not (200 <= response.status_code <= 300): |
|
||||
logging.error(f"Error posting comment: {response.text}") |
|
||||
sys.exit(1) |
|
||||
logging.info("Finished") |
|
@ -0,0 +1,34 @@ |
|||||
|
docs: |
||||
|
- all: |
||||
|
- changed-files: |
||||
|
- any-glob-to-any-file: |
||||
|
- docs/en/docs/** |
||||
|
- docs_src/** |
||||
|
- all-globs-to-all-files: |
||||
|
- '!fastapi/**' |
||||
|
- '!pyproject.toml' |
||||
|
|
||||
|
lang-all: |
||||
|
- all: |
||||
|
- changed-files: |
||||
|
- any-glob-to-any-file: |
||||
|
- docs/*/docs/** |
||||
|
- all-globs-to-all-files: |
||||
|
- '!docs/en/docs/**' |
||||
|
- '!fastapi/**' |
||||
|
- '!pyproject.toml' |
||||
|
|
||||
|
internal: |
||||
|
- all: |
||||
|
- changed-files: |
||||
|
- any-glob-to-any-file: |
||||
|
- .github/** |
||||
|
- scripts/** |
||||
|
- .gitignore |
||||
|
- .pre-commit-config.yaml |
||||
|
- pdm_build.py |
||||
|
- requirements*.txt |
||||
|
- all-globs-to-all-files: |
||||
|
- '!docs/*/docs/**' |
||||
|
- '!fastapi/**' |
||||
|
- '!pyproject.toml' |
@ -0,0 +1,18 @@ |
|||||
|
name: Add to Project |
||||
|
|
||||
|
on: |
||||
|
pull_request_target: |
||||
|
issues: |
||||
|
types: |
||||
|
- opened |
||||
|
- reopened |
||||
|
|
||||
|
jobs: |
||||
|
add-to-project: |
||||
|
name: Add to project |
||||
|
runs-on: ubuntu-latest |
||||
|
steps: |
||||
|
- uses: actions/[email protected] |
||||
|
with: |
||||
|
project-url: https://github.com/orgs/fastapi/projects/2 |
||||
|
github-token: ${{ secrets.PROJECTS_TOKEN }} |
@ -14,9 +14,12 @@ on: |
|||||
- labeled |
- labeled |
||||
workflow_dispatch: |
workflow_dispatch: |
||||
|
|
||||
|
permissions: |
||||
|
issues: write |
||||
|
|
||||
jobs: |
jobs: |
||||
issue-manager: |
issue-manager: |
||||
if: github.repository_owner == 'tiangolo' |
if: github.repository_owner == 'fastapi' |
||||
runs-on: ubuntu-latest |
runs-on: ubuntu-latest |
||||
steps: |
steps: |
||||
- name: Dump GitHub context |
- name: Dump GitHub context |
||||
@ -25,7 +28,7 @@ jobs: |
|||||
run: echo "$GITHUB_CONTEXT" |
run: echo "$GITHUB_CONTEXT" |
||||
- uses: tiangolo/[email protected] |
- uses: tiangolo/[email protected] |
||||
with: |
with: |
||||
token: ${{ secrets.FASTAPI_ISSUE_MANAGER }} |
token: ${{ secrets.GITHUB_TOKEN }} |
||||
config: > |
config: > |
||||
{ |
{ |
||||
"answered": { |
"answered": { |
||||
|
@ -0,0 +1,31 @@ |
|||||
|
name: Labels |
||||
|
on: |
||||
|
pull_request_target: |
||||
|
types: |
||||
|
- opened |
||||
|
- synchronize |
||||
|
- reopened |
||||
|
# For label-checker |
||||
|
- labeled |
||||
|
- unlabeled |
||||
|
|
||||
|
jobs: |
||||
|
labeler: |
||||
|
permissions: |
||||
|
contents: read |
||||
|
pull-requests: write |
||||
|
runs-on: ubuntu-latest |
||||
|
steps: |
||||
|
- uses: actions/labeler@v5 |
||||
|
# Run this after labeler applied labels |
||||
|
check-labels: |
||||
|
needs: |
||||
|
- labeler |
||||
|
permissions: |
||||
|
pull-requests: read |
||||
|
runs-on: ubuntu-latest |
||||
|
steps: |
||||
|
- uses: docker://agilepathway/pull-request-label-checker:latest |
||||
|
with: |
||||
|
one_of: breaking,security,feature,bug,refactor,upgrade,docs,lang-all,internal |
||||
|
repo_token: ${{ secrets.GITHUB_TOKEN }} |
@ -12,7 +12,7 @@ authors: |
|||||
family-names: Ramírez |
family-names: Ramírez |
||||
email: [email protected] |
email: [email protected] |
||||
identifiers: |
identifiers: |
||||
repository-code: 'https://github.com/tiangolo/fastapi' |
repository-code: 'https://github.com/fastapi/fastapi' |
||||
url: 'https://fastapi.tiangolo.com' |
url: 'https://fastapi.tiangolo.com' |
||||
abstract: >- |
abstract: >- |
||||
FastAPI framework, high performance, easy to learn, fast to code, |
FastAPI framework, high performance, easy to learn, fast to code, |
||||
|
@ -8,44 +8,51 @@ Aus diesem Grund werden diese üblicherweise in Umgebungsvariablen bereitgestell |
|||||
|
|
||||
## Umgebungsvariablen |
## Umgebungsvariablen |
||||
|
|
||||
!!! tip "Tipp" |
/// tip | "Tipp" |
||||
Wenn Sie bereits wissen, was „Umgebungsvariablen“ sind und wie man sie verwendet, können Sie gerne mit dem nächsten Abschnitt weiter unten fortfahren. |
|
||||
|
Wenn Sie bereits wissen, was „Umgebungsvariablen“ sind und wie man sie verwendet, können Sie gerne mit dem nächsten Abschnitt weiter unten fortfahren. |
||||
|
|
||||
|
/// |
||||
|
|
||||
Eine <a href="https://de.wikipedia.org/wiki/Umgebungsvariable" class="external-link" target="_blank">Umgebungsvariable</a> (auch bekannt als „env var“) ist eine Variable, die sich außerhalb des Python-Codes im Betriebssystem befindet und von Ihrem Python-Code (oder auch von anderen Programmen) gelesen werden kann. |
Eine <a href="https://de.wikipedia.org/wiki/Umgebungsvariable" class="external-link" target="_blank">Umgebungsvariable</a> (auch bekannt als „env var“) ist eine Variable, die sich außerhalb des Python-Codes im Betriebssystem befindet und von Ihrem Python-Code (oder auch von anderen Programmen) gelesen werden kann. |
||||
|
|
||||
Sie können Umgebungsvariablen in der Shell erstellen und verwenden, ohne Python zu benötigen: |
Sie können Umgebungsvariablen in der Shell erstellen und verwenden, ohne Python zu benötigen: |
||||
|
|
||||
=== "Linux, macOS, Windows Bash" |
//// tab | Linux, macOS, Windows Bash |
||||
|
|
||||
<div class="termy"> |
<div class="termy"> |
||||
|
|
||||
```console |
```console |
||||
// Sie könnten eine Umgebungsvariable MY_NAME erstellen mittels |
// Sie könnten eine Umgebungsvariable MY_NAME erstellen mittels |
||||
$ export MY_NAME="Wade Wilson" |
$ export MY_NAME="Wade Wilson" |
||||
|
|
||||
// Dann könnten Sie diese mit anderen Programmen verwenden, etwa |
// Dann könnten Sie diese mit anderen Programmen verwenden, etwa |
||||
$ echo "Hello $MY_NAME" |
$ echo "Hello $MY_NAME" |
||||
|
|
||||
|
Hello Wade Wilson |
||||
|
``` |
||||
|
|
||||
|
</div> |
||||
|
|
||||
Hello Wade Wilson |
//// |
||||
``` |
|
||||
|
|
||||
</div> |
//// tab | Windows PowerShell |
||||
|
|
||||
=== "Windows PowerShell" |
<div class="termy"> |
||||
|
|
||||
<div class="termy"> |
```console |
||||
|
// Erstelle eine Umgebungsvariable MY_NAME |
||||
|
$ $Env:MY_NAME = "Wade Wilson" |
||||
|
|
||||
```console |
// Verwende sie mit anderen Programmen, etwa |
||||
// Erstelle eine Umgebungsvariable MY_NAME |
$ echo "Hello $Env:MY_NAME" |
||||
$ $Env:MY_NAME = "Wade Wilson" |
|
||||
|
|
||||
// Verwende sie mit anderen Programmen, etwa |
Hello Wade Wilson |
||||
$ echo "Hello $Env:MY_NAME" |
``` |
||||
|
|
||||
Hello Wade Wilson |
</div> |
||||
``` |
|
||||
|
|
||||
</div> |
//// |
||||
|
|
||||
### Umgebungsvariablen mit Python auslesen |
### Umgebungsvariablen mit Python auslesen |
||||
|
|
||||
@ -60,10 +67,13 @@ name = os.getenv("MY_NAME", "World") |
|||||
print(f"Hello {name} from Python") |
print(f"Hello {name} from Python") |
||||
``` |
``` |
||||
|
|
||||
!!! tip "Tipp" |
/// tip | "Tipp" |
||||
Das zweite Argument für <a href="https://docs.python.org/3.8/library/os.html#os.getenv" class="external-link" target="_blank">`os.getenv()`</a> ist der zurückzugebende Defaultwert. |
|
||||
|
Das zweite Argument für <a href="https://docs.python.org/3.8/library/os.html#os.getenv" class="external-link" target="_blank">`os.getenv()`</a> ist der zurückzugebende Defaultwert. |
||||
|
|
||||
Wenn nicht angegeben, ist er standardmäßig `None`. Hier übergeben wir `"World"` als Defaultwert. |
Wenn nicht angegeben, ist er standardmäßig `None`. Hier übergeben wir `"World"` als Defaultwert. |
||||
|
|
||||
|
/// |
||||
|
|
||||
Dann könnten Sie dieses Python-Programm aufrufen: |
Dann könnten Sie dieses Python-Programm aufrufen: |
||||
|
|
||||
@ -114,8 +124,11 @@ Hello World from Python |
|||||
|
|
||||
</div> |
</div> |
||||
|
|
||||
!!! tip "Tipp" |
/// tip | "Tipp" |
||||
Weitere Informationen dazu finden Sie unter <a href="https://12factor.net/config" class="external-link" target="_blank">The Twelve-Factor App: Config</a>. |
|
||||
|
Weitere Informationen dazu finden Sie unter <a href="https://12factor.net/config" class="external-link" target="_blank">The Twelve-Factor App: Config</a>. |
||||
|
|
||||
|
/// |
||||
|
|
||||
### Typen und Validierung |
### Typen und Validierung |
||||
|
|
||||
@ -151,8 +164,11 @@ $ pip install "fastapi[all]" |
|||||
|
|
||||
</div> |
</div> |
||||
|
|
||||
!!! info |
/// info |
||||
In Pydantic v1 war das im Hauptpackage enthalten. Jetzt wird es als unabhängiges Package verteilt, sodass Sie wählen können, ob Sie es installieren möchten oder nicht, falls Sie die Funktionalität nicht benötigen. |
|
||||
|
In Pydantic v1 war das im Hauptpackage enthalten. Jetzt wird es als unabhängiges Package verteilt, sodass Sie wählen können, ob Sie es installieren möchten oder nicht, falls Sie die Funktionalität nicht benötigen. |
||||
|
|
||||
|
/// |
||||
|
|
||||
### Das `Settings`-Objekt erstellen |
### Das `Settings`-Objekt erstellen |
||||
|
|
||||
@ -162,23 +178,33 @@ Auf die gleiche Weise wie bei Pydantic-Modellen deklarieren Sie Klassenattribute |
|||||
|
|
||||
Sie können dieselben Validierungs-Funktionen und -Tools verwenden, die Sie für Pydantic-Modelle verwenden, z. B. verschiedene Datentypen und zusätzliche Validierungen mit `Field()`. |
Sie können dieselben Validierungs-Funktionen und -Tools verwenden, die Sie für Pydantic-Modelle verwenden, z. B. verschiedene Datentypen und zusätzliche Validierungen mit `Field()`. |
||||
|
|
||||
=== "Pydantic v2" |
//// tab | Pydantic v2 |
||||
|
|
||||
|
```Python hl_lines="2 5-8 11" |
||||
|
{!> ../../../docs_src/settings/tutorial001.py!} |
||||
|
``` |
||||
|
|
||||
|
//// |
||||
|
|
||||
|
//// tab | Pydantic v1 |
||||
|
|
||||
```Python hl_lines="2 5-8 11" |
/// info |
||||
{!> ../../../docs_src/settings/tutorial001.py!} |
|
||||
``` |
In Pydantic v1 würden Sie `BaseSettings` direkt von `pydantic` statt von `pydantic_settings` importieren. |
||||
|
|
||||
|
/// |
||||
|
|
||||
|
```Python hl_lines="2 5-8 11" |
||||
|
{!> ../../../docs_src/settings/tutorial001_pv1.py!} |
||||
|
``` |
||||
|
|
||||
=== "Pydantic v1" |
//// |
||||
|
|
||||
!!! info |
/// tip | "Tipp" |
||||
In Pydantic v1 würden Sie `BaseSettings` direkt von `pydantic` statt von `pydantic_settings` importieren. |
|
||||
|
|
||||
```Python hl_lines="2 5-8 11" |
Für ein schnelles Copy-and-paste verwenden Sie nicht dieses Beispiel, sondern das letzte unten. |
||||
{!> ../../../docs_src/settings/tutorial001_pv1.py!} |
|
||||
``` |
|
||||
|
|
||||
!!! tip "Tipp" |
/// |
||||
Für ein schnelles Copy-and-paste verwenden Sie nicht dieses Beispiel, sondern das letzte unten. |
|
||||
|
|
||||
Wenn Sie dann eine Instanz dieser `Settings`-Klasse erstellen (in diesem Fall als `settings`-Objekt), liest Pydantic die Umgebungsvariablen ohne Berücksichtigung der Groß- und Kleinschreibung. Eine Variable `APP_NAME` in Großbuchstaben wird also als Attribut `app_name` gelesen. |
Wenn Sie dann eine Instanz dieser `Settings`-Klasse erstellen (in diesem Fall als `settings`-Objekt), liest Pydantic die Umgebungsvariablen ohne Berücksichtigung der Groß- und Kleinschreibung. Eine Variable `APP_NAME` in Großbuchstaben wird also als Attribut `app_name` gelesen. |
||||
|
|
||||
@ -206,8 +232,11 @@ $ ADMIN_EMAIL="[email protected]" APP_NAME="ChimichangApp" uvicorn main:app |
|||||
|
|
||||
</div> |
</div> |
||||
|
|
||||
!!! tip "Tipp" |
/// 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. |
|
||||
|
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. |
||||
|
|
||||
|
/// |
||||
|
|
||||
Und dann würde die Einstellung `admin_email` auf `"[email protected]"` gesetzt. |
Und dann würde die Einstellung `admin_email` auf `"[email protected]"` gesetzt. |
||||
|
|
||||
@ -231,8 +260,11 @@ Und dann verwenden Sie diese in einer Datei `main.py`: |
|||||
{!../../../docs_src/settings/app01/main.py!} |
{!../../../docs_src/settings/app01/main.py!} |
||||
``` |
``` |
||||
|
|
||||
!!! tip "Tipp" |
/// tip | "Tipp" |
||||
Sie benötigen außerdem eine Datei `__init__.py`, wie in [Größere Anwendungen – mehrere Dateien](../tutorial/bigger-applications.md){.internal-link target=_blank} gesehen. |
|
||||
|
Sie benötigen außerdem eine Datei `__init__.py`, wie in [Größere Anwendungen – mehrere Dateien](../tutorial/bigger-applications.md){.internal-link target=_blank} gesehen. |
||||
|
|
||||
|
/// |
||||
|
|
||||
## Einstellungen in einer Abhängigkeit |
## Einstellungen in einer Abhängigkeit |
||||
|
|
||||
@ -254,54 +286,75 @@ Beachten Sie, dass wir jetzt keine Standardinstanz `settings = Settings()` erste |
|||||
|
|
||||
Jetzt erstellen wir eine Abhängigkeit, die ein neues `config.Settings()` zurückgibt. |
Jetzt erstellen wir eine Abhängigkeit, die ein neues `config.Settings()` zurückgibt. |
||||
|
|
||||
=== "Python 3.9+" |
//// tab | Python 3.9+ |
||||
|
|
||||
```Python hl_lines="6 12-13" |
```Python hl_lines="6 12-13" |
||||
{!> ../../../docs_src/settings/app02_an_py39/main.py!} |
{!> ../../../docs_src/settings/app02_an_py39/main.py!} |
||||
``` |
``` |
||||
|
|
||||
=== "Python 3.8+" |
//// |
||||
|
|
||||
```Python hl_lines="6 12-13" |
//// tab | Python 3.8+ |
||||
{!> ../../../docs_src/settings/app02_an/main.py!} |
|
||||
``` |
|
||||
|
|
||||
=== "Python 3.8+ nicht annotiert" |
```Python hl_lines="6 12-13" |
||||
|
{!> ../../../docs_src/settings/app02_an/main.py!} |
||||
|
``` |
||||
|
|
||||
|
//// |
||||
|
|
||||
!!! tip "Tipp" |
//// tab | Python 3.8+ nicht annotiert |
||||
Bevorzugen Sie die `Annotated`-Version, falls möglich. |
|
||||
|
|
||||
```Python hl_lines="5 11-12" |
/// tip | "Tipp" |
||||
{!> ../../../docs_src/settings/app02/main.py!} |
|
||||
``` |
|
||||
|
|
||||
!!! tip "Tipp" |
Bevorzugen Sie die `Annotated`-Version, falls möglich. |
||||
Wir werden das `@lru_cache` in Kürze besprechen. |
|
||||
|
|
||||
Im Moment nehmen Sie an, dass `get_settings()` eine normale Funktion ist. |
/// |
||||
|
|
||||
|
```Python hl_lines="5 11-12" |
||||
|
{!> ../../../docs_src/settings/app02/main.py!} |
||||
|
``` |
||||
|
|
||||
|
//// |
||||
|
|
||||
|
/// tip | "Tipp" |
||||
|
|
||||
|
Wir werden das `@lru_cache` in Kürze besprechen. |
||||
|
|
||||
|
Im Moment nehmen Sie an, dass `get_settings()` eine normale Funktion ist. |
||||
|
|
||||
|
/// |
||||
|
|
||||
Und dann können wir das von der *Pfadoperation-Funktion* als Abhängigkeit einfordern und es überall dort verwenden, wo wir es brauchen. |
Und dann können wir das von der *Pfadoperation-Funktion* als Abhängigkeit einfordern und es überall dort verwenden, wo wir es brauchen. |
||||
|
|
||||
=== "Python 3.9+" |
//// tab | Python 3.9+ |
||||
|
|
||||
|
```Python hl_lines="17 19-21" |
||||
|
{!> ../../../docs_src/settings/app02_an_py39/main.py!} |
||||
|
``` |
||||
|
|
||||
|
//// |
||||
|
|
||||
|
//// tab | Python 3.8+ |
||||
|
|
||||
```Python hl_lines="17 19-21" |
```Python hl_lines="17 19-21" |
||||
{!> ../../../docs_src/settings/app02_an_py39/main.py!} |
{!> ../../../docs_src/settings/app02_an/main.py!} |
||||
``` |
``` |
||||
|
|
||||
|
//// |
||||
|
|
||||
=== "Python 3.8+" |
//// tab | Python 3.8+ nicht annotiert |
||||
|
|
||||
```Python hl_lines="17 19-21" |
/// tip | "Tipp" |
||||
{!> ../../../docs_src/settings/app02_an/main.py!} |
|
||||
``` |
|
||||
|
|
||||
=== "Python 3.8+ nicht annotiert" |
Bevorzugen Sie die `Annotated`-Version, falls möglich. |
||||
|
|
||||
!!! tip "Tipp" |
/// |
||||
Bevorzugen Sie die `Annotated`-Version, falls möglich. |
|
||||
|
|
||||
```Python hl_lines="16 18-20" |
```Python hl_lines="16 18-20" |
||||
{!> ../../../docs_src/settings/app02/main.py!} |
{!> ../../../docs_src/settings/app02/main.py!} |
||||
``` |
``` |
||||
|
|
||||
|
//// |
||||
|
|
||||
### Einstellungen und Tests |
### Einstellungen und Tests |
||||
|
|
||||
@ -321,15 +374,21 @@ Wenn Sie viele Einstellungen haben, die sich möglicherweise oft ändern, vielle |
|||||
|
|
||||
Diese Praxis ist so weit verbreitet, dass sie einen Namen hat. Diese Umgebungsvariablen werden üblicherweise in einer Datei `.env` abgelegt und die Datei wird „dotenv“ genannt. |
Diese Praxis ist so weit verbreitet, dass sie einen Namen hat. Diese Umgebungsvariablen werden üblicherweise in einer Datei `.env` abgelegt und die Datei wird „dotenv“ genannt. |
||||
|
|
||||
!!! tip "Tipp" |
/// tip | "Tipp" |
||||
Eine Datei, die mit einem Punkt (`.`) beginnt, ist eine versteckte Datei in Unix-ähnlichen Systemen wie Linux und macOS. |
|
||||
|
Eine Datei, die mit einem Punkt (`.`) beginnt, ist eine versteckte Datei in Unix-ähnlichen Systemen wie Linux und macOS. |
||||
|
|
||||
Aber eine dotenv-Datei muss nicht unbedingt genau diesen Dateinamen haben. |
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 <a href="https://docs.pydantic.dev/latest/concepts/pydantic_settings/#dotenv-env-support" class="external-link" target="_blank">Pydantic Settings: Dotenv (.env) support</a>. |
Pydantic unterstützt das Lesen dieser Dateitypen mithilfe einer externen Bibliothek. Weitere Informationen finden Sie unter <a href="https://docs.pydantic.dev/latest/concepts/pydantic_settings/#dotenv-env-support" class="external-link" target="_blank">Pydantic Settings: Dotenv (.env) support</a>. |
||||
|
|
||||
!!! tip "Tipp" |
/// tip | "Tipp" |
||||
Damit das funktioniert, müssen Sie `pip install python-dotenv` ausführen. |
|
||||
|
Damit das funktioniert, müssen Sie `pip install python-dotenv` ausführen. |
||||
|
|
||||
|
/// |
||||
|
|
||||
### Die `.env`-Datei |
### Die `.env`-Datei |
||||
|
|
||||
@ -344,26 +403,39 @@ APP_NAME="ChimichangApp" |
|||||
|
|
||||
Und dann aktualisieren Sie Ihre `config.py` mit: |
Und dann aktualisieren Sie Ihre `config.py` mit: |
||||
|
|
||||
=== "Pydantic v2" |
//// tab | Pydantic v2 |
||||
|
|
||||
```Python hl_lines="9" |
```Python hl_lines="9" |
||||
{!> ../../../docs_src/settings/app03_an/config.py!} |
{!> ../../../docs_src/settings/app03_an/config.py!} |
||||
``` |
``` |
||||
|
|
||||
!!! tip "Tipp" |
/// tip | "Tipp" |
||||
Das Attribut `model_config` wird nur für die Pydantic-Konfiguration verwendet. Weitere Informationen finden Sie unter <a href="https://docs.pydantic.dev/latest/concepts/config/" class="external-link" target="_blank">Pydantic: Configuration</a>. |
|
||||
|
|
||||
=== "Pydantic v1" |
Das Attribut `model_config` wird nur für die Pydantic-Konfiguration verwendet. Weitere Informationen finden Sie unter <a href="https://docs.pydantic.dev/latest/concepts/config/" class="external-link" target="_blank">Pydantic: Configuration</a>. |
||||
|
|
||||
```Python hl_lines="9-10" |
/// |
||||
{!> ../../../docs_src/settings/app03_an/config_pv1.py!} |
|
||||
``` |
|
||||
|
|
||||
!!! tip "Tipp" |
//// |
||||
Die Klasse `Config` wird nur für die Pydantic-Konfiguration verwendet. Weitere Informationen finden Sie unter <a href="https://docs.pydantic.dev/1.10/usage/model_config/" class="external-link" target="_blank">Pydantic Model Config</a>. |
|
||||
|
|
||||
!!! info |
//// tab | Pydantic v1 |
||||
In Pydantic Version 1 erfolgte die Konfiguration in einer internen Klasse `Config`, in Pydantic Version 2 erfolgt sie in einem Attribut `model_config`. Dieses Attribut akzeptiert ein `dict`. Um automatische Codevervollständigung und Inline-Fehlerberichte zu erhalten, können Sie `SettingsConfigDict` importieren und verwenden, um dieses `dict` zu definieren. |
|
||||
|
```Python hl_lines="9-10" |
||||
|
{!> ../../../docs_src/settings/app03_an/config_pv1.py!} |
||||
|
``` |
||||
|
|
||||
|
/// tip | "Tipp" |
||||
|
|
||||
|
Die Klasse `Config` wird nur für die Pydantic-Konfiguration verwendet. Weitere Informationen finden Sie unter <a href="https://docs.pydantic.dev/1.10/usage/model_config/" class="external-link" target="_blank">Pydantic Model Config</a>. |
||||
|
|
||||
|
/// |
||||
|
|
||||
|
//// |
||||
|
|
||||
|
/// info |
||||
|
|
||||
|
In Pydantic Version 1 erfolgte die Konfiguration in einer internen Klasse `Config`, in Pydantic Version 2 erfolgt sie in einem Attribut `model_config`. Dieses Attribut akzeptiert ein `dict`. Um automatische Codevervollständigung und Inline-Fehlerberichte zu erhalten, können Sie `SettingsConfigDict` importieren und verwenden, um dieses `dict` zu definieren. |
||||
|
|
||||
|
/// |
||||
|
|
||||
Hier definieren wir die Konfiguration `env_file` innerhalb Ihrer Pydantic-`Settings`-Klasse und setzen den Wert auf den Dateinamen mit der dotenv-Datei, die wir verwenden möchten. |
Hier definieren wir die Konfiguration `env_file` innerhalb Ihrer Pydantic-`Settings`-Klasse und setzen den Wert auf den Dateinamen mit der dotenv-Datei, die wir verwenden möchten. |
||||
|
|
||||
@ -390,26 +462,35 @@ würden wir dieses Objekt für jeden Request erstellen und die `.env`-Datei für |
|||||
|
|
||||
Da wir jedoch den `@lru_cache`-Dekorator oben verwenden, wird das `Settings`-Objekt nur einmal erstellt, nämlich beim ersten Aufruf. ✔️ |
Da wir jedoch den `@lru_cache`-Dekorator oben verwenden, wird das `Settings`-Objekt nur einmal erstellt, nämlich beim ersten Aufruf. ✔️ |
||||
|
|
||||
=== "Python 3.9+" |
//// tab | Python 3.9+ |
||||
|
|
||||
```Python hl_lines="1 11" |
```Python hl_lines="1 11" |
||||
{!> ../../../docs_src/settings/app03_an_py39/main.py!} |
{!> ../../../docs_src/settings/app03_an_py39/main.py!} |
||||
``` |
``` |
||||
|
|
||||
|
//// |
||||
|
|
||||
|
//// tab | Python 3.8+ |
||||
|
|
||||
|
```Python hl_lines="1 11" |
||||
|
{!> ../../../docs_src/settings/app03_an/main.py!} |
||||
|
``` |
||||
|
|
||||
|
//// |
||||
|
|
||||
=== "Python 3.8+" |
//// tab | Python 3.8+ nicht annotiert |
||||
|
|
||||
```Python hl_lines="1 11" |
/// tip | "Tipp" |
||||
{!> ../../../docs_src/settings/app03_an/main.py!} |
|
||||
``` |
|
||||
|
|
||||
=== "Python 3.8+ nicht annotiert" |
Bevorzugen Sie die `Annotated`-Version, falls möglich. |
||||
|
|
||||
!!! tip "Tipp" |
/// |
||||
Bevorzugen Sie die `Annotated`-Version, falls möglich. |
|
||||
|
```Python hl_lines="1 10" |
||||
|
{!> ../../../docs_src/settings/app03/main.py!} |
||||
|
``` |
||||
|
|
||||
```Python hl_lines="1 10" |
//// |
||||
{!> ../../../docs_src/settings/app03/main.py!} |
|
||||
``` |
|
||||
|
|
||||
Dann wird bei allen nachfolgenden Aufrufen von `get_settings()`, in den Abhängigkeiten für darauffolgende Requests, dasselbe Objekt zurückgegeben, das beim ersten Aufruf zurückgegeben wurde, anstatt den Code von `get_settings()` erneut auszuführen und ein neues `Settings`-Objekt zu erstellen. |
Dann wird bei allen nachfolgenden Aufrufen von `get_settings()`, in den Abhängigkeiten für darauffolgende Requests, dasselbe Objekt zurückgegeben, das beim ersten Aufruf zurückgegeben wurde, anstatt den Code von `get_settings()` erneut auszuführen und ein neues `Settings`-Objekt zu erstellen. |
||||
|
|
||||
|
@ -1,36 +0,0 @@ |
|||||
# Externe Links und Artikel |
|
||||
|
|
||||
**FastAPI** hat eine großartige Community, die ständig wächst. |
|
||||
|
|
||||
Es gibt viele Beiträge, Artikel, Tools und Projekte zum Thema **FastAPI**. |
|
||||
|
|
||||
Hier ist eine unvollständige Liste einiger davon. |
|
||||
|
|
||||
!!! tip "Tipp" |
|
||||
Wenn Sie einen Artikel, ein Projekt, ein Tool oder irgendetwas im Zusammenhang mit **FastAPI** haben, was hier noch nicht aufgeführt ist, erstellen Sie einen <a href="https://github.com/tiangolo/fastapi/edit/master/docs/en/data/external_links.yml" class="external-link" target="_blank">Pull Request und fügen Sie es hinzu</a>. |
|
||||
|
|
||||
!!! note "Hinweis Deutsche Übersetzung" |
|
||||
Die folgenden Überschriften und Links werden aus einer <a href="https://github.com/tiangolo/fastapi/blob/master/docs/en/data/external_links.yml" class="external-link" target="_blank">anderen Datei</a> gelesen und sind daher nicht ins Deutsche übersetzt. |
|
||||
|
|
||||
{% for section_name, section_content in external_links.items() %} |
|
||||
|
|
||||
## {{ section_name }} |
|
||||
|
|
||||
{% for lang_name, lang_content in section_content.items() %} |
|
||||
|
|
||||
### {{ lang_name }} |
|
||||
|
|
||||
{% for item in lang_content %} |
|
||||
|
|
||||
* <a href="{{ item.link }}" class="external-link" target="_blank">{{ item.title }}</a> by <a href="{{ item.author_link }}" class="external-link" target="_blank">{{ item.author }}</a>. |
|
||||
|
|
||||
{% endfor %} |
|
||||
{% endfor %} |
|
||||
{% endfor %} |
|
||||
|
|
||||
## Projekte |
|
||||
|
|
||||
Die neuesten GitHub-Projekte zum Thema `fastapi`: |
|
||||
|
|
||||
<div class="github-topic-projects"> |
|
||||
</div> |
|
@ -1,3 +0,0 @@ |
|||||
# Hilfe |
|
||||
|
|
||||
Helfen und Hilfe erhalten, beitragen, mitmachen. 🤝 |
|
@ -1,5 +0,0 @@ |
|||||
# FastAPI und Freunde Newsletter |
|
||||
|
|
||||
<iframe data-w-type="embedded" frameborder="0" scrolling="no" marginheight="0" marginwidth="0" src="https://xr4n4.mjt.lu/wgt/xr4n4/hj5/form?c=40a44fa4" width="100%" style="height: 0;"></iframe> |
|
||||
|
|
||||
<script type="text/javascript" src="https://app.mailjet.com/pas-nc-embedded-v1.js"></script> |
|
@ -1,24 +0,0 @@ |
|||||
# `APIRouter`-Klasse |
|
||||
|
|
||||
Hier sind die Referenzinformationen für die Klasse `APIRouter` mit all ihren Parametern, Attributen und Methoden. |
|
||||
|
|
||||
Sie können die `APIRouter`-Klasse direkt von `fastapi` importieren: |
|
||||
|
|
||||
```python |
|
||||
from fastapi import APIRouter |
|
||||
``` |
|
||||
|
|
||||
::: fastapi.APIRouter |
|
||||
options: |
|
||||
members: |
|
||||
- websocket |
|
||||
- include_router |
|
||||
- get |
|
||||
- put |
|
||||
- post |
|
||||
- delete |
|
||||
- options |
|
||||
- head |
|
||||
- patch |
|
||||
- trace |
|
||||
- on_event |
|
@ -1,11 +0,0 @@ |
|||||
# Hintergrundtasks – `BackgroundTasks` |
|
||||
|
|
||||
Sie können einen Parameter in einer *Pfadoperation-Funktion* oder einer Abhängigkeitsfunktion mit dem Typ `BackgroundTasks` deklarieren und diesen danach verwenden, um die Ausführung von Hintergrundtasks nach dem Senden der Response zu definieren. |
|
||||
|
|
||||
Sie können `BackgroundTasks` direkt von `fastapi` importieren: |
|
||||
|
|
||||
```python |
|
||||
from fastapi import BackgroundTasks |
|
||||
``` |
|
||||
|
|
||||
::: fastapi.BackgroundTasks |
|
@ -1,29 +0,0 @@ |
|||||
# Abhängigkeiten – `Depends()` und `Security()` |
|
||||
|
|
||||
## `Depends()` |
|
||||
|
|
||||
Abhängigkeiten werden hauptsächlich mit der speziellen Funktion `Depends()` behandelt, die ein Callable entgegennimmt. |
|
||||
|
|
||||
Hier finden Sie deren Referenz und Parameter. |
|
||||
|
|
||||
Sie können sie direkt von `fastapi` importieren: |
|
||||
|
|
||||
```python |
|
||||
from fastapi import Depends |
|
||||
``` |
|
||||
|
|
||||
::: fastapi.Depends |
|
||||
|
|
||||
## `Security()` |
|
||||
|
|
||||
In vielen Szenarien können Sie die Sicherheit (Autorisierung, Authentifizierung usw.) mit Abhängigkeiten handhaben, indem Sie `Depends()` verwenden. |
|
||||
|
|
||||
Wenn Sie jedoch auch OAuth2-Scopes deklarieren möchten, können Sie `Security()` anstelle von `Depends()` verwenden. |
|
||||
|
|
||||
Sie können `Security()` direkt von `fastapi` importieren: |
|
||||
|
|
||||
```python |
|
||||
from fastapi import Security |
|
||||
``` |
|
||||
|
|
||||
::: fastapi.Security |
|
@ -1,3 +0,0 @@ |
|||||
# Encoder – `jsonable_encoder` |
|
||||
|
|
||||
::: fastapi.encoders.jsonable_encoder |
|
@ -1,20 +0,0 @@ |
|||||
# Exceptions – `HTTPException` und `WebSocketException` |
|
||||
|
|
||||
Dies sind die <abbr title="Exception – Ausnahme, Fehler: Python-Objekt, das einen Fehler nebst Metadaten repräsentiert">Exceptions</abbr>, die Sie auslösen können, um dem Client Fehler zu berichten. |
|
||||
|
|
||||
Wenn Sie eine Exception auslösen, wird, wie es bei normalem Python der Fall wäre, der Rest der Ausführung abgebrochen. Auf diese Weise können Sie diese Exceptions von überall im Code werfen, um einen Request abzubrechen und den Fehler dem Client anzuzeigen. |
|
||||
|
|
||||
Sie können Folgendes verwenden: |
|
||||
|
|
||||
* `HTTPException` |
|
||||
* `WebSocketException` |
|
||||
|
|
||||
Diese Exceptions können direkt von `fastapi` importiert werden: |
|
||||
|
|
||||
```python |
|
||||
from fastapi import HTTPException, WebSocketException |
|
||||
``` |
|
||||
|
|
||||
::: fastapi.HTTPException |
|
||||
|
|
||||
::: fastapi.WebSocketException |
|
@ -1,31 +0,0 @@ |
|||||
# `FastAPI`-Klasse |
|
||||
|
|
||||
Hier sind die Referenzinformationen für die Klasse `FastAPI` mit all ihren Parametern, Attributen und Methoden. |
|
||||
|
|
||||
Sie können die `FastAPI`-Klasse direkt von `fastapi` importieren: |
|
||||
|
|
||||
```python |
|
||||
from fastapi import FastAPI |
|
||||
``` |
|
||||
|
|
||||
::: fastapi.FastAPI |
|
||||
options: |
|
||||
members: |
|
||||
- openapi_version |
|
||||
- webhooks |
|
||||
- state |
|
||||
- dependency_overrides |
|
||||
- openapi |
|
||||
- websocket |
|
||||
- include_router |
|
||||
- get |
|
||||
- put |
|
||||
- post |
|
||||
- delete |
|
||||
- options |
|
||||
- head |
|
||||
- patch |
|
||||
- trace |
|
||||
- on_event |
|
||||
- middleware |
|
||||
- exception_handler |
|
@ -1,11 +0,0 @@ |
|||||
# `HTTPConnection`-Klasse |
|
||||
|
|
||||
Wenn Sie Abhängigkeiten definieren möchten, die sowohl mit HTTP als auch mit WebSockets kompatibel sein sollen, können Sie einen Parameter definieren, der eine `HTTPConnection` anstelle eines `Request` oder eines `WebSocket` akzeptiert. |
|
||||
|
|
||||
Sie können diese von `fastapi.requests` importieren: |
|
||||
|
|
||||
```python |
|
||||
from fastapi.requests import HTTPConnection |
|
||||
``` |
|
||||
|
|
||||
::: fastapi.requests.HTTPConnection |
|
@ -1,8 +0,0 @@ |
|||||
# Referenz – Code-API |
|
||||
|
|
||||
Hier ist die Referenz oder Code-API, die Klassen, Funktionen, Parameter, Attribute und alle FastAPI-Teile, die Sie in Ihren Anwendungen verwenden können. |
|
||||
|
|
||||
Wenn Sie **FastAPI** lernen möchten, ist es viel besser, das [FastAPI-Tutorial](https://fastapi.tiangolo.com/tutorial/) zu lesen. |
|
||||
|
|
||||
!!! note "Hinweis Deutsche Übersetzung" |
|
||||
Die nachfolgende API wird aus der Quelltext-Dokumentation erstellt, daher sind nur die Einleitungen auf Deutsch. |
|
@ -1,45 +0,0 @@ |
|||||
# Middleware |
|
||||
|
|
||||
Es gibt mehrere Middlewares, die direkt von Starlette bereitgestellt werden. |
|
||||
|
|
||||
Lesen Sie mehr darüber in der [FastAPI-Dokumentation über Middleware](../advanced/middleware.md). |
|
||||
|
|
||||
::: fastapi.middleware.cors.CORSMiddleware |
|
||||
|
|
||||
Kann von `fastapi` importiert werden: |
|
||||
|
|
||||
```python |
|
||||
from fastapi.middleware.cors import CORSMiddleware |
|
||||
``` |
|
||||
|
|
||||
::: fastapi.middleware.gzip.GZipMiddleware |
|
||||
|
|
||||
Kann von `fastapi` importiert werden: |
|
||||
|
|
||||
```python |
|
||||
from fastapi.middleware.gzip import GZipMiddleware |
|
||||
``` |
|
||||
|
|
||||
::: fastapi.middleware.httpsredirect.HTTPSRedirectMiddleware |
|
||||
|
|
||||
Kann von `fastapi` importiert werden: |
|
||||
|
|
||||
```python |
|
||||
from fastapi.middleware.httpsredirect import HTTPSRedirectMiddleware |
|
||||
``` |
|
||||
|
|
||||
::: fastapi.middleware.trustedhost.TrustedHostMiddleware |
|
||||
|
|
||||
Kann von `fastapi` importiert werden: |
|
||||
|
|
||||
```python |
|
||||
from fastapi.middleware.trustedhost import TrustedHostMiddleware |
|
||||
``` |
|
||||
|
|
||||
::: fastapi.middleware.wsgi.WSGIMiddleware |
|
||||
|
|
||||
Kann von `fastapi` importiert werden: |
|
||||
|
|
||||
```python |
|
||||
from fastapi.middleware.wsgi import WSGIMiddleware |
|
||||
``` |
|
@ -1,11 +0,0 @@ |
|||||
# OpenAPI `docs` |
|
||||
|
|
||||
Werkzeuge zur Verwaltung der automatischen OpenAPI-UI-Dokumentation, einschließlich Swagger UI (standardmäßig unter `/docs`) und ReDoc (standardmäßig unter `/redoc`). |
|
||||
|
|
||||
::: fastapi.openapi.docs.get_swagger_ui_html |
|
||||
|
|
||||
::: fastapi.openapi.docs.get_redoc_html |
|
||||
|
|
||||
::: fastapi.openapi.docs.get_swagger_ui_oauth2_redirect_html |
|
||||
|
|
||||
::: fastapi.openapi.docs.swagger_ui_default_parameters |
|
@ -1,5 +0,0 @@ |
|||||
# OpenAPI |
|
||||
|
|
||||
Es gibt mehrere Werkzeuge zur Handhabung von OpenAPI. |
|
||||
|
|
||||
Normalerweise müssen Sie diese nicht verwenden, es sei denn, Sie haben einen bestimmten fortgeschrittenen Anwendungsfall, welcher das erfordert. |
|
@ -1,5 +0,0 @@ |
|||||
# OpenAPI-`models` |
|
||||
|
|
||||
OpenAPI Pydantic-Modelle, werden zum Generieren und Validieren der generierten OpenAPI verwendet. |
|
||||
|
|
||||
::: fastapi.openapi.models |
|
@ -1,35 +0,0 @@ |
|||||
# Request-Parameter |
|
||||
|
|
||||
Hier die Referenzinformationen für die Request-Parameter. |
|
||||
|
|
||||
Dies sind die Sonderfunktionen, die Sie mittels `Annotated` in *Pfadoperation-Funktion*-Parameter oder Abhängigkeitsfunktionen einfügen können, um Daten aus dem Request abzurufen. |
|
||||
|
|
||||
Dies beinhaltet: |
|
||||
|
|
||||
* `Query()` |
|
||||
* `Path()` |
|
||||
* `Body()` |
|
||||
* `Cookie()` |
|
||||
* `Header()` |
|
||||
* `Form()` |
|
||||
* `File()` |
|
||||
|
|
||||
Sie können diese alle direkt von `fastapi` importieren: |
|
||||
|
|
||||
```python |
|
||||
from fastapi import Body, Cookie, File, Form, Header, Path, Query |
|
||||
``` |
|
||||
|
|
||||
::: fastapi.Query |
|
||||
|
|
||||
::: fastapi.Path |
|
||||
|
|
||||
::: fastapi.Body |
|
||||
|
|
||||
::: fastapi.Cookie |
|
||||
|
|
||||
::: fastapi.Header |
|
||||
|
|
||||
::: fastapi.Form |
|
||||
|
|
||||
::: fastapi.File |
|
@ -1,14 +0,0 @@ |
|||||
# `Request`-Klasse |
|
||||
|
|
||||
Sie können einen Parameter in einer *Pfadoperation-Funktion* oder einer Abhängigkeit als vom Typ `Request` deklarieren und dann direkt auf das Requestobjekt zugreifen, ohne jegliche Validierung, usw. |
|
||||
|
|
||||
Sie können es direkt von `fastapi` importieren: |
|
||||
|
|
||||
```python |
|
||||
from fastapi import Request |
|
||||
``` |
|
||||
|
|
||||
!!! tip "Tipp" |
|
||||
Wenn Sie Abhängigkeiten definieren möchten, die sowohl mit HTTP als auch mit WebSockets kompatibel sein sollen, können Sie einen Parameter definieren, der eine `HTTPConnection` anstelle eines `Request` oder eines `WebSocket` akzeptiert. |
|
||||
|
|
||||
::: fastapi.Request |
|
@ -1,13 +0,0 @@ |
|||||
# `Response`-Klasse |
|
||||
|
|
||||
Sie können einen Parameter in einer *Pfadoperation-Funktion* oder einer Abhängigkeit als `Response` deklarieren und dann Daten für die Response wie Header oder Cookies festlegen. |
|
||||
|
|
||||
Diese können Sie auch direkt verwenden, um eine Instanz davon zu erstellen und diese von Ihren *Pfadoperationen* zurückzugeben. |
|
||||
|
|
||||
Sie können sie direkt von `fastapi` importieren: |
|
||||
|
|
||||
```python |
|
||||
from fastapi import Response |
|
||||
``` |
|
||||
|
|
||||
::: fastapi.Response |
|
@ -1,164 +0,0 @@ |
|||||
# Benutzerdefinierte Responseklassen – File, HTML, Redirect, Streaming, usw. |
|
||||
|
|
||||
Es gibt mehrere benutzerdefinierte Responseklassen, von denen Sie eine Instanz erstellen und diese direkt von Ihren *Pfadoperationen* zurückgeben können. |
|
||||
|
|
||||
Lesen Sie mehr darüber in der [FastAPI-Dokumentation zu benutzerdefinierten Responses – HTML, Stream, Datei, andere](../advanced/custom-response.md). |
|
||||
|
|
||||
Sie können diese direkt von `fastapi.responses` importieren: |
|
||||
|
|
||||
```python |
|
||||
from fastapi.responses import ( |
|
||||
FileResponse, |
|
||||
HTMLResponse, |
|
||||
JSONResponse, |
|
||||
ORJSONResponse, |
|
||||
PlainTextResponse, |
|
||||
RedirectResponse, |
|
||||
Response, |
|
||||
StreamingResponse, |
|
||||
UJSONResponse, |
|
||||
) |
|
||||
``` |
|
||||
|
|
||||
## FastAPI-Responses |
|
||||
|
|
||||
Es gibt einige benutzerdefinierte FastAPI-Responseklassen, welche Sie verwenden können, um die JSON-Performanz zu optimieren. |
|
||||
|
|
||||
::: fastapi.responses.UJSONResponse |
|
||||
options: |
|
||||
members: |
|
||||
- charset |
|
||||
- status_code |
|
||||
- media_type |
|
||||
- body |
|
||||
- background |
|
||||
- raw_headers |
|
||||
- render |
|
||||
- init_headers |
|
||||
- headers |
|
||||
- set_cookie |
|
||||
- delete_cookie |
|
||||
|
|
||||
::: fastapi.responses.ORJSONResponse |
|
||||
options: |
|
||||
members: |
|
||||
- charset |
|
||||
- status_code |
|
||||
- media_type |
|
||||
- body |
|
||||
- background |
|
||||
- raw_headers |
|
||||
- render |
|
||||
- init_headers |
|
||||
- headers |
|
||||
- set_cookie |
|
||||
- delete_cookie |
|
||||
|
|
||||
## Starlette-Responses |
|
||||
|
|
||||
::: fastapi.responses.FileResponse |
|
||||
options: |
|
||||
members: |
|
||||
- chunk_size |
|
||||
- charset |
|
||||
- status_code |
|
||||
- media_type |
|
||||
- body |
|
||||
- background |
|
||||
- raw_headers |
|
||||
- render |
|
||||
- init_headers |
|
||||
- headers |
|
||||
- set_cookie |
|
||||
- delete_cookie |
|
||||
|
|
||||
::: fastapi.responses.HTMLResponse |
|
||||
options: |
|
||||
members: |
|
||||
- charset |
|
||||
- status_code |
|
||||
- media_type |
|
||||
- body |
|
||||
- background |
|
||||
- raw_headers |
|
||||
- render |
|
||||
- init_headers |
|
||||
- headers |
|
||||
- set_cookie |
|
||||
- delete_cookie |
|
||||
|
|
||||
::: fastapi.responses.JSONResponse |
|
||||
options: |
|
||||
members: |
|
||||
- charset |
|
||||
- status_code |
|
||||
- media_type |
|
||||
- body |
|
||||
- background |
|
||||
- raw_headers |
|
||||
- render |
|
||||
- init_headers |
|
||||
- headers |
|
||||
- set_cookie |
|
||||
- delete_cookie |
|
||||
|
|
||||
::: fastapi.responses.PlainTextResponse |
|
||||
options: |
|
||||
members: |
|
||||
- charset |
|
||||
- status_code |
|
||||
- media_type |
|
||||
- body |
|
||||
- background |
|
||||
- raw_headers |
|
||||
- render |
|
||||
- init_headers |
|
||||
- headers |
|
||||
- set_cookie |
|
||||
- delete_cookie |
|
||||
|
|
||||
::: fastapi.responses.RedirectResponse |
|
||||
options: |
|
||||
members: |
|
||||
- charset |
|
||||
- status_code |
|
||||
- media_type |
|
||||
- body |
|
||||
- background |
|
||||
- raw_headers |
|
||||
- render |
|
||||
- init_headers |
|
||||
- headers |
|
||||
- set_cookie |
|
||||
- delete_cookie |
|
||||
|
|
||||
::: fastapi.responses.Response |
|
||||
options: |
|
||||
members: |
|
||||
- charset |
|
||||
- status_code |
|
||||
- media_type |
|
||||
- body |
|
||||
- background |
|
||||
- raw_headers |
|
||||
- render |
|
||||
- init_headers |
|
||||
- headers |
|
||||
- set_cookie |
|
||||
- delete_cookie |
|
||||
|
|
||||
::: fastapi.responses.StreamingResponse |
|
||||
options: |
|
||||
members: |
|
||||
- body_iterator |
|
||||
- charset |
|
||||
- status_code |
|
||||
- media_type |
|
||||
- body |
|
||||
- background |
|
||||
- raw_headers |
|
||||
- render |
|
||||
- init_headers |
|
||||
- headers |
|
||||
- set_cookie |
|
||||
- delete_cookie |
|
@ -1,73 +0,0 @@ |
|||||
# Sicherheitstools |
|
||||
|
|
||||
Wenn Sie Abhängigkeiten mit OAuth2-Scopes deklarieren müssen, verwenden Sie `Security()`. |
|
||||
|
|
||||
Aber Sie müssen immer noch definieren, was das <abbr title="Das von dem abhängt, die zu verwendende Abhängigkeit">Dependable</abbr>, das Callable ist, welches Sie als Parameter an `Depends()` oder `Security()` übergeben. |
|
||||
|
|
||||
Es gibt mehrere Tools, mit denen Sie diese Dependables erstellen können, und sie werden in OpenAPI integriert, sodass sie in der Oberfläche der automatischen Dokumentation angezeigt werden und von automatisch generierten Clients und SDKs, usw., verwendet werden können. |
|
||||
|
|
||||
Sie können sie von `fastapi.security` importieren: |
|
||||
|
|
||||
```python |
|
||||
from fastapi.security import ( |
|
||||
APIKeyCookie, |
|
||||
APIKeyHeader, |
|
||||
APIKeyQuery, |
|
||||
HTTPAuthorizationCredentials, |
|
||||
HTTPBasic, |
|
||||
HTTPBasicCredentials, |
|
||||
HTTPBearer, |
|
||||
HTTPDigest, |
|
||||
OAuth2, |
|
||||
OAuth2AuthorizationCodeBearer, |
|
||||
OAuth2PasswordBearer, |
|
||||
OAuth2PasswordRequestForm, |
|
||||
OAuth2PasswordRequestFormStrict, |
|
||||
OpenIdConnect, |
|
||||
SecurityScopes, |
|
||||
) |
|
||||
``` |
|
||||
|
|
||||
## API-Schlüssel-Sicherheitsschemas |
|
||||
|
|
||||
::: fastapi.security.APIKeyCookie |
|
||||
|
|
||||
::: fastapi.security.APIKeyHeader |
|
||||
|
|
||||
::: fastapi.security.APIKeyQuery |
|
||||
|
|
||||
## HTTP-Authentifizierungsschemas |
|
||||
|
|
||||
::: fastapi.security.HTTPBasic |
|
||||
|
|
||||
::: fastapi.security.HTTPBearer |
|
||||
|
|
||||
::: fastapi.security.HTTPDigest |
|
||||
|
|
||||
## HTTP-Anmeldeinformationen |
|
||||
|
|
||||
::: fastapi.security.HTTPAuthorizationCredentials |
|
||||
|
|
||||
::: fastapi.security.HTTPBasicCredentials |
|
||||
|
|
||||
## OAuth2-Authentifizierung |
|
||||
|
|
||||
::: fastapi.security.OAuth2 |
|
||||
|
|
||||
::: fastapi.security.OAuth2AuthorizationCodeBearer |
|
||||
|
|
||||
::: fastapi.security.OAuth2PasswordBearer |
|
||||
|
|
||||
## OAuth2-Passwortformulare |
|
||||
|
|
||||
::: fastapi.security.OAuth2PasswordRequestForm |
|
||||
|
|
||||
::: fastapi.security.OAuth2PasswordRequestFormStrict |
|
||||
|
|
||||
## OAuth2-Sicherheitsscopes in Abhängigkeiten |
|
||||
|
|
||||
::: fastapi.security.SecurityScopes |
|
||||
|
|
||||
## OpenID Connect |
|
||||
|
|
||||
::: fastapi.security.OpenIdConnect |
|
@ -1,13 +0,0 @@ |
|||||
# Statische Dateien – `StaticFiles` |
|
||||
|
|
||||
Sie können die `StaticFiles`-Klasse verwenden, um statische Dateien wie JavaScript, CSS, Bilder, usw. bereitzustellen. |
|
||||
|
|
||||
Lesen Sie mehr darüber in der [FastAPI-Dokumentation zu statischen Dateien](../tutorial/static-files.md). |
|
||||
|
|
||||
Sie können sie direkt von `fastapi.staticfiles` importieren: |
|
||||
|
|
||||
```python |
|
||||
from fastapi.staticfiles import StaticFiles |
|
||||
``` |
|
||||
|
|
||||
::: fastapi.staticfiles.StaticFiles |
|
@ -1,36 +0,0 @@ |
|||||
# Statuscodes |
|
||||
|
|
||||
Sie können das Modul `status` von `fastapi` importieren: |
|
||||
|
|
||||
```python |
|
||||
from fastapi import status |
|
||||
``` |
|
||||
|
|
||||
`status` wird direkt von Starlette bereitgestellt. |
|
||||
|
|
||||
Es enthält eine Gruppe benannter Konstanten (Variablen) mit ganzzahligen Statuscodes. |
|
||||
|
|
||||
Zum Beispiel: |
|
||||
|
|
||||
* 200: `status.HTTP_200_OK` |
|
||||
* 403: `status.HTTP_403_FORBIDDEN` |
|
||||
* usw. |
|
||||
|
|
||||
Es kann praktisch sein, schnell auf HTTP- (und WebSocket-)Statuscodes in Ihrer Anwendung zuzugreifen, indem Sie die automatische Vervollständigung für den Namen verwenden, ohne sich die Zahlen für die Statuscodes merken zu müssen. |
|
||||
|
|
||||
Lesen Sie mehr darüber in der [FastAPI-Dokumentation zu Response-Statuscodes](../tutorial/response-status-code.md). |
|
||||
|
|
||||
## Beispiel |
|
||||
|
|
||||
```python |
|
||||
from fastapi import FastAPI, status |
|
||||
|
|
||||
app = FastAPI() |
|
||||
|
|
||||
|
|
||||
@app.get("/items/", status_code=status.HTTP_418_IM_A_TEAPOT) |
|
||||
def read_items(): |
|
||||
return [{"name": "Plumbus"}, {"name": "Portal Gun"}] |
|
||||
``` |
|
||||
|
|
||||
::: fastapi.status |
|
@ -1,13 +0,0 @@ |
|||||
# Templating – `Jinja2Templates` |
|
||||
|
|
||||
Sie können die `Jinja2Templates`-Klasse verwenden, um Jinja-Templates zu rendern. |
|
||||
|
|
||||
Lesen Sie mehr darüber in der [FastAPI-Dokumentation zu Templates](../advanced/templates.md). |
|
||||
|
|
||||
Sie können die Klasse direkt von `fastapi.templating` importieren: |
|
||||
|
|
||||
```python |
|
||||
from fastapi.templating import Jinja2Templates |
|
||||
``` |
|
||||
|
|
||||
::: fastapi.templating.Jinja2Templates |
|
@ -1,13 +0,0 @@ |
|||||
# Testclient – `TestClient` |
|
||||
|
|
||||
Sie können die `TestClient`-Klasse verwenden, um FastAPI-Anwendungen zu testen, ohne eine tatsächliche HTTP- und Socket-Verbindung zu erstellen, Sie kommunizieren einfach direkt mit dem FastAPI-Code. |
|
||||
|
|
||||
Lesen Sie mehr darüber in der [FastAPI-Dokumentation über Testen](../tutorial/testing.md). |
|
||||
|
|
||||
Sie können sie direkt von `fastapi.testclient` importieren: |
|
||||
|
|
||||
```python |
|
||||
from fastapi.testclient import TestClient |
|
||||
``` |
|
||||
|
|
||||
::: fastapi.testclient.TestClient |
|
@ -1,22 +0,0 @@ |
|||||
# `UploadFile`-Klasse |
|
||||
|
|
||||
Sie können *Pfadoperation-Funktionsparameter* als Parameter vom Typ `UploadFile` definieren, um Dateien aus dem Request zu erhalten. |
|
||||
|
|
||||
Sie können es direkt von `fastapi` importieren: |
|
||||
|
|
||||
```python |
|
||||
from fastapi import UploadFile |
|
||||
``` |
|
||||
|
|
||||
::: fastapi.UploadFile |
|
||||
options: |
|
||||
members: |
|
||||
- file |
|
||||
- filename |
|
||||
- size |
|
||||
- headers |
|
||||
- content_type |
|
||||
- read |
|
||||
- write |
|
||||
- seek |
|
||||
- close |
|
@ -1,64 +0,0 @@ |
|||||
# WebSockets |
|
||||
|
|
||||
Bei der Definition von WebSockets deklarieren Sie normalerweise einen Parameter vom Typ `WebSocket` und können damit Daten vom Client lesen und an ihn senden. Er wird direkt von Starlette bereitgestellt, Sie können ihn aber von `fastapi` importieren: |
|
||||
|
|
||||
```python |
|
||||
from fastapi import WebSocket |
|
||||
``` |
|
||||
|
|
||||
!!! tip "Tipp" |
|
||||
Wenn Sie Abhängigkeiten definieren möchten, die sowohl mit HTTP als auch mit WebSockets kompatibel sein sollen, können Sie einen Parameter definieren, der eine `HTTPConnection` anstelle eines `Request` oder eines `WebSocket` akzeptiert. |
|
||||
|
|
||||
::: fastapi.WebSocket |
|
||||
options: |
|
||||
members: |
|
||||
- scope |
|
||||
- app |
|
||||
- url |
|
||||
- base_url |
|
||||
- headers |
|
||||
- query_params |
|
||||
- path_params |
|
||||
- cookies |
|
||||
- client |
|
||||
- state |
|
||||
- url_for |
|
||||
- client_state |
|
||||
- application_state |
|
||||
- receive |
|
||||
- send |
|
||||
- accept |
|
||||
- receive_text |
|
||||
- receive_bytes |
|
||||
- receive_json |
|
||||
- iter_text |
|
||||
- iter_bytes |
|
||||
- iter_json |
|
||||
- send_text |
|
||||
- send_bytes |
|
||||
- send_json |
|
||||
- close |
|
||||
|
|
||||
Wenn ein Client die Verbindung trennt, wird eine `WebSocketDisconnect`-Exception ausgelöst, die Sie abfangen können. |
|
||||
|
|
||||
Sie können diese direkt von `fastapi` importieren: |
|
||||
|
|
||||
```python |
|
||||
from fastapi import WebSocketDisconnect |
|
||||
``` |
|
||||
|
|
||||
::: fastapi.WebSocketDisconnect |
|
||||
|
|
||||
## WebSockets – zusätzliche Klassen |
|
||||
|
|
||||
Zusätzliche Klassen für die Handhabung von WebSockets. |
|
||||
|
|
||||
Werden direkt von Starlette bereitgestellt, Sie können sie jedoch von `fastapi` importieren: |
|
||||
|
|
||||
```python |
|
||||
from fastapi.websockets import WebSocketDisconnect, WebSocketState |
|
||||
``` |
|
||||
|
|
||||
::: fastapi.websockets.WebSocketDisconnect |
|
||||
|
|
||||
::: fastapi.websockets.WebSocketState |
|
Some files were not shown because too many files changed in this diff
Loading…
Reference in new issue