From ad33193f2c3d7732e804d0d5abdd08ab2ad4796d Mon Sep 17 00:00:00 2001
From: 11kkw <11kkw17@gmail.com>
Date: Sun, 9 Feb 2025 23:54:09 +0900
Subject: [PATCH 001/138] =?UTF-8?q?=F0=9F=8C=90=20Add=20Korean=20translati?=
=?UTF-8?q?on=20for=20`docs/ko/docs/tutorial/dependencies/dependencies-wit?=
=?UTF-8?q?h-yield.md`=20(#13257)?=
MIME-Version: 1.0
Content-Type: text/plain; charset=UTF-8
Content-Transfer-Encoding: 8bit
---
.../dependencies/dependencies-with-yield.md | 275 ++++++++++++++++++
1 file changed, 275 insertions(+)
create mode 100644 docs/ko/docs/tutorial/dependencies/dependencies-with-yield.md
diff --git a/docs/ko/docs/tutorial/dependencies/dependencies-with-yield.md b/docs/ko/docs/tutorial/dependencies/dependencies-with-yield.md
new file mode 100644
index 000000000..ff174937d
--- /dev/null
+++ b/docs/ko/docs/tutorial/dependencies/dependencies-with-yield.md
@@ -0,0 +1,275 @@
+# yield를 사용하는 의존성
+
+FastAPI는 작업 완료 후 추가 단계를 수행하는 의존성을 지원합니다.
+
+이를 구현하려면 `return` 대신 `yield`를 사용하고, 추가로 실행할 단계 (코드)를 그 뒤에 작성하세요.
+
+/// tip | 팁
+
+각 의존성마다 `yield`는 한 번만 사용해야 합니다.
+
+///
+
+/// note | 기술 세부사항
+
+다음과 함께 사용할 수 있는 모든 함수:
+
+* `@contextlib.contextmanager` 또는
+* `@contextlib.asynccontextmanager`
+
+는 **FastAPI**의 의존성으로 사용할 수 있습니다.
+
+사실, FastAPI는 내부적으로 이 두 데코레이터를 사용합니다.
+
+///
+
+## `yield`를 사용하는 데이터베이스 의존성
+
+예를 들어, 이 기능을 사용하면 데이터베이스 세션을 생성하고 작업이 끝난 후에 세션을 종료할 수 있습니다.
+
+응답을 생성하기 전에는 `yield`문을 포함하여 그 이전의 코드만이 실행됩니다:
+
+{* ../../docs_src/dependencies/tutorial007.py hl[2:4] *}
+
+yield된 값은 *경로 작업* 및 다른 의존성들에 주입되는 값 입니다:
+
+{* ../../docs_src/dependencies/tutorial007.py hl[4] *}
+
+`yield`문 다음의 코드는 응답을 생성한 후 보내기 전에 실행됩니다:
+
+{* ../../docs_src/dependencies/tutorial007.py hl[5:6] *}
+
+/// tip | 팁
+
+`async` 함수와 일반 함수 모두 사용할 수 있습니다.
+
+**FastAPI**는 일반 의존성과 마찬가지로 각각의 함수를 올바르게 처리할 것입니다.
+
+///
+
+## `yield`와 `try`를 사용하는 의존성
+
+`yield`를 사용하는 의존성에서 `try` 블록을 사용한다면, 의존성을 사용하는 도중 발생한 모든 예외를 받을 수 있습니다.
+
+예를 들어, 다른 의존성이나 *경로 작업*의 중간에 데이터베이스 트랜잭션 "롤백"이 발생하거나 다른 오류가 발생한다면, 해당 예외를 의존성에서 받을 수 있습니다.
+
+따라서, 의존성 내에서 `except SomeException`을 사용하여 특정 예외를 처리할 수 있습니다.
+
+마찬가지로, `finally`를 사용하여 예외 발생 여부와 관계 없이 종료 단계까 실행되도록 할 수 있습니다.
+
+{* ../../docs_src/dependencies/tutorial007.py hl[3,5] *}
+
+## `yield`를 사용하는 하위 의존성
+
+모든 크기와 형태의 하위 의존성과 하위 의존성의 "트리"도 가질 수 있으며, 이들 모두가 `yield`를 사용할 수 있습니다.
+
+**FastAPI**는 `yield`를 사용하는 각 의존성의 "종료 코드"가 올바른 순서로 실행되도록 보장합니다.
+
+예를 들어, `dependency_c`는 `dependency_b`에 의존할 수 있고, `dependency_b`는 `dependency_a`에 의존할 수 있습니다.
+
+{* ../../docs_src/dependencies/tutorial008_an_py39.py hl[6,14,22] *}
+
+이들 모두는 `yield`를 사용할 수 있습니다.
+
+이 경우 `dependency_c`는 종료 코드를 실행하기 위해, `dependency_b`의 값 (여기서는 `dep_b`로 명명)이 여전히 사용 가능해야 합니다.
+
+그리고, `dependency_b`는 종료 코드를 위해 `dependency_a`의 값 (여기서는 `dep_a`로 명명) 이 사용 가능해야 합니다.
+
+{* ../../docs_src/dependencies/tutorial008_an_py39.py hl[18:19,26:27] *}
+
+같은 방식으로, `yield`를 사용하는 의존성과 `return`을 사용하는 의존성을 함께 사용할 수 있으며, 이들 중 일부가 다른 것들에 의존할 수 있습니다.
+
+그리고 `yield`를 사용하는 다른 여러 의존성을 필요로 하는 단일 의존성을 가질 수도 있습니다.
+
+원하는 의존성을 원하는 대로 조합할 수 있습니다.
+
+**FastAPI**는 모든 것이 올바른 순서로 실행되도록 보장합니다.
+
+/// note | 기술 세부사항
+
+파이썬의 Context Managers 덕분에 이 기능이 작동합니다.
+
+**FastAPI**는 이를 내부적으로 컨텍스트 관리자를 사용하여 구현합니다.
+
+///
+
+## `yield`와 `HTTPException`를 사용하는 의존성
+
+`yield`와 `try` 블록이 있는 의존성을 사용하여 예외를 처리할 수 있다는 것을 알게 되었습니다.
+
+같은 방식으로, `yield` 이후의 종료 코드에서 `HTTPException`이나 유사한 예외를 발생시킬 수 있습니다.
+
+/// tip | 팁
+
+이는 다소 고급 기술이며, 대부분의 경우 경로 연산 함수 등 나머지 애플리케이션 코드 내부에서 예외 (`HTTPException` 포함)를 발생시킬 수 있으므로 실제로는 필요하지 않을 것입니다.
+
+하지만 필요한 경우 사용할 수 있습니다. 🤓
+
+///
+
+{* ../../docs_src/dependencies/tutorial008b_an_py39.py hl[18:22,31] *}
+
+예외를 처리하고(또는 추가로 다른 `HTTPException`을 발생시키기 위해) 사용할 수 있는 또 다른 방법은 [사용자 정의 예외 처리기](../handling-errors.md#install-custom-exception-handlers){.internal-link target=_blank}를 생성하는 것 입니다.
+
+## `yield`와 `except`를 사용하는 의존성
+
+`yield`를 사용하는 의존성에서 `except`를 사용하여 예외를 포착하고 예외를 다시 발생시키지 않거나 (또는 새 예외를 발생시키지 않으면), FastAPI는 해당 예외가 발생했는지 알 수 없습니다. 이는 일반적인 Python 방식과 동일합니다:
+
+{* ../../docs_src/dependencies/tutorial008c_an_py39.py hl[15:16] *}
+
+이 경우, `HTTPException`이나 유사한 예외를 발생시키지 않기 때문에 클라이언트는 HTTP 500 Internal Server Error 응답을 보게 되지만, 서버는 어떤 오류가 발생했는지에 대한 **로그**나 다른 표시를 전혀 가지지 않게 됩니다. 😱
+
+### `yield`와 `except`를 사용하는 의존성에서 항상 `raise` 하기
+
+`yield`가 있는 의존성에서 예외를 잡았을 때는 `HTTPException`이나 유사한 예외를 새로 발생시키지 않는 한, 반드시 원래의 예외를 다시 발생시켜야 합니다.
+
+`raise`를 사용하여 동일한 예외를 다시 발생시킬 수 있습니다:
+
+{* ../../docs_src/dependencies/tutorial008d_an_py39.py hl[17] *}
+
+이제 클라이언트는 동일한 *HTTP 500 Internal Server Error* 오류 응답을 받게 되지만, 서버 로그에는 사용자 정의 예외인 `InternalError"가 기록됩니다. 😎
+
+## `yield`를 사용하는 의존성의 실행 순서
+
+실행 순서는 아래 다이어그램과 거의 비슷합니다. 시간은 위에서 아래로 흐릅니다. 그리고 각 열은 상호 작용하거나 코드를 실행하는 부분 중 하나입니다.
+
+```mermaid
+sequenceDiagram
+
+participant client as Client
+participant handler as Exception handler
+participant dep as Dep with yield
+participant operation as Path Operation
+participant tasks as Background tasks
+
+ Note over client,operation: Can raise exceptions, including HTTPException
+ client ->> dep: Start request
+ Note over dep: Run code up to yield
+ opt raise Exception
+ dep -->> handler: Raise Exception
+ handler -->> client: HTTP error response
+ end
+ dep ->> operation: Run dependency, e.g. DB session
+ opt raise
+ operation -->> dep: Raise Exception (e.g. HTTPException)
+ opt handle
+ dep -->> dep: Can catch exception, raise a new HTTPException, raise other exception
+ end
+ handler -->> client: HTTP error response
+ end
+
+ operation ->> client: Return response to client
+ Note over client,operation: Response is already sent, can't change it anymore
+ opt Tasks
+ operation -->> tasks: Send background tasks
+ end
+ opt Raise other exception
+ tasks -->> tasks: Handle exceptions in the background task code
+ end
+```
+
+/// info | 정보
+
+클라이언트에 **하나의 응답** 만 전송됩니다. 이는 오류 응답 중 하나일 수도 있고,*경로 작업*에서 생성된 응답일 수도 있습니다.
+
+이러한 응답 중 하나가 전송된 후에는 다른 응답을 보낼 수 없습니다.
+
+///
+
+/// tip | 팁
+
+이 다이어그램은 `HTTPException`을 보여주지만, `yield`를 사용하는 의존성에서 처리한 예외나 [사용자 정의 예외처리기](../handling-errors.md#install-custom-exception-handlers){.internal-link target=_blank}.를 사용하여 처리한 다른 예외도 발생시킬 수 있습니다.
+
+어떤 예외가 발생하든, `HTTPException`을 포함하여 yield를 사용하는 의존성으로 전달됩니다. 대부분의 경우 예외를 다시 발생시키거나 새로운 예외를 발생시켜야 합니다.
+
+///
+
+## `yield`, `HTTPException`, `except` 및 백그라운드 작업을 사용하는 의존성
+
+/// warning | 경고
+
+이러한 기술적 세부 사항은 대부분 필요하지 않으므로 이 섹션을 건너뛰고 아래에서 계속 진행해도 됩니다.
+
+이러한 세부 정보는 주로 FastAPI 0.106.0 이전 버전에서 `yield`가 있는 의존성의 리소스를 백그라운드 작업에서 사용했던 경우메 유용합니다.
+
+///
+
+### `yield`와 `except`를 사용하는 의존성, 기술 세부사항
+
+FastAPI 0.110.0 이전에는 `yield`가 포함된 의존성을 사용한 후 해당 의존성에서 `except`가 포함된 예외를 캡처하고 다시 예외를 발생시키지 않으면 예외가 자동으로 예외 핸들러 또는 내부 서버 오류 핸들러로 발생/전달되었습니다.
+
+이는 처리기 없이 전달된 예외(내부 서버 오류)에서 처리되지 않은 메모리 소비를 수정하고 일반 파이썬 코드의 동작과 일치하도록 하기 위해 0.110.0 버전에서 변경되었습니다.
+
+### 백그라운드 작업과 `yield`를 사용하는 의존성, 기술 세부사항
+
+FastAPI 0.106.0 이전에는 `yield` 이후에 예외를 발생시키는 것이 불가능했습니다. `yield`가 있는 의존성 종료 코드는 응답이 전송된 이후에 실행되었기 때문에, [예외 처리기](../handling-errors.md#install-custom-exception-handlers){.internal-link target=_blank}가 이미 실행된 상태였습니다.
+
+이는 주로 백그라운드 작업 내에서 의존성에서 "yield된" 동일한 객체를 사용할 수 있도록 하기 위해 이런 방식으로 설계되었습니다. 종료 코드는 백그라운드 작업이 완료된 후에 실행되었기 때문입니다
+
+하지만 이렇게 하면 리소스를 불필요하게 양보한 의존성(예: 데이터베이스 연결)에서 보유하면서 응답이 네트워크를 통해 이동할 때까지 기다리는 것을 의미하기 때문에 FastAPI 0.106.0에서 변경되었습니다.
+
+/// tip | 팁
+
+또한 백그라운드 작업은 일반적으로 자체 리소스(예: 자체 데이터베이스 연결)를 사용하여 별도로 처리해야 하는 독립적인 로직 집합입니다.
+
+따라서 이렇게 하면 코드가 더 깔끔해집니다.
+
+///
+
+만약 이전에 이러한 동작에 의존했다면, 이제는 백그라운드 작업 내부에서 백그라운드 작업을 위한 리소스를 생성하고, `yield`가 있는 의존성의 리소스에 의존하지 않는 데이터만 내부적으로 사용해야합니다.
+
+예를 들어, 동일한 데이터베이스 세션을 사용하는 대신, 백그라운드 작업 내부에서 새로운 데이터베이스 세션을 생성하고 이 새로운 세션을 사용하여 데이터베이스에서 객체를 가져와야 합니다. 그리고 데이터베이스 객체를 백그라운드 작업 함수의 매개변수로 직접 전달하는 대신, 해당 객체의 ID를 전달한 다음 백그라운드 작업 함수 내부에서 객체를 다시 가져와야 합니다
+
+## 컨텍스트 관리자
+
+### "컨텍스트 관리자"란?
+
+"컨텍스트 관리자"는 Python에서 `with` 문에서 사용할 수 있는 모든 객체를 의미합니다.
+
+예를 들어, `with`를 사용하여 파일을 읽을 수 있습니다:
+
+```Python
+with open("./somefile.txt") as f:
+ contents = f.read()
+ print(contents)
+```
+
+내부적으로 `open("./somefile.txt")` 는 "컨텍스트 관리자(Context Manager)"라고 불리는 객체를 생성합니다.
+
+`with` 블록이 끝나면, 예외가 발생했더라도 파일을 닫도록 보장합니다.
+
+`yield`가 있는 의존성을 생성하면 **FastAPI**는 내부적으로 이를 위한 컨텍스트 매니저를 생성하고 다른 관련 도구들과 결합합니다.
+
+### `yield`를 사용하는 의존성에서 컨텍스트 관리자 사용하기
+
+/// warning | 경고
+
+이것은 어느 정도 "고급" 개념입니다.
+
+**FastAPI**를 처음 시작하는 경우 지금은 이 부분을 건너뛰어도 좋습니다.
+
+///
+
+Python에서는 다음을 통해 컨텍스트 관리자를 생성할 수 있습니다. 두 가지 메서드가 있는 클래스를 생성합니다: `__enter__()` and `__exit__()`.
+
+**FastAPI**의 `yield`가 있는 의존성 내에서
+`with` 또는 `async with`문을 사용하여 이들을 활용할 수 있습니다:
+
+{* ../../docs_src/dependencies/tutorial010.py hl[1:9,13] *}
+
+/// tip | 팁
+
+컨텍스트 관리자를 생성하는 또 다른 방법은 다음과 같습니다:
+
+* `@contextlib.contextmanager` 또는
+* `@contextlib.asynccontextmanager`
+
+이들은 단일 `yield`가 있는 함수를 꾸미는 데 사용합니다.
+
+이것이 **FastAPI**가 `yield`가 있는 의존성을 위해 내부적으로 사용하는 방식입니다.
+
+하지만 FastAPI 의존성에는 이러한 데코레이터를 사용할 필요가 없습니다(그리고 사용해서도 안됩니다).
+
+FastAPI가 내부적으로 이를 처리해 줄 것입니다.
+
+///
From 57a9a64435351717ca5a29304cd7736de755c9b0 Mon Sep 17 00:00:00 2001
From: github-actions
-
+
diff --git a/docs/en/docs/index.md b/docs/en/docs/index.md
index cbe71c87d..4a2777f25 100644
--- a/docs/en/docs/index.md
+++ b/docs/en/docs/index.md
@@ -12,7 +12,7 @@
- >Q&(76%{JeAXxZu1?N2?jA=&IG7tZEV@d)Wb$)wBC~&9UUDzA0Kn4mp<-l)*vk-
zgN4JWjsk2J4hfUx`4JtaG|g5tHcfyu$$N6l{t6)`DDzaU`6`!Dn$(H-|9k!Yf7!gB
aNn)J05mscJEx>;p5Rc`b$`#9)2K^5%?KE=$
literal 0
HcmV?d00001
From 235300c1d2a7d8a011685adc1c9aa2c195c0368f Mon Sep 17 00:00:00 2001
From: github-actions
-
+
From eea196f4a505c2584fafda691f2a0033c4db6622 Mon Sep 17 00:00:00 2001
From: github-actions
+
+## 사용 가능한 응답들
+
+다음은 사용할 수 있는 몇가지 응답들 입니다.
+
+`Response`를 사용하여 다른 어떤 것도 반환 할수 있으며, 직접 하위 클래스를 만들 수도 있습니다.
+
+/// note | 기술 세부사항
+
+`from starlette.responses import HTMLResponse`를 사용할 수도 있습니다.
+
+**FastAPI**는 개발자인 여러분의 편의를 위해 `starlette.responses`를 `fastapi.responses`로 제공 하지만, 대부분의 사용 가능한 응답은 Starlette에서 직접 가져옵니다.
+
+///
+
+### `Response`
+
+기본 `Response` 클래스는 다른 모든 응답 클래스의 부모 클래스 입니다.
+
+이 클래스를 직접 반환할 수 있습니다.
+
+다음 매개변수를 받을 수 있습니다:
+
+* `content` - `str` 또는 `bytes`.
+* `status_code` - HTTP 상태코드를 나타내는 `int`.
+* `headers` - 문자열로 이루어진 `dict`.
+* `media_type` - 미디어 타입을 나타내는 `str` 예: `"text/html"`.
+
+FastAPI (실제로는 Starlette)가 자동으로 `Content-Length` 헤더를 포함시킵니다. 또한 `media_type`에 기반하여 `Content-Type` 헤더를 포함하며, 텍스트 타입의 경우 문자 집합을 추가 합니다.
+
+{* ../../docs_src/response_directly/tutorial002.py hl[1,18] *}
+
+### `HTMLResponse`
+
+텍스트 또는 바이트를 받아 HTML 응답을 반환합니다. 위에서 설명한 내용과 같습니다.
+
+### `PlainTextResponse`
+
+텍스트 또는 바이트를 받아 일반 텍스트 응답을 반환합니다.
+
+{* ../../docs_src/custom_response/tutorial005.py hl[2,7,9] *}
+
+### `JSONResponse`
+
+데이터를 받아 `application/json`으로 인코딩된 응답을 반환합니다.
+
+이는 위에서 설명했듯이 **FastAPI**에서 기본적으로 사용되는 응답 형식입니다.
+
+### `ORJSONResponse`
+
+ `orjson`을 사용하여 빠른 JSON 응답을 제공하는 대안입니다. 위에서 설명한 내용과 같습니다.
+
+/// info | 정보
+
+이를 사용하려면 `orjson`을 설치해야합니다. 예: `pip install orjson`.
+
+///
+
+### `UJSONResponse`
+
+`ujson`을 사용한 또 다른 JSON 응답 형식입니다.
+
+/// info | 정보
+
+이 응답을 사용하려면 `ujson`을 설치해야합니다. 예: 'pip install ujson`.
+
+///
+
+/// warning | 경고
+
+`ujson` 은 일부 예외 경우를 처리하는 데 있어 Python 내장 구현보다 덜 엄격합니다.
+
+///
+
+{* ../../docs_src/custom_response/tutorial001.py hl[2,7] *}
+
+/// tip | 팁
+
+`ORJSONResponse`가 더 빠른 대안일 가능성이 있습니다.
+
+///
+
+### `RedirectResponse`
+
+HTTP 리디렉션 응답을 반환합니다. 기본적으로 상태 코드는 307(임시 리디렉션)으로 설정됩니다.
+
+`RedirectResponse`를 직접 반환할 수 있습니다.
+
+{* ../../docs_src/custom_response/tutorial006.py hl[2,9] *}
+
+---
+
+또는 `response_class` 매개변수에서 사용할 수도 있습니다:
+
+
+{* ../../docs_src/custom_response/tutorial006b.py hl[2,7,9] *}
+
+이 경우, *경로 작업* 함수에서 URL을 직접 반환할 수 있습니다.
+
+이 경우, 사용되는 `status_code`는 `RedirectResponse`의 기본값인 `307` 입니다.
+
+---
+
+`status_code` 매개변수를 `response_class` 매개변수와 함께 사용할 수도 있습니다:
+
+{* ../../docs_src/custom_response/tutorial006c.py hl[2,7,9] *}
+
+### `StreamingResponse`
+
+비동기 제너레이터 또는 일반 제너레이터/이터레이터를 받아 응답 본문을 스트리밍 합니다.
+
+{* ../../docs_src/custom_response/tutorial007.py hl[2,14] *}
+
+#### 파일과 같은 객체를 사용한 `StreamingResponse`
+
+파일과 같은 객체(예: `open()`으로 반환된 객체)가 있는 경우, 해당 파일과 같은 객체를 반복(iterate)하는 제너레이터 함수를 만들 수 있습니다.
+
+이 방식으로, 파일 전체를 메모리에 먼저 읽어들일 필요 없이, 제너레이터 함수를 `StreamingResponse`에 전달하여 반환할 수 있습니다.
+
+이 방식은 클라우드 스토리지, 비디오 처리 등의 다양한 라이브러리와 함께 사용할 수 있습니다.
+
+{* ../../docs_src/custom_response/tutorial008.py hl[2,10:12,14] *}
+
+1. 이것이 제너레이터 함수입니다. `yield` 문을 포함하고 있으므로 "제너레이터 함수"입니다.
+2. `with` 블록을 사용함으로써, 제너레이터 함수가 완료된 후 파일과 같은 객체가 닫히도록 합니다. 즉, 응답 전송이 끝난 후 닫힙니다.
+3. 이 `yield from`은 함수가 `file_like`라는 객체를 반복(iterate)하도록 합니다. 반복된 각 부분은 이 제너레이터 함수(`iterfile`)에서 생성된 것처럼 `yield` 됩니다.
+
+ 이렇게 하면 "생성(generating)" 작업을 내부적으로 다른 무언가에 위임하는 제너레이터 함수가 됩니다.
+
+ 이 방식을 사용하면 `with` 블록 안에서 파일을 열 수 있어, 작업이 완료된 후 파일과 같은 객체가 닫히는 것을 보장할 수 있습니다.
+
+/// tip | 팁
+
+여기서 표준 `open()`을 사용하고 있기 때문에 `async`와 `await`를 지원하지 않습니다. 따라서 경로 작업은 일반 `def`로 선언합니다.
+
+///
+
+### `FileResponse`
+
+파일을 비동기로 스트리밍하여 응답합니다.
+
+다른 응답 유형과는 다른 인수를 사용하여 객체를 생성합니다:
+
+* `path` - 스트리밍할 파일의 경로.
+* `headers` - 딕셔너리 형식의 사용자 정의 헤더.
+* `media_type` - 미디어 타입을 나타내는 문자열. 설정되지 않은 경우 파일 이름이나 경로를 사용하여 추론합니다.
+* `filename` - 설정된 경우 응답의 `Content-Disposition`에 포함됩니다.
+
+파일 응답에는 적절한 `Content-Length`, `Last-Modified`, 및 `ETag` 헤더가 포함됩니다.
+
+{* ../../docs_src/custom_response/tutorial009.py hl[2,10] *}
+
+또한 `response_class` 매개변수를 사용할 수도 있습니다:
+
+{* ../../docs_src/custom_response/tutorial009b.py hl[2,8,10] *}
+
+이 경우, 경로 작업 함수에서 파일 경로를 직접 반환할 수 있습니다.
+
+## 사용자 정의 응답 클래스
+
+`Response`를 상속받아 사용자 정의 응답 클래스를 생성하고 사용할 수 있습니다.
+
+예를 들어, 포함된 `ORJSONResponse` 클래스에서 사용되지 않는 설정으로 orjson을 사용하고 싶다고 가정해봅시다.
+
+만약 들여쓰기 및 포맷된 JSON을 반환하고 싶다면, `orjson.OPT_INDENT_2` 옵션을 사용할 수 있습니다.
+
+`CustomORJSONResponse`를 생성할 수 있습니다. 여기서 핵심은 `Response.render(content)` 메서드를 생성하여 내용을 `bytes`로 반환하는 것입니다:
+
+{* ../../docs_src/custom_response/tutorial009c.py hl[9:14,17] *}
+
+이제 다음 대신:
+
+```json
+{"message": "Hello World"}
+```
+
+이 응답은 이렇게 반환됩니다:
+
+```json
+{
+ "message": "Hello World"
+}
+```
+
+물론 JSON 포맷팅보다 더 유용하게 활용할 방법을 찾을 수 있을 것입니다. 😉
+
+## 기본 응답 클래스
+
+**FastAPI** 클래스 객체 또는 `APIRouter`를 생성할 때 기본적으로 사용할 응답 클래스를 지정할 수 있습니다.
+
+이를 정의하는 매개변수는 `default_response_class`입니다.
+
+아래 예제에서 **FastAPI**는 모든 경로 작업에서 기본적으로 `JSONResponse` 대신 `ORJSONResponse`를 사용합니다.
+
+{* ../../docs_src/custom_response/tutorial010.py hl[2,4] *}
+
+/// tip | 팁
+
+여전히 이전처럼 *경로 작업*에서 `response_class`를 재정의할 수 있습니다.
+
+///
+
+## 추가 문서화
+
+OpenAPI에서 `responses`를 사용하여 미디어 타입 및 기타 세부 정보를 선언할 수도 있습니다: [OpenAPI에서 추가 응답](additional-responses.md){.internal-link target=_blank}.
From d51936754d9ab943181472edadc869c317d8a5b0 Mon Sep 17 00:00:00 2001
From: github-actions
^zGIBe_ZZwc;f`6;;^P`Lg7`po4=0xU|lt?u1)Zk-T2prg{bjZ9_wp{MJ3+!*9NR
zvELAM*@q(82QY1)oHO}oSn<)iy1F`V&q^1XG&6y~Sf$vP;N#=BUS6EdEiWG_1al;G
zuXZt4cE&Ig=<4d0>T!%tOf1CupR+b@!WgPQe?Deco94TVHzhkcJ|4ku)BCliCec{Z
zX}ZCf&AUN4vws$z2Hdc$krCtP&!1^3#zEqzqSn`I8q&W=`o{oAbqa5QhJm~Jh>n4=
z`mY`+#oU}_s!TwAcW=*Sbs)>}>ivfgw5on@<$}Qbn*o=Iq-yXb5rW%iXJ?lJ{(1UE
z>@B$Wh0Iuq)>KhX?0p*V0Th~b#n@<>1&+lv4NNWM%4<+u(>(ZZW)>E7Gcz-of
+
+
diff --git a/docs/en/data/sponsors.yml b/docs/en/data/sponsors.yml
index 91b23937c..b994e533a 100644
--- a/docs/en/data/sponsors.yml
+++ b/docs/en/data/sponsors.yml
@@ -32,6 +32,9 @@ gold:
- url: https://docs.render.com/deploy-fastapi?utm_source=deploydoc&utm_medium=referral&utm_campaign=fastapi
title: Deploy & scale any full-stack web app on Render. Focus on building apps, not infra.
img: https://fastapi.tiangolo.com/img/sponsors/render.svg
+ - url: https://www.coderabbit.ai/?utm_source=fastapi&utm_medium=badge&utm_campaign=fastapi
+ title: Cut Code Review Time & Bugs in Half with CodeRabbit
+ img: https://fastapi.tiangolo.com/img/sponsors/coderabbit.png
silver:
- url: https://github.com/deepset-ai/haystack/
title: Build powerful search from composable, open source building blocks
diff --git a/docs/en/docs/img/sponsors/coderabbit-banner.png b/docs/en/docs/img/sponsors/coderabbit-banner.png
new file mode 100644
index 0000000000000000000000000000000000000000..da3bb348204a39d83203e4580ad213dddce5ac99
GIT binary patch
literal 9522
zcmXY1WmHt(*G2&yN;;(*1Ox$*kP?*cMq)_m4oPVkKz?*1-3`()G?J1-cSv_h{g3Z@
zKQIilX5D)@`|PLo4O3G1goRFqj)a7SB`qbPf`s%$0=#F2JOi)6B>}477n;44wi6Q4
zi>`k^Px|Z%O~8kw&XQWrs&;11Zcs;4BsVuV4hvf=Cu69+DTke-dFr7M84?mTlC*@F
zntR$ox~CU`WYbmq)M9K{7$&3afBij>=y0($G+CbJ%+*u8Ai@{^5L#+TsDHNo2BCqT
zg9BQ)xCt5z!b}b8k48m73n@LZ4||5jhwLs!OG6uo#rU6zM}G6(eU5ob_h+Pv<~^^Q
zN%Qf
M8_yY}AjAm=s#*92GzOet%q9z-2yj9&^XSb)Ni%
zr*>W!{09JQNQ)k+pwq7Ia&C1|(q_i06peFFYPuCi3*hSjDQTg3&>N7I*P{WC>i9aj
zFryf0@8Mu^`{IBFT6BaPLcprV>n&LEk
+
+
+
diff --git a/docs/bn/docs/index.md b/docs/bn/docs/index.md
index 678ac9ca9..74ee230a1 100644
--- a/docs/bn/docs/index.md
+++ b/docs/bn/docs/index.md
@@ -5,15 +5,18 @@
FastAPI উচ্চক্ষমতা সম্পন্ন, সহজে শেখার এবং দ্রুত কোড করে প্রোডাকশনের জন্য ফ্রামওয়ার্ক।
-
+
diff --git a/docs/em/docs/index.md b/docs/em/docs/index.md
index 16b2019d3..57be59b07 100644
--- a/docs/em/docs/index.md
+++ b/docs/em/docs/index.md
@@ -12,7 +12,7 @@
-
+
diff --git a/docs/es/docs/index.md b/docs/es/docs/index.md
index db8da6933..c1da5d633 100644
--- a/docs/es/docs/index.md
+++ b/docs/es/docs/index.md
@@ -12,7 +12,7 @@
-
+
diff --git a/docs/fa/docs/index.md b/docs/fa/docs/index.md
index 6addce763..0aa0bec36 100644
--- a/docs/fa/docs/index.md
+++ b/docs/fa/docs/index.md
@@ -11,11 +11,11 @@
فریمورک FastAPI، کارایی بالا، یادگیری آسان، کدنویسی سریع، آماده برای استفاده در محیط پروداکشن
-
-
+
+
-
-
+
+
diff --git a/docs/fr/docs/index.md b/docs/fr/docs/index.md
index 695429008..d25f7a939 100644
--- a/docs/fr/docs/index.md
+++ b/docs/fr/docs/index.md
@@ -12,7 +12,7 @@
-
+
diff --git a/docs/he/docs/index.md b/docs/he/docs/index.md
index 6498d15e1..bd166f205 100644
--- a/docs/he/docs/index.md
+++ b/docs/he/docs/index.md
@@ -12,10 +12,10 @@
-
+
-
-
+
+
diff --git a/docs/hu/docs/index.md b/docs/hu/docs/index.md
index c6f596650..45ff49c3b 100644
--- a/docs/hu/docs/index.md
+++ b/docs/hu/docs/index.md
@@ -6,7 +6,7 @@
-
+
diff --git a/docs/id/docs/index.md b/docs/id/docs/index.md
index 7fdd1cc7a..5fb0c4c9c 100644
--- a/docs/id/docs/index.md
+++ b/docs/id/docs/index.md
@@ -12,7 +12,7 @@
-
FastAPI framework, alte prestazioni, facile da imparare, rapido da implementare, pronto per il rilascio in produzione
+
diff --git a/docs/it/docs/index.md b/docs/it/docs/index.md
index 8a1039bc5..dc8f5b846 100644
--- a/docs/it/docs/index.md
+++ b/docs/it/docs/index.md
@@ -4,15 +4,19 @@
-
+
diff --git a/docs/pl/docs/index.md b/docs/pl/docs/index.md
index 9a96c6553..0e13d2631 100644
--- a/docs/pl/docs/index.md
+++ b/docs/pl/docs/index.md
@@ -11,15 +11,18 @@
FastAPI to szybki, prosty w nauce i gotowy do użycia w produkcji framework
-
+
diff --git a/docs/ru/docs/index.md b/docs/ru/docs/index.md
index 5ebe1494b..a9546cf1e 100644
--- a/docs/ru/docs/index.md
+++ b/docs/ru/docs/index.md
@@ -12,10 +12,10 @@
-
+
-
-
+
+
diff --git a/docs/tr/docs/index.md b/docs/tr/docs/index.md
index 7ecaf1ba3..f666e2d06 100644
--- a/docs/tr/docs/index.md
+++ b/docs/tr/docs/index.md
@@ -12,7 +12,7 @@
-
+
diff --git a/docs/uk/docs/index.md b/docs/uk/docs/index.md
index 012bac2e2..b573ee259 100644
--- a/docs/uk/docs/index.md
+++ b/docs/uk/docs/index.md
@@ -6,7 +6,7 @@
-
+
diff --git a/docs/vi/docs/index.md b/docs/vi/docs/index.md
index 5e346ded8..5c6b7e8a4 100644
--- a/docs/vi/docs/index.md
+++ b/docs/vi/docs/index.md
@@ -12,7 +12,7 @@
-
+
diff --git a/docs/yo/docs/index.md b/docs/yo/docs/index.md
index 3ad1483de..d6aa78b3d 100644
--- a/docs/yo/docs/index.md
+++ b/docs/yo/docs/index.md
@@ -12,7 +12,7 @@
-
+
diff --git a/docs/zh-hant/docs/index.md b/docs/zh-hant/docs/index.md
index 137a17284..81d99ede4 100644
--- a/docs/zh-hant/docs/index.md
+++ b/docs/zh-hant/docs/index.md
@@ -6,7 +6,7 @@
-
+
diff --git a/docs/zh/docs/index.md b/docs/zh/docs/index.md
index d3e9e3112..94cf8745c 100644
--- a/docs/zh/docs/index.md
+++ b/docs/zh/docs/index.md
@@ -11,11 +11,11 @@
FastAPI 框架,高性能,易于学习,高效编码,生产可用
-
- ;EpM!sQgcR-x#s<{oaw|_+O02MyQL6+%9wOE_6MDmv1NI
zc7SvO6V3S?=f~Td?Pf}s4HTYx3)*&-4eyYsycqayBz|wywypc2Wn(V7fEDQf=~TgA
z_xlv#ectQijNL|qC20}3?6_5)XcIy^OUSn$P5A`?6nNV
+
+
-
-
+
+
From 4516a48c7cd068897ee45c715a5d2aacd692b4e8 Mon Sep 17 00:00:00 2001
From: github-actions
POST
.
+
+///
+
+/// warning | Увага
+
+Ви можете оголосити кілька параметрів `File` і `Form` в *операції шляху*, але Ви не можете одночасно оголошувати поля `Body`, які мають надходити у форматі JSON, оскільки тіло запиту буде закодоване у форматі `multipart/form-data`, а не `application/json`.
+
+Це не обмеження **FastAPI**, а особливість протоколу HTTP.
+
+///
+
+## Опціональне Завантаження Файлів
+
+Файл можна зробити необов’язковим, використовуючи стандартні анотації типів і встановлюючи значення за замовчуванням `None`:
+
+{* ../../docs_src/request_files/tutorial001_02_an_py310.py hl[9,17] *}
+
+## `UploadFile` із Додатковими Мета Даними
+
+Ви також можете використовувати `File()` разом із `UploadFile`, наприклад, для встановлення додаткових метаданих:
+
+{* ../../docs_src/request_files/tutorial001_03_an_py39.py hl[9,15] *}
+
+## Завантаження Кількох Файлів
+
+Можна завантажувати кілька файлів одночасно.
+
+Вони будуть пов’язані з одним і тим самим "form field", який передається у вигляді "form data".
+
+Щоб це реалізувати, потрібно оголосити список `bytes` або `UploadFile`:
+
+{* ../../docs_src/request_files/tutorial002_an_py39.py hl[10,15] *}
+
+Ви отримаєте, як і було оголошено, `list` із `bytes` або `UploadFile`.
+
+/// note | Технічні деталі
+
+Ви також можете використати `from starlette.responses import HTMLResponse`.
+
+**FastAPI** надає ті ж самі `starlette.responses`, що й `fastapi.responses`, для зручності розробників. Однак більшість доступних відповідей надходять безпосередньо від Starlette.
+
+///
+
+### Завантаження декількох файлів із додатковими метаданими
+
+Так само як і раніше, Ви можете використовувати `File()`, щоб встановити додаткові параметри навіть для `UploadFile`:
+
+{* ../../docs_src/request_files/tutorial003_an_py39.py hl[11,18:20] *}
+
+## Підсумок
+
+Використовуйте `File`, `bytes`та `UploadFile`, щоб оголошувати файли для завантаження у запитах, які надсилаються у вигляді form data.
From b1102e2388e36d0b4a3c75c2d5a89656c3e55970 Mon Sep 17 00:00:00 2001
From: github-actions Stidywo2ZqNm$pT{D8
z{Xu@i`&PH>WyJsKAhUWm%V}arQ=PgWnPY84f^^^YSw#u^Tpk0b2q!sNeU2MO3tfm?
zJu^}gXWGT7X|Or@{j8o5K%FRFm+JvQ59#J+)b1?77M_axV1TgNWUb}8QoA{Tv72b}
zZ^Y(wg*xiZEej|dm_LWpD!1D|umTJo`H`-S`xvma?Olc4xtXpWvEof^0-lZZ_*IiG2?d^=I|`
z9Rb6FXr-tY8Z>~7K~MZjOfaqaI-ur{1DCIO+@M6ti<+d62QfvJHseAZD7ejqK~D*e
zVG`r2ESTpDsdl6fD<HAGx5m
M8_yY}AjAm=s#*92GzOet%q9z-2yj9&^XSb)Ni%
zr*>W!{09JQNQ)k+pwq7Ia&C1|(q_i06peFFYPuCi3*hSjDQTg3&>N7I*P{WC>i9aj
zFryf0@8Mu^`{IBFT6BaPLcprV>n&LEk
Date: Fri, 28 Feb 2025 09:07:47 -0500
Subject: [PATCH 060/138] =?UTF-8?q?=E2=AC=86=EF=B8=8F=20Bump=20Starlette?=
=?UTF-8?q?=20to=20allow=20up=20to=200.46.0:=20`>=3D0.40.0,<0.47.0`=20(#13?=
=?UTF-8?q?426)?=
MIME-Version: 1.0
Content-Type: text/plain; charset=UTF-8
Content-Transfer-Encoding: 8bit
Co-authored-by: Sofie Van Landeghem
POST
.
+
+///
+
+/// warning | Попередження
+
+Ви можете оголосити кілька параметрів `Form` в *операції шляху*, але не можете одночасно оголосити поля `Body`, які Ви очікуєте отримати у форматі JSON, оскільки тіло запиту буде закодовано у форматі `application/x-www-form-urlencoded`, а не `application/json`.
+
+Це не обмеження **FastAPI**, а частина HTTP-протоколу.
+
+///
+
+## Підсумок
+
+Використовуйте `Form` для оголошення вхідних параметрів у вигляді даних форми.
From eb7cd4f6939f350c8ec9bb22e4dc62229a645c26 Mon Sep 17 00:00:00 2001
From: github-actions