@@ -369,7 +369,7 @@ $ pip install -r requirements.txt
//// tab | `uv`
-ãã
ã䜿çšã§ãããªã:
+ãã [`uv`](https://github.com/astral-sh/uv) ã䜿çšã§ãããªã:
ããããŠã³ããŒããããŸãã
+FastAPIã®ã³ãŒããå«ãå§çž®ãã¡ã€ã«ããé垞㯠[PyPI](https://pypi.org/project/fastapi/) ããããŠã³ããŒããããŸãã
ãŸããFastAPIãäŸåããä»ã®ããã±ãŒãžã**ããŠã³ããŒã**ãããŸãã
@@ -624,7 +624,7 @@ $ .venv\Scripts\Activate.ps1
//// tab | Windows Bash
-ãããã¯ãWindowsã§Bashã䜿çšããŠããå Žå (
ãªã©):
+ãããã¯ãWindowsã§Bashã䜿çšããŠããå Žå ([Git Bash](https://gitforwindows.org/)ãªã©):
@@ -636,13 +636,13 @@ $ source .venv/Scripts/activate
////
-ããã«ãã£ãŠãããã€ãã® [ç°å¢å€æ°](environment-variables.md){.internal-link target=_blank} ãäœæã»ä¿®æ£ãããæ¬¡ã«å®è¡ãããã³ãã³ãã§äœ¿çšã§ããããã«ãªããŸãã
+ããã«ãã£ãŠãããã€ãã® [ç°å¢å€æ°](environment-variables.md) ãäœæã»ä¿®æ£ãããæ¬¡ã«å®è¡ãããã³ãã³ãã§äœ¿çšã§ããããã«ãªããŸãã
ãããã®ç°å¢å€æ°ã®ã²ãšã€ã«ã `PATH` 倿°ããããŸãã
/// tip | è±ç¥è
-`PATH` 倿°ã«ã€ããŠã®è©³çŽ°ã¯ [ç°å¢å€æ°](environment-variables.md#path-environment-variable){.internal-link target=_blank} ãåç
§ããŠãã ããã
+`PATH` 倿°ã«ã€ããŠã®è©³çŽ°ã¯ [ç°å¢å€æ°](environment-variables.md#path-environment-variable) ãåç
§ããŠãã ããã
///
@@ -835,7 +835,7 @@ I solemnly swear ðº
ä»®æ³ç°å¢ãããã±ãŒãžã®äŸåé¢ä¿ïŒrequirementsïŒããããžã§ã¯ãã®ç®¡çã«ã¯ãå€ãã®**ä»£æ¿ææ®µ**ããããŸãã
-æºåãæŽããããã±ãŒãžã®äŸåé¢ä¿ãä»®æ³ç°å¢ãªã©**ãããžã§ã¯ãå
šäœã®ç®¡ç**ããŒã«ã䜿ããããšèãããã
uv ã詊ããŠã¿ãããšãããããããŸãã
+æºåãæŽããããã±ãŒãžã®äŸåé¢ä¿ãä»®æ³ç°å¢ãªã©**ãããžã§ã¯ãå
šäœã®ç®¡ç**ããŒã«ã䜿ããããšèãããã[uv](https://github.com/astral-sh/uv) ã詊ããŠã¿ãããšãããããããŸãã
`uv` ã§ã¯ä»¥äžã®ãããªå€ãã®ããšãã§ããŸãïŒ
diff --git a/docs/ko/docs/_llm-test.md b/docs/ko/docs/_llm-test.md
index 92bfb83f62..8b7b275c0a 100644
--- a/docs/ko/docs/_llm-test.md
+++ b/docs/ko/docs/_llm-test.md
@@ -11,7 +11,7 @@
* ë²ììì 묞ì ê° ìëì§ íìží©ëë€.
* íìíë€ë©Ž ìžìŽë³ í롬ííž, ìŒë° í롬ííž, ëë ììŽ ë¬žì륌 ê°ì í©ëë€.
* ê·žë° ë€ì ë²ììì ëšì ìë 묞ì 륌 ìëìŒë¡ ìì íŽ ì¢ì ë²ììŽ ëê² í©ëë€.
-* ì¢ì ë²ìì ë ìíìì ë€ì ë²ìí©ëë€. ìŽìì ìž ê²°ê³Œë LLMìŽ ë ìŽì ë²ìì ë³ê²œì ë§ë€ì§ ìë ê²ì
ëë€. ìŽë ìŒë° í롬íížì ìžìŽë³ í롬íížê° ê°ë¥í í ìµì ìŽëŒë ë»ì
ëë€(ëëë¡ ëª ê°ì§ seemingly random ë³ê²œì í ì ìëë°, ê·ž ìŽì ë
LLMì ê²°ì ë¡ ì ìê³ ëŠ¬ìŠìŽ ìëêž° ë묞ì
ëë€).
+* ì¢ì ë²ìì ë ìíìì ë€ì ë²ìí©ëë€. ìŽìì ìž ê²°ê³Œë LLMìŽ ë ìŽì ë²ìì ë³ê²œì ë§ë€ì§ ìë ê²ì
ëë€. ìŽë ìŒë° í롬íížì ìžìŽë³ í롬íížê° ê°ë¥í í ìµì ìŽëŒë ë»ì
ëë€(ëëë¡ ëª ê°ì§ seemingly random ë³ê²œì í ì ìëë°, ê·ž ìŽì ë [LLMì ê²°ì ë¡ ì ìê³ ëŠ¬ìŠìŽ ìëêž° ë묞](https://doublespeak.chat/#/handbook#deterministic-output)ì
ëë€).
í
ì€íž:
@@ -169,15 +169,15 @@ works(foo="bar") # ìŽê±Ž ëìí©ëë€ ð
ë§í¬ í
ì€ížë ë²ìëìŽìŒ íê³ , ë§í¬ 죌ìë ë³ê²œëì§ ìììŒ í©ëë€:
* [ìì ì 목ìŒë¡ ê°ë ë§í¬](#code-snippets)
-* [ëŽë¶ ë§í¬](index.md#installation){.internal-link target=_blank}
-*
ìžë¶ ë§í¬
-*
ì€íìŒë¡ ê°ë ë§í¬
-*
ì€í¬ëŠœížë¡ ê°ë ë§í¬
-*
ìŽë¯žì§ë¡ ê°ë ë§í¬
+* [ëŽë¶ ë§í¬](index.md#installation)
+* [ìžë¶ ë§í¬](https://sqlmodel.tiangolo.com/)
+* [ì€íìŒë¡ ê°ë ë§í¬](https://fastapi.tiangolo.com/css/styles.css)
+* [ì€í¬ëŠœížë¡ ê°ë ë§í¬](https://fastapi.tiangolo.com/js/logic.js)
+* [ìŽë¯žì§ë¡ ê°ë ë§í¬](https://fastapi.tiangolo.com/img/foo.jpg)
ë§í¬ í
ì€ížë ë²ìëìŽìŒ íê³ , ë§í¬ 죌ìë ë²ì íìŽì§ë¥Œ ê°ëЬìŒìŒ í©ëë€:
-*
FastAPI ë§í¬
+* [FastAPI ë§í¬](https://fastapi.tiangolo.com/ko/)
////
@@ -259,8 +259,8 @@ works(foo="bar") # ìŽê±Ž ëìí©ëë€ ð
* ì¬ë¬ë¶
* ì¬ë¬ë¶ì
-* ì: (e.g.)
-* ë± (etc.)
+* ì:
+* ë±
* `foo`ë¡ìì `int`
* `bar`ë¡ìì `str`
diff --git a/docs/ko/docs/advanced/additional-responses.md b/docs/ko/docs/advanced/additional-responses.md
index 2ed6bc3fcf..e43d7c727f 100644
--- a/docs/ko/docs/advanced/additional-responses.md
+++ b/docs/ko/docs/advanced/additional-responses.md
@@ -243,5 +243,5 @@ new_dict = {**old_dict, "new key": "new value"}
ìëµì ì íí 묎ìì í¬íší ì ìëì§ ë³Žë €ë©Ž, OpenAPI ì¬ìì ë€ì ì¹ì
ì íìžíìžì:
-*
OpenAPI Responses Object: `Response Object`륌 í¬íší©ëë€.
-*
OpenAPI Response Object: `responses` íëŒë¯ží° ìì ê° ìëµì ìŽê²ì ìŽë€ í목ìŽë ì§ì í¬íší ì ììµëë€. `description`, `headers`, `content`(ì¬êž°ìì ìë¡ ë€ë¥ž 믞ëìŽ íì
곌 JSON Schema륌 ì ìží©ëë€), `links` ë±ì í¬íší ì ììµëë€.
+* [OpenAPI Responses Object](https://github.com/OAI/OpenAPI-Specification/blob/master/versions/3.1.0.md#responses-object): `Response Object`륌 í¬íší©ëë€.
+* [OpenAPI Response Object](https://github.com/OAI/OpenAPI-Specification/blob/master/versions/3.1.0.md#response-object): `responses` íëŒë¯ží° ìì ê° ìëµì ìŽê²ì ìŽë€ í목ìŽë ì§ì í¬íší ì ììµëë€. `description`, `headers`, `content`(ì¬êž°ìì ìë¡ ë€ë¥ž 믞ëìŽ íì
곌 JSON Schema륌 ì ìží©ëë€), `links` ë±ì í¬íší ì ììµëë€.
diff --git a/docs/ko/docs/advanced/additional-status-codes.md b/docs/ko/docs/advanced/additional-status-codes.md
index e3c898044e..6251b68b23 100644
--- a/docs/ko/docs/advanced/additional-status-codes.md
+++ b/docs/ko/docs/advanced/additional-status-codes.md
@@ -38,4 +38,4 @@
ì¶ê° ìí ìœëì ìëµì ì§ì ë°ííë 겜ì°, FastAPIë ë°íí ëŽì©ì 믞늬 ì ì ìë ë°©ë²ìŽ ìêž° ë묞ì OpenAPI ì€í€ë§(API 묞ì)ì í¬íšëì§ ììµëë€.
-íì§ë§ ë€ìì ì¬ì©íì¬ ìœëì ìŽë¥Œ 묞ìíí ì ììµëë€: [ì¶ê° ìëµ](additional-responses.md){.internal-link target=_blank}.
+íì§ë§ ë€ìì ì¬ì©íì¬ ìœëì ìŽë¥Œ 묞ìíí ì ììµëë€: [ì¶ê° ìëµ](additional-responses.md).
diff --git a/docs/ko/docs/advanced/advanced-dependencies.md b/docs/ko/docs/advanced/advanced-dependencies.md
index eb5d35d957..2755986a21 100644
--- a/docs/ko/docs/advanced/advanced-dependencies.md
+++ b/docs/ko/docs/advanced/advanced-dependencies.md
@@ -133,7 +133,7 @@ SQLModel(ëë SQLAlchemy)ì ì¬ì©í멎ì ìŽë° í¹ì ì¬ì© ì¬ë¡ê°
ê·žë¬ë©Ž ìžì
ìŽ ë°ìŽí°ë² ìŽì€ ì°ê²°ì íŽì íì¬, ë€ë¥ž ìì²ë€ìŽ ìŽë¥Œ ì¬ì©í ì ìê² ë©ëë€.
-`yield`ê° ìë ì졎ì±ìì ì¡°êž° ì¢
ë£ê° íìí ë€ë¥ž ì¬ì© ì¬ë¡ê° ìë€ë©Ž, ì¬ë¬ë¶ì 구첎ì ìž ì¬ì© ì¬ë¡ì `yield`ê° ìë ì졎ì±ì ëí ì¡°êž° ì¢
ë£ê° ìŽë€ ì ìì ìŽëìŽ ëëì§ë¥Œ í¬íšíŽ
GitHub Discussions ì§ë¬žì ìì±íŽ ì£Œìžì.
+`yield`ê° ìë ì졎ì±ìì ì¡°êž° ì¢
ë£ê° íìí ë€ë¥ž ì¬ì© ì¬ë¡ê° ìë€ë©Ž, ì¬ë¬ë¶ì 구첎ì ìž ì¬ì© ì¬ë¡ì `yield`ê° ìë ì졎ì±ì ëí ì¡°êž° ì¢
ë£ê° ìŽë€ ì ìì ìŽëìŽ ëëì§ë¥Œ í¬íšíŽ [GitHub Discussions ì§ë¬ž](https://github.com/fastapi/fastapi/discussions/new?category=questions)ì ìì±íŽ ì£Œìžì.
`yield`ê° ìë ì졎ì±ìì ì¡°êž° ì¢
ë£ì ëí ì€ëë ¥ ìë ì¬ì© ì¬ë¡ê° ìë€ë©Ž, ì¡°êž° ì¢
ë£ë¥Œ ì íì ìŒë¡ íì±íí ì ìë ìë¡ìŽ ë°©ë²ì ì¶ê°íë ê²ì ê³ ë €íê² ìµëë€.
@@ -145,7 +145,7 @@ FastAPI 0.110.0 ìŽì ìë `yield`ê° ìë ì졎ì±ì ì¬ì©í ë€ì ê·ž
### 백귞ëŒìŽë íì€í¬ì `yield`ê° ìë ì졎ì±, êž°ì ìžë¶ì¬í { #background-tasks-and-dependencies-with-yield-technical-details }
-FastAPI 0.106.0 ìŽì ìë `yield` ìŽíì ììžë¥Œ ë°ììí€ë ê²ìŽ ë¶ê°ë¥íìµëë€. `yield`ê° ìë ì졎ì±ì ì¢
ë£ ìœëë ìëµìŽ ì ì¡ë *íì* ì€íëìêž° ë묞ì, [ììž ížë€ë¬](../tutorial/handling-errors.md#install-custom-exception-handlers){.internal-link target=_blank}ê° ìŽë¯ž ì€íë ë€ììµëë€.
+FastAPI 0.106.0 ìŽì ìë `yield` ìŽíì ììžë¥Œ ë°ììí€ë ê²ìŽ ë¶ê°ë¥íìµëë€. `yield`ê° ìë ì졎ì±ì ì¢
ë£ ìœëë ìëµìŽ ì ì¡ë *íì* ì€íëìêž° ë묞ì, [ììž ížë€ë¬](../tutorial/handling-errors.md#install-custom-exception-handlers)ê° ìŽë¯ž ì€íë ë€ììµëë€.
ìŽë ì£Œë¡ ë°±ê·žëŒìŽë íì€í¬ ììì ì졎ì±ìŽ "yield"í ëìŒí ê°ì²Žë€ì ì¬ì©í ì ìê² íêž° ìí ì€ê³ììµëë€. 백귞ëŒìŽë íì€í¬ê° ëë ë€ì ì¢
ë£ ìœëê° ì€íëìêž° ë묞ì
ëë€.
diff --git a/docs/ko/docs/advanced/async-tests.md b/docs/ko/docs/advanced/async-tests.md
index 0479ac41d1..b477c6c715 100644
--- a/docs/ko/docs/advanced/async-tests.md
+++ b/docs/ko/docs/advanced/async-tests.md
@@ -16,11 +16,11 @@
`TestClient`ë íì€ pytest륌 ì¬ì©íì¬, ìŒë° `def` í
ì€íž íšì ììì ë¹ëêž° FastAPI ì í늬ìŒìŽì
ì ížì¶íëë¡ ëŽë¶ìì ë§ë² ê°ì ì²ëŠ¬ë¥Œ í©ëë€. íì§ë§ ë¹ëêž° íšì ììì ìŽë¥Œ ì¬ì©í멎 ê·ž ë§ë²ì ë ìŽì ëìíì§ ììµëë€. í
ì€ížë¥Œ ë¹ëêž°ë¡ ì€íí멎, í
ì€íž íšì ììì `TestClient`륌 ë ìŽì ì¬ì©í ì ììµëë€.
-`TestClient`ë
HTTPX륌 êž°ë°ìŒë¡ íë©°, ë€íí HTTPX륌 ì§ì ì¬ì©íŽ API륌 í
ì€íží ì ììµëë€.
+`TestClient`ë [HTTPX](https://www.python-httpx.org)륌 êž°ë°ìŒë¡ íë©°, ë€íí HTTPX륌 ì§ì ì¬ì©íŽ API륌 í
ì€íží ì ììµëë€.
## ìì { #example }
-ê°ëší ììë¡, [ë í° ì í늬ìŒìŽì
](../tutorial/bigger-applications.md){.internal-link target=_blank}곌 [í
ì€íž](../tutorial/testing.md){.internal-link target=_blank}ìì ì€ëª
í ê²ê³Œ ë¹ì·í íìŒ êµ¬ì¡°ë¥Œ ìŽíŽë³Žê² ìµëë€:
+ê°ëší ììë¡, [ë í° ì í늬ìŒìŽì
](../tutorial/bigger-applications.md)곌 [í
ì€íž](../tutorial/testing.md)ìì ì€ëª
í ê²ê³Œ ë¹ì·í íìŒ êµ¬ì¡°ë¥Œ ìŽíŽë³Žê² ìµëë€:
```
.
@@ -84,7 +84,7 @@ response = client.get('/')
/// warning | 겜ê³
-ì í늬ìŒìŽì
ìŽ lifespan ìŽë²€ížì ì졎íë€ë©Ž, `AsyncClient`ë ìŽë¬í ìŽë²€ížë¥Œ ížëŠ¬ê±°íì§ ììµëë€. ìŽë²€ížê° ížëŠ¬ê±°ëëë¡ íë €ë©Ž
florimondmanca/asgi-lifespanì `LifespanManager`륌 ì¬ì©íìžì.
+ì í늬ìŒìŽì
ìŽ lifespan ìŽë²€ížì ì졎íë€ë©Ž, `AsyncClient`ë ìŽë¬í ìŽë²€ížë¥Œ ížëŠ¬ê±°íì§ ììµëë€. ìŽë²€ížê° ížëŠ¬ê±°ëëë¡ íë €ë©Ž [florimondmanca/asgi-lifespan](https://github.com/florimondmanca/asgi-lifespan#usage)ì `LifespanManager`륌 ì¬ì©íìžì.
///
@@ -94,6 +94,6 @@ response = client.get('/')
/// tip | í
-í
ì€ížì ë¹ëêž° íšì ížì¶ì íµí©í ë(ì:
MongoDBì MotorClient륌 ì¬ì©í ë) `RuntimeError: Task attached to a different loop`륌 ë§ì£Œì¹ë€ë©Ž, ìŽë²€íž 룚íê° íìí ê°ì²Žë async íšì ìììë§ ìžì€íŽì€ííŽìŒ íë€ë ì ì êž°ìµíìžì. ì륌 ë€ìŽ `@app.on_event("startup")` ìœë°±ìì ìžì€íŽì€íí ì ììµëë€.
+í
ì€ížì ë¹ëêž° íšì ížì¶ì íµí©í ë(ì: [MongoDBì MotorClient](https://stackoverflow.com/questions/41584243/runtimeerror-task-attached-to-a-different-loop)륌 ì¬ì©í ë) `RuntimeError: Task attached to a different loop`륌 ë§ì£Œì¹ë€ë©Ž, ìŽë²€íž 룚íê° íìí ê°ì²Žë async íšì ìììë§ ìžì€íŽì€ííŽìŒ íë€ë ì ì êž°ìµíìžì. ì륌 ë€ìŽ `@app.on_event("startup")` ìœë°±ìì ìžì€íŽì€íí ì ììµëë€.
///
diff --git a/docs/ko/docs/advanced/behind-a-proxy.md b/docs/ko/docs/advanced/behind-a-proxy.md
index 825592c060..d5f42dd374 100644
--- a/docs/ko/docs/advanced/behind-a-proxy.md
+++ b/docs/ko/docs/advanced/behind-a-proxy.md
@@ -16,9 +16,9 @@
íë¡ì í€ëë ë€ì곌 ê°ìµëë€:
-*
X-Forwarded-For
-*
X-Forwarded-Proto
-*
X-Forwarded-Host
+* [X-Forwarded-For](https://developer.mozilla.org/en-US/docs/Web/HTTP/Reference/Headers/X-Forwarded-For)
+* [X-Forwarded-Proto](https://developer.mozilla.org/en-US/docs/Web/HTTP/Reference/Headers/X-Forwarded-Proto)
+* [X-Forwarded-Host](https://developer.mozilla.org/en-US/docs/Web/HTTP/Reference/Headers/X-Forwarded-Host)
///
@@ -60,7 +60,7 @@ https://mysuperapp.com/items/
/// tip | í
-HTTPSì ëíŽ ë ììë³Žë €ë©Ž ê°ìŽë [HTTPSì ëíì¬](../deployment/https.md){.internal-link target=_blank}륌 íìžíìžì.
+HTTPSì ëíŽ ë ììë³Žë €ë©Ž ê°ìŽë [HTTPSì ëíì¬](../deployment/https.md)륌 íìžíìžì.
///
@@ -149,14 +149,14 @@ IP `0.0.0.0`ì ë³Žíµ íŽë¹ ëšžì /ìë²ìì ì¬ì© ê°ë¥í 몚ë IPì
```JSON hl_lines="4-8"
{
"openapi": "3.1.0",
- // More stuff here
+ // ì¬êž°ì ë€ë¥ž ëŽì©ìŽ ë ììµëë€
"servers": [
{
"url": "/api/v1"
}
],
"paths": {
- // More stuff here
+ // ì¬êž°ì ë€ë¥ž ëŽì©ìŽ ë ììµëë€
}
}
```
@@ -228,7 +228,7 @@ $ fastapi run main.py --forwarded-allow-ips="*" --root-path /api/v1
ìë²(Uvicorn)ë ê·ž `root_path`륌 ì±ì ì ë¬íë ê² ìžìë ë€ë¥ž ì©ëë¡ ì¬ì©íì§ ìëë€ë ì ì êž°ìµíìžì.
-íì§ë§ ëžëŒì°ì ë¡
http://127.0.0.1:8000/appì ì ìí멎 ì ì ìëµì 볌 ì ììµëë€:
+íì§ë§ ëžëŒì°ì ë¡ [http://127.0.0.1:8000/app](http://127.0.0.1:8000/app)ì ì ìí멎 ì ì ìëµì 볌 ì ììµëë€:
```JSON
{
@@ -251,9 +251,9 @@ Uvicornì íë¡ìê° `http://127.0.0.1:8000/app`ìì Uvicornì ì ê·Œí
## TraefikìŒë¡ ë¡ì»¬ í
ì€ížíêž° { #testing-locally-with-traefik }
-
Traefikì ì¬ì©í멎, ê²œë¡ ì ëì¬ê° ì ê±°ëë 구ì±ì ë¡ì»¬ìì ìœê² ì€íí ì ììµëë€.
+[Traefik](https://docs.traefik.io/)ì ì¬ì©í멎, ê²œë¡ ì ëì¬ê° ì ê±°ëë 구ì±ì ë¡ì»¬ìì ìœê² ì€íí ì ììµëë€.
-
Traefik ë€ìŽë¡ëë ëšìŒ ë°ìŽë늬ìŽë©°, ìì¶ íìŒì íê³ í°ë¯žëìì ë°ë¡ ì€íí ì ììµëë€.
+[Traefik ë€ìŽë¡ë](https://github.com/containous/traefik/releases)ë ëšìŒ ë°ìŽë늬ìŽë©°, ìì¶ íìŒì íê³ í°ë¯žëìì ë°ë¡ ì€íí ì ììµëë€.
ê·ž ë€ì ë€ì ëŽì©ì ê°ì§ `traefik.toml` íìŒì ìì±íìžì:
@@ -330,7 +330,7 @@ $ fastapi run main.py --forwarded-allow-ips="*" --root-path /api/v1
### ìëµ íìžíêž° { #check-the-responses }
-ìŽì Uvicornì í¬ížë¡ ë URLìž
http://127.0.0.1:8000/appë¡ ì ìí멎 ì ì ìëµì 볌 ì ììµëë€:
+ìŽì Uvicornì í¬ížë¡ ë URLìž [http://127.0.0.1:8000/app](http://127.0.0.1:8000/app)ë¡ ì ìí멎 ì ì ìëµì 볌 ì ììµëë€:
```JSON
{
@@ -345,7 +345,7 @@ $ fastapi run main.py --forwarded-allow-ips="*" --root-path /api/v1
///
-ìŽì Traefikì í¬ížê° í¬íšëê³ ê²œë¡ ì ëì¬ê° í¬íšë URL
http://127.0.0.1:9999/api/v1/appì ì¬ìžì.
+ìŽì Traefikì í¬ížê° í¬íšëê³ ê²œë¡ ì ëì¬ê° í¬íšë URL [http://127.0.0.1:9999/api/v1/app](http://127.0.0.1:9999/api/v1/app)ì ì¬ìžì.
ëìŒí ìëµì ì»ìµëë€:
@@ -370,13 +370,13 @@ $ fastapi run main.py --forwarded-allow-ips="*" --root-path /api/v1
ì±ì ì ê·Œíë "ê³µì" ë°©ë²ì ì°ëŠ¬ê° ì ìí ê²œë¡ ì ëì¬ë¥Œ ê°ì§ íë¡ì륌 íµíŽìì
ëë€. ë°ëŒì êž°ëíë ëë¡, URLì ê²œë¡ ì ëì¬ê° ìë ìíìì UvicornìŽ ì§ì ì ê³µíë docs UI륌 ìëí멎, íë¡ì륌 íµíŽ ì ê·Œëë€ê³ ê°ì íê³ ìêž° ë묞ì ëìíì§ ììµëë€.
-
http://127.0.0.1:8000/docsìì íìží ì ììµëë€:
+[http://127.0.0.1:8000/docs](http://127.0.0.1:8000/docs)ìì íìží ì ììµëë€:

íì§ë§ íë¡ì(í¬íž `9999`)륌 ì¬ì©íŽ "ê³µì" URLìž `/api/v1/docs`ìì docs UIì ì ê·Œí멎, ì¬ë°ë¥Žê² ëìí©ëë€! ð
-
http://127.0.0.1:9999/api/v1/docsìì íìží ì ììµëë€:
+[http://127.0.0.1:9999/api/v1/docs](http://127.0.0.1:9999/api/v1/docs)ìì íìží ì ììµëë€:

@@ -407,7 +407,7 @@ $ fastapi run main.py --forwarded-allow-ips="*" --root-path /api/v1
```JSON hl_lines="5-7"
{
"openapi": "3.1.0",
- // More stuff here
+ // ì¬êž°ì ë€ë¥ž ëŽì©ìŽ ë ììµëë€
"servers": [
{
"url": "/api/v1"
@@ -422,7 +422,7 @@ $ fastapi run main.py --forwarded-allow-ips="*" --root-path /api/v1
}
],
"paths": {
- // More stuff here
+ // ì¬êž°ì ë€ë¥ž ëŽì©ìŽ ë ììµëë€
}
}
```
@@ -433,7 +433,7 @@ $ fastapi run main.py --forwarded-allow-ips="*" --root-path /api/v1
///
-
http://127.0.0.1:9999/api/v1/docsì docs UIììë ë€ìì²ëŒ 볎ì
ëë€:
+[http://127.0.0.1:9999/api/v1/docs](http://127.0.0.1:9999/api/v1/docs)ì docs UIììë ë€ìì²ëŒ 볎ì
ëë€:

@@ -461,6 +461,6 @@ OpenAPI ì¬ììì `servers` ìì±ì ì í ì¬íì
ëë€.
## ìëž ì í늬ìŒìŽì
ë§ìŽížíêž° { #mounting-a-sub-application }
-íë¡ììì `root_path`륌 ì¬ì©í멎ìë, [ìëž ì í늬ìŒìŽì
- ë§ìŽíž](sub-applications.md){.internal-link target=_blank}ì ì€ëª
ë ê²ì²ëŒ ìëž ì í늬ìŒìŽì
ì ë§ìŽížíŽìŒ íë€ë©Ž, êž°ëíë ëë¡ ìŒë°ì ìŒë¡ ìíí ì ììµëë€.
+íë¡ììì `root_path`륌 ì¬ì©í멎ìë, [ìëž ì í늬ìŒìŽì
- ë§ìŽíž](sub-applications.md)ì ì€ëª
ë ê²ì²ëŒ ìëž ì í늬ìŒìŽì
ì ë§ìŽížíŽìŒ íë€ë©Ž, êž°ëíë ëë¡ ìŒë°ì ìŒë¡ ìíí ì ììµëë€.
FastAPIê° ëŽë¶ì ìŒë¡ `root_path`륌 ëëíê² ì¬ì©íë¯ë¡, ê·žë¥ ëìí©ëë€. âš
diff --git a/docs/ko/docs/advanced/custom-response.md b/docs/ko/docs/advanced/custom-response.md
index 6d54eaf2b1..e85ec3c743 100644
--- a/docs/ko/docs/advanced/custom-response.md
+++ b/docs/ko/docs/advanced/custom-response.md
@@ -1,16 +1,14 @@
# ì¬ì©ì ì ì ìëµ - HTML, Stream, íìŒ, êž°í { #custom-response-html-stream-file-others }
-Ʞ볞ì ìŒë¡, **FastAPI** ìëµì `JSONResponse`륌 ì¬ì©íì¬ ë°íí©ëë€.
+Ʞ볞ì ìŒë¡ **FastAPI**ë JSON ìëµì ë°íí©ëë€.
-ìŽë¥Œ ì¬ì ì íë €ë©Ž [ìëµì ì§ì ë°ííêž°](response-directly.md){.internal-link target=_blank}ìì 볞 ê²ì²ëŒ `Response`륌 ì§ì ë°íí멎 ë©ëë€.
+[ìëµì ì§ì ë°ííêž°](response-directly.md)ìì 볞 ê²ì²ëŒ `Response`륌 ì§ì ë°ííì¬ ìŽë¥Œ ì¬ì ìí ì ììµëë€.
-ê·žë¬ë `Response` (ëë `JSONResponse`ì ê°ì íì íŽëì€)륌 ì§ì ë°íí멎, ë°ìŽí°ê° ìëìŒë¡ ë³íëì§ ììŒë©° (ì¬ì§ìŽ `response_model`ì ì ìžíëëŒë), 묞ìíê° ìëìŒë¡ ìì±ëì§ ììµëë€(ì륌 ë€ìŽ, ìì±ë OpenAPIì ìŒë¶ë¡ HTTP í€ë `Content-Type`ì í¹ì "믞ëìŽ íì
"ì í¬íšíë 겜ì°).
+ê·žë¬ë `Response`륌 ì§ì ë°íí멎(ëë `JSONResponse`ì ê°ì íì íŽëì€ë¥Œ ë°íí멎) ë°ìŽí°ê° ìëìŒë¡ ë³íëì§ ììŒë©°(ë¹ë¡ `response_model`ì ì ìžíë€ íëëŒë), 묞ìë ìëìŒë¡ ìì±ëì§ ììµëë€(ì륌 ë€ìŽ, ìì±ë OpenAPIì ìŒë¶ë¡ HTTP í€ë `Content-Type`ì í¹ì "믞ëìŽ íì
"ì í¬íšíë ê² ë±).
-íì§ë§ *ê²œë¡ ì²ëЬ ë°ìœë ìŽí°*ìì `response_class` ë§€ê°ë³ì륌 ì¬ì©íì¬ ìíë `Response`(ì: 몚ë `Response` íì íŽëì€)륌 ì ìží ìë ììµëë€.
+íì§ë§ *ê²œë¡ ì²ëЬ ë°ìœë ìŽí°*ìì `response_class` ë§€ê°ë³ì륌 ì¬ì©íì¬ ì¬ì©í `Response`(ì: ìŽë€ `Response` íì íŽëì€ë )륌 ì ìží ìë ììµëë€.
-*ê²œë¡ ì²ëЬ íšì*ìì ë°ííë ëŽì©ì íŽë¹ `Response`ìì í¬íšë©ëë€.
-
-ê·žëŠ¬ê³ ë§ìœ ê·ž `Response`ê° `JSONResponse`ì `UJSONResponse`ì ê²œì° ì²ëŒ JSON 믞ëìŽ íì
(`application/json`)ì ê°ì§ê³ ìë€ë©Ž, *ê²œë¡ ì²ëЬ ë°ìœë ìŽí°*ìì ì ìží Pydanticì `response_model`ì ì¬ì©íŽ ìëìŒë¡ ë³í(ë° íí°ë§) ë©ëë€.
+*ê²œë¡ ì²ëЬ íšì*ìì ë°ííë ëŽì©ì íŽë¹ `Response` ìì ëŽê¹ëë€.
/// note | ì°žê³
@@ -18,41 +16,27 @@
///
-## `ORJSONResponse` ì¬ì©íêž° { #use-orjsonresponse }
-
-ì륌 ë€ìŽ, ì±ë¥ì ê·¹ëííë €ë 겜ì°,
`orjson`ì ì€ì¹íì¬ ì¬ì©íê³ ìëµì `ORJSONResponse`ë¡ ì€ì í ì ììµëë€.
-
-ì¬ì©íê³ ì íë `Response` íŽëì€(íì íŽëì€)륌 ìí¬íží í, *ê²œë¡ ì²ëЬ ë°ìœë ìŽí°*ìì ì ìžíìžì.
-
-ëê·ëªš ìëµì 겜ì°, ëì
ë늬륌 ë°ííë ê²ë³Žë€ `Response`륌 ë°ííë ê²ìŽ íšì¬ ë¹ ëŠ
ëë€.
-
-ìŽì ë Ʞ볞ì ìŒë¡, FastAPIê° ëŽë¶ì 몚ë í목ì ê²ì¬íê³ JSONìŒë¡ ì§ë ¬íí ì ìëì§ íìžíêž° ë묞ì
ëë€. ìŽë ì¬ì©ì ìëŽììì ì€ëª
ë [JSON íží ê°ë¥ ìžìœë](../tutorial/encoder.md){.internal-link target=_blank}륌 ì¬ì©íë ë°©ì곌 ëìŒí©ëë€. ìŽë¥Œ íµíŽ ë°ìŽí°ë² ìŽì€ 몚ëžê³Œ ê°ì **ììì ê°ì²Ž**륌 ë°íí ì ììµëë€.
-
-íì§ë§ ë°ííë ëŽì©ìŽ **JSONìŒë¡ ì§ë ¬í ê°ë¥**íë€ê³ íì íë 겜ì°, íŽë¹ ëŽì©ì ìëµ íŽëì€ì ì§ì ì ë¬í ì ììŒë©°, FastAPIê° ë°í ëŽì©ì `jsonable_encoder`륌 íµíŽ ì²ëЬí ë€ ìëµ íŽëì€ì ì ë¬íë ì€ë²í€ë륌 íŒí ì ììµëë€.
+## JSON ìëµ { #json-responses }
-{* ../../docs_src/custom_response/tutorial001b_py310.py hl[2,7] *}
+Ʞ볞ì ìŒë¡ FastAPIë JSON ìëµì ë°íí©ëë€.
-/// info | ì 볎
-
-`response_class` ë§€ê°ë³ìë ìëµì "믞ëìŽ íì
"ì ì ìíë ë°ìë ì¬ì©ë©ëë€.
+[ìëµ ëªšëž](../tutorial/response-model.md)ì ì ìží멎 FastAPIë Pydanticì ì¬ì©íŽ ë°ìŽí°ë¥Œ JSONìŒë¡ ì§ë ¬íí©ëë€.
-ìŽ ê²œì°, HTTP í€ë `Content-Type`ì `application/json`ìŒë¡ ì€ì ë©ëë€.
+ìëµ ëªšëžì ì ìžíì§ ììŒë©Ž FastAPIë [JSON íží ê°ë¥ ìžìœë](../tutorial/encoder.md)ìì ì€ëª
í `jsonable_encoder`륌 ì¬ì©íŽ ë°ìŽí°ë¥Œ ë³íí ë€ `JSONResponse`ì ë£ìµëë€.
-ê·žëŠ¬ê³ ìŽë OpenAPIì ê·žëë¡ ë¬žìíë©ëë€.
+`JSONResponse`ì²ëŒ JSON 믞ëìŽ íì
(`application/json`)ì ê°ì§ `response_class`륌 ì ìží멎, ì¬ë¬ë¶ìŽ *ê²œë¡ ì²ëЬ ë°ìœë ìŽí°*ìì ì ìží Pydanticì `response_model`ë¡ ë°ìŽí°ê° ìë ë³í(ë° íí°ë§)ë©ëë€. íì§ë§ ë°ìŽí°ì JSON ë°ìŽíž ì§ë ¬í ì첎ë PydanticìŽ ìííì§ ìê³ , `jsonable_encoder`ë¡ ë³íí í `JSONResponse` íŽëì€ì ì ë¬íë©°, ê·ž íŽëì€ê° Python íì€ JSON ëŒìŽëžë¬ëŠ¬ë¥Œ ì¬ì©íŽ ë°ìŽížë¡ ì§ë ¬íí©ëë€.
-///
+### JSON ì±ë¥ { #json-performance }
-/// tip | í
+ììœí멎, ìµë ì±ë¥ìŽ íìíë€ë©Ž [ìëµ ëªšëž](../tutorial/response-model.md)ì ì¬ì©íê³ , *ê²œë¡ ì²ëЬ ë°ìœë ìŽí°*ì `response_class`륌 ì ìžíì§ ë§ìžì.
-`ORJSONResponse`ë FastAPIììë§ ì¬ì©í ì ìê³ Starletteììë ì¬ì©í ì ììµëë€.
-
-///
+{* ../../docs_src/response_model/tutorial001_01_py310.py ln[15:17] hl[16] *}
## HTML ìëµ { #html-response }
**FastAPI**ìì HTML ìëµì ì§ì ë°ííë €ë©Ž `HTMLResponse`륌 ì¬ì©íìžì.
-* `HTMLResponse`륌 ìí¬íž í©ëë€.
+* `HTMLResponse`륌 ìí¬íží©ëë€.
* *ê²œë¡ ì²ëЬ ë°ìœë ìŽí°*ì `response_class` ë§€ê°ë³ìë¡ `HTMLResponse`륌 ì ë¬í©ëë€.
{* ../../docs_src/custom_response/tutorial002_py310.py hl[2,7] *}
@@ -63,13 +47,13 @@
ìŽ ê²œì°, HTTP í€ë `Content-Type`ì `text/html`ë¡ ì€ì ë©ëë€.
-ê·žëŠ¬ê³ ìŽë OpenAPIì ê·žëë¡ ë¬žìí ë©ëë€.
+ê·žëŠ¬ê³ ìŽë OpenAPIì ê·žëë¡ ë¬žìíë©ëë€.
///
### `Response` ë°ííêž° { #return-a-response }
-[ìëµì ì§ì ë°ííêž°](response-directly.md){.internal-link target=_blank}ìì 볞 ê² ì²ëŒ, *ê²œë¡ ì²ëЬ*ìì ìëµì ì§ì ë°ííì¬ ì¬ì ìí ìë ììµëë€.
+[ìëµì ì§ì ë°ííêž°](response-directly.md)ìì 볞 ê²ì²ëŒ, *ê²œë¡ ì²ëЬ*ìì ìëµì ì§ì ë°ííì¬ ì¬ì ìí ìë ììµëë€.
ìì ìì ì ëìŒíê² `HTMLResponse`륌 ë°ííë ìœëë ë€ì곌 ê°ì ì ììµëë€:
@@ -77,7 +61,7 @@
/// warning | 겜ê³
-*ê²œë¡ ì²ëЬ íšì*ìì ì§ì ë°íë `Response`ë OpenAPIì 묞ìíëì§ ììµëë€(ì륌ë€ìŽ, `Content-Type`ìŽ ë¬žìíëì§ ìì) ìë ëíí 묞ìììë íìëì§ ììµëë€.
+*ê²œë¡ ì²ëЬ íšì*ìì ì§ì ë°íë `Response`ë OpenAPIì 묞ìíëì§ ììµëë€(ì륌 ë€ìŽ, `Content-Type`ìŽ ë¬žìíëì§ ìì) ê·žëŠ¬ê³ ìë ëíí 묞ììë íìëì§ ììµëë€.
///
@@ -87,54 +71,54 @@
///
-### OpenAPIì 묞ìííê³ `Response` ì¬ì ì íêž° { #document-in-openapi-and-override-response }
+### OpenAPIì 묞ìííê³ `Response` ì¬ì ìíêž° { #document-in-openapi-and-override-response }
-íšì ëŽë¶ìì ìëµì ì¬ì ìí멎ì ëìì OpenAPIìì "믞ëìŽ íì
"ì 묞ìííê³ ì¶ë€ë©Ž, `response_class` ë§€ê²ë³ì륌 ì¬ì©í멎ì `Response` ê°ì²Žë¥Œ ë°íí ì ììµëë€.
+íšì ëŽë¶ìì ìëµì ì¬ì ìí멎ì ëìì OpenAPIìì "믞ëìŽ íì
"ì 묞ìííê³ ì¶ë€ë©Ž, `response_class` ë§€ê°ë³ì륌 ì¬ì©í멎ì `Response` ê°ì²Žë¥Œ ë°íí ì ììµëë€.
ìŽ ê²œì° `response_class`ë OpenAPI *ê²œë¡ ì²ëЬ*륌 묞ìííë ë°ë§ ì¬ì©ëê³ , ì€ì ë¡ë ì¬ë¬ë¶ìŽ ë°íí `Response`ê° ê·žëë¡ ì¬ì©ë©ëë€.
-#### `HTMLResponse`ì§ì ë°ííêž° { #return-an-htmlresponse-directly }
+#### `HTMLResponse` ì§ì ë°ííêž° { #return-an-htmlresponse-directly }
ì륌 ë€ìŽ, ë€ì곌 ê°ìŽ ìì±í ì ììµëë€:
{* ../../docs_src/custom_response/tutorial004_py310.py hl[7,21,23] *}
-ìŽ ìì ìì, `generate_html_response()` íšìë HTMLì `str`ë¡ ë°ííë ëì ìŽë¯ž `Response`륌 ìì±íê³ ë°íí©ëë€.
+ìŽ ìì ìì `generate_html_response()` íšìë HTMLì `str`ë¡ ë°ííë ëì ìŽë¯ž `Response`륌 ìì±íê³ ë°íí©ëë€.
-`generate_html_response()`륌 ížì¶í 결곌륌 ë°ííšìŒë¡ìš, Ʞ볞ì ìž **FastAPI** Ʞ볞 ëìì ì¬ì ì íë `Response`륌 ìŽë¯ž ë°ííê³ ììµëë€.
+`generate_html_response()`륌 ížì¶í 결곌륌 ë°ííšìŒë¡ìš, Ʞ볞ì ìž **FastAPI** ëìì ì¬ì ìíë `Response`륌 ìŽë¯ž ë°ííê³ ììµëë€.
-íì§ë§ `response_class`ì `HTMLResponse`륌 íšê» ì ë¬íêž° ë묞ì, **FastAPI**ë ìŽë¥Œ OpenAPI ë° ëíí 묞ììì `text/html`ë¡ HTMLì 묞ìí íë ë°©ë²ì ì ì ììµëë€.
+íì§ë§ `response_class`ì `HTMLResponse`륌 íšê» ì ë¬íêž° ë묞ì, **FastAPI**ë ìŽë¥Œ OpenAPI ë° ëíí 묞ììì `text/html`ì HTMLë¡ ë¬žìííë ë°©ë²ì ì ì ììµëë€:

## ì¬ì© ê°ë¥í ìëµë€ { #available-responses }
-ë€ìì ì¬ì©í ì ìë ëªê°ì§ ìëµë€ ì
ëë€.
+ë€ìì ì¬ì©í ì ìë ëª ê°ì§ ìëµë€ì
ëë€.
-`Response`륌 ì¬ì©íì¬ ë€ë¥ž ìŽë€ ê²ë ë°í í ì ììŒë©°, ì§ì íì íŽëì€ë¥Œ ë§ë€ ìë ììµëë€.
+`Response`륌 ì¬ì©íì¬ ë€ë¥ž ìŽë€ ê²ë ë°íí ì ììŒë©°, ì§ì íì íŽëì€ë¥Œ ë§ë€ ìë ììµëë€.
/// note | êž°ì ìžë¶ì¬í
`from starlette.responses import HTMLResponse`륌 ì¬ì©í ìë ììµëë€.
-**FastAPI**ë ê°ë°ììž ì¬ë¬ë¶ì ížì륌 ìíŽ `starlette.responses`륌 `fastapi.responses`ë¡ ì ê³µ íì§ë§, ëë¶ë¶ì ì¬ì© ê°ë¥í ìëµì Starletteìì ì§ì ê°ì žìµëë€.
+**FastAPI**ë ê°ë°ììž ì¬ë¬ë¶ì ížì륌 ìíŽ `starlette.responses`륌 `fastapi.responses`ë¡ ëìŒíê² ì ê³µíì§ë§, ëë¶ë¶ì ì¬ì© ê°ë¥í ìëµì Starletteìì ì§ì ê°ì žìµëë€.
///
### `Response` { #response }
-Ʞ볞 `Response` íŽëì€ë ë€ë¥ž 몚ë ìëµ íŽëì€ì ë¶ëªš íŽëì€ ì
ëë€.
+Ʞ볞 `Response` íŽëì€ìŽë©°, ë€ë¥ž 몚ë ìëµ íŽëì€ê° ìŽë¥Œ ììí©ëë€.
ìŽ íŽëì€ë¥Œ ì§ì ë°íí ì ììµëë€.
ë€ì ë§€ê°ë³ì륌 ë°ì ì ììµëë€:
* `content` - `str` ëë `bytes`.
-* `status_code` - HTTP ìíìœë륌 ëíëŽë `int`.
+* `status_code` - HTTP ìí ìœë륌 ëíëŽë `int`.
* `headers` - 묞ììŽë¡ ìŽë£šìŽì§ `dict`.
* `media_type` - 믞ëìŽ íì
ì ëíëŽë `str` ì: `"text/html"`.
-FastAPI (ì€ì ë¡ë Starlette)ê° ìëìŒë¡ Content-Length í€ë륌 í¬íšìíµëë€. ëí `media_type`ì êž°ë°íì¬ Content-Type í€ë륌 í¬íšíë©°, í
ì€íž íì
ì ê²œì° ë¬žì ì§í©ì ì¶ê° í©ëë€.
+FastAPI(ì ííë Starlette)ê° ìëìŒë¡ Content-Length í€ë륌 í¬íšìíµëë€. ëí `media_type`ì êž°ë°íì¬ Content-Type í€ë륌 í¬íšíë©°, í
ì€íž íì
ì ê²œì° ë¬žì ì§í©ì ì¶ê°í©ëë€.
{* ../../docs_src/response_directly/tutorial002_py310.py hl[1,18] *}
@@ -154,37 +138,11 @@ FastAPI (ì€ì ë¡ë Starlette)ê° ìëìŒë¡ Content-Length í€ë륌 í¬íš
ìŽë ììì ì€ëª
íë¯ìŽ **FastAPI**ìì Ʞ볞ì ìŒë¡ ì¬ì©ëë ìëµ íìì
ëë€.
-### `ORJSONResponse` { #orjsonresponse }
-
-
`orjson`ì ì¬ì©íì¬ ë¹ ë¥ž JSON ìëµì ì ê³µíë ëìì
ëë€. ììì ì€ëª
í ëŽì©ê³Œ ê°ìµëë€.
-
-/// info | ì 볎
-
-ìŽë¥Œ ì¬ì©íë €ë©Ž `orjson`ì ì€ì¹íŽìŒí©ëë€. ì: `pip install orjson`.
-
-///
-
-### `UJSONResponse` { #ujsonresponse }
-
-
`ujson`ì ì¬ì©í ë ë€ë¥ž JSON ìëµ íìì
ëë€.
-
-/// info | ì 볎
-
-ìŽ ìëµì ì¬ì©íë €ë©Ž `ujson`ì ì€ì¹íŽìŒí©ëë€. ì: `pip install ujson`.
-
-///
+/// note | êž°ì ìžë¶ì¬í
-/// warning | 겜ê³
+íì§ë§ ìëµ ëªšëž ëë ë°í íì
ì ì ìží 겜ì°, íŽë¹ 몚ëžìŽ ë°ìŽí°ë¥Œ JSONìŒë¡ ì§ë ¬ííë ë° ì§ì ì¬ì©ëë©°, ì¬ë°ë¥ž JSON 믞ëìŽ íì
ì ìëµìŽ `JSONResponse` íŽëì€ë¥Œ ì¬ì©íì§ ìê³ ë°ë¡ ë°íë©ëë€.
-`ujson` ì ìŒë¶ ììž ê²œì°ë¥Œ ì²ëЬíë ë° ììŽ Python ëŽì¥ 구íë³Žë€ ë ì격í©ëë€.
-
-///
-
-{* ../../docs_src/custom_response/tutorial001_py310.py hl[2,7] *}
-
-/// tip | í
-
-`ORJSONResponse`ê° ë ë¹ ë¥ž ëììŒ ê°ë¥ì±ìŽ ììµëë€.
+ìŽ ë°©ììŽ ìµìì ì±ë¥ì ì»ë ìŽìì ìž ë°©ë²ì
ëë€.
///
@@ -192,7 +150,7 @@ FastAPI (ì€ì ë¡ë Starlette)ê° ìëìŒë¡ Content-Length í€ë륌 í¬íš
HTTP 늬ëë ì
ìëµì ë°íí©ëë€. Ʞ볞ì ìŒë¡ ìí ìœëë 307(ìì 늬ëë ì
)ìŒë¡ ì€ì ë©ëë€.
-`RedirectResponse`륌 ì§ì ë°íí ì ììµëë€.
+`RedirectResponse`륌 ì§ì ë°íí ì ììµëë€:
{* ../../docs_src/custom_response/tutorial006_py310.py hl[2,9] *}
@@ -205,7 +163,7 @@ HTTP 늬ëë ì
ìëµì ë°íí©ëë€. Ʞ볞ì ìŒë¡ ìí ìœëë 30
ìŽ ê²œì°, *ê²œë¡ ì²ëЬ* íšììì URLì ì§ì ë°íí ì ììµëë€.
-ìŽ ê²œì°, ì¬ì©ëë `status_code`ë `RedirectResponse`ì Ʞ볞ê°ìž `307` ì
ëë€.
+ìŽ ê²œì°, ì¬ì©ëë `status_code`ë `RedirectResponse`ì Ʞ볞ê°ìž `307`ì
ëë€.
---
@@ -215,31 +173,25 @@ HTTP 늬ëë ì
ìëµì ë°íí©ëë€. Ʞ볞ì ìŒë¡ ìí ìœëë 30
### `StreamingResponse` { #streamingresponse }
-ë¹ëêž° ì ëë ìŽí° ëë ìŒë° ì ëë ìŽí°/ìŽí°ë ìŽí°ë¥Œ ë°ì ìëµ ë³žë¬žì ì€ížëŠ¬ë° í©ëë€.
-
-{* ../../docs_src/custom_response/tutorial007_py310.py hl[2,14] *}
-
-#### íìŒê³Œ ê°ì ê°ì²Žë¥Œ ì¬ì©í `StreamingResponse` { #using-streamingresponse-with-file-like-objects }
+ë¹ëêž° ì ëë ìŽí° ëë ìŒë° ì ëë ìŽí°/ìŽí°ë ìŽí°(`yield`ê° ìë íšì)륌 ë°ì ìëµ ë³žë¬žì ì€ížëЬë°í©ëë€.
-
file-like ê°ì²Ž(ì: `open()`ìŒë¡ ë°íë ê°ì²Ž)ê° ìë 겜ì°, íŽë¹ file-like ê°ì²Žë¥Œ ë°ë³µ(iterate)íë ì ëë ìŽí° íšì륌 ë§ë€ ì ììµëë€.
+{* ../../docs_src/custom_response/tutorial007_py310.py hl[3,16] *}
-ìŽ ë°©ììŒë¡, íìŒ ì 첎륌 ë©ëªšëЬì 뚌ì ìœìŽë€ìŒ íì ììŽ, ì ëë ìŽí° íšì륌 `StreamingResponse`ì ì ë¬íì¬ ë°íí ì ììµëë€.
-
-ìŽ ë°©ìì íŽëŒì°ë ì€í 늬ì§, ë¹ëì€ ì²ëЬ ë±ì ë€ìí ëŒìŽëžë¬ëЬì íšê» ì¬ì©í ì ììµëë€.
+/// note | êž°ì ìžë¶ì¬í
-{* ../../docs_src/custom_response/tutorial008_py310.py hl[2,10:12,14] *}
+`async` ìì
ì `await`ì ëë¬íì ëë§ ì·šìë ì ììµëë€. `await`ê° ììŒë©Ž ì ëë ìŽí°(`yield`ê° ìë íšì)ë ì ëë¡ ì·šìë ì ìê³ , ì·šìê° ìì²ë íìë ê³ì ì€íë ì ììµëë€.
-1. ìŽê²ìŽ ì ëë ìŽí° íšìì
ëë€. `yield` 묞ì í¬íšíê³ ììŒë¯ë¡ "ì ëë ìŽí° íšì"ì
ëë€.
-2. `with` ëžë¡ì ì¬ì©íšìŒë¡ìš, ì ëë ìŽí° íšìê° ìë£ë í íìŒê³Œ ê°ì ê°ì²Žê° ë«íëë¡ í©ëë€. ìŠ, ìëµ ì ì¡ìŽ ëë í ë«íëë€.
-3. ìŽ `yield from`ì íšìê° `file_like`ëŒë ê°ì²Žë¥Œ ë°ë³µ(iterate)íëë¡ í©ëë€. ë°ë³µë ê° ë¶ë¶ì ìŽ ì ëë ìŽí° íšì(`iterfile`)ìì ìì±ë ê²ì²ëŒ `yield` ë©ëë€.
+ìŽ ìì ìì ë ìŽë€ `await`ë íìíì§ ììŒë¯ë¡, ìŽë²€íž 룚íê° ì·šì륌 ì²ëЬí êž°í륌 죌Ʞ ìíŽ `await anyio.sleep(0)`륌 ì¶ê°í©ëë€.
- ìŽë ê² í멎 "ìì±(generating)" ìì
ì ëŽë¶ì ìŒë¡ ë€ë¥ž 묎ìžê°ì ììíë ì ëë ìŽí° íšìê° ë©ëë€.
+ëê·ëªš ëë 묎í ì€ížëŠŒììë ëì± ì€ìí©ëë€.
- ìŽ ë°©ìì ì¬ì©í멎 `with` ëžë¡ ììì íìŒì ìŽ ì ììŽ, ìì
ìŽ ìë£ë í íìŒê³Œ ê°ì ê°ì²Žê° ë«íë ê²ì 볎ì¥í ì ììµëë€.
+///
/// tip | í
-ì¬êž°ì íì€ `open()`ì ì¬ì©íê³ ìêž° ë묞ì `async`ì `await`륌 ì§ìíì§ ììµëë€. ë°ëŒì ê²œë¡ ì²ëЬë ìŒë° `def`ë¡ ì ìží©ëë€.
+`StreamingResponse`륌 ì§ì ë°ííë ëì , [ë°ìŽí° ì€ížëЬë°](./stream-data.md)ììì ì€íìŒì ë°ë¥Žë ê²ìŽ ë ížëЬíë©° 백귞ëŒìŽëìì ì·šì ì²ëŠ¬ë¥Œ íŽì€ëë€.
+
+JSON Lines륌 ì€ížëЬë°íë€ë©Ž, [JSON Lines ì€ížëЬë°](../tutorial/stream-json-lines.md) íí 늬ìŒì íìžíìžì.
///
@@ -268,9 +220,9 @@ HTTP 늬ëë ì
ìëµì ë°íí©ëë€. Ʞ볞ì ìŒë¡ ìí ìœëë 30
`Response`륌 ììë°ì ì¬ì©ì ì ì ìëµ íŽëì€ë¥Œ ìì±íê³ ì¬ì©í ì ììµëë€.
-ì륌 ë€ìŽ, í¬íšë `ORJSONResponse` íŽëì€ìì ì¬ì©ëì§ ìë ì€ì ìŒë¡
`orjson`ì ì¬ì©íê³ ì¶ë€ê³ ê°ì íŽëŽ
ìë€.
+ì륌 ë€ìŽ, [`orjson`](https://github.com/ijl/orjson)ì ìŒë¶ ì€ì 곌 íšê» ì¬ì©íê³ ì¶ë€ê³ ê°ì íŽëŽ
ìë€.
-ë§ìœ ë€ì¬ì°êž° ë° í¬ë§·ë JSONì ë°ííê³ ì¶ë€ë©Ž, `orjson.OPT_INDENT_2` ìµì
ì ì¬ì©í ì ììµëë€.
+ë€ì¬ì°êž° ë° í¬ë§·ë JSONì ë°ííê³ ì¶ë€ë©Ž, orjson ìµì
`orjson.OPT_INDENT_2`륌 ì¬ì©í ì ììµëë€.
`CustomORJSONResponse`륌 ìì±í ì ììµëë€. ì¬êž°ì íµì¬ì `Response.render(content)` ë©ìë륌 ìì±íì¬ ëŽì©ì `bytes`ë¡ ë°ííë ê²ì
ëë€:
@@ -292,13 +244,21 @@ HTTP 늬ëë ì
ìëµì ë°íí©ëë€. Ʞ볞ì ìŒë¡ ìí ìœëë 30
ë¬Œë¡ JSON í¬ë§·í
ë³Žë€ ë ì ì©íê² íì©í ë°©ë²ì ì°Ÿì ì ìì ê²ì
ëë€. ð
+### `orjson` ëë ìëµ ëªšëž { #orjson-or-response-model }
+
+ì±ë¥ìŽ ëª©ì ìŽëŒë©Ž, `orjson` ìëµì ì¬ì©íë ê²ë³Žë€ [ìëµ ëªšëž](../tutorial/response-model.md)ì ì¬ì©íë ížìŽ ë ëì ê°ë¥ì±ìŽ íœëë€.
+
+ìëµ ëªšëžì ì¬ì©í멎 FastAPIë ì€ê° ëšê³(ì: `jsonable_encoder`ë¡ì ë³í) ììŽ Pydanticì ì¬ì©íŽ ë°ìŽí°ë¥Œ JSONìŒë¡ ì§ë ¬íí©ëë€. ìŽë° ì€ê° ëšê³ë ë€ë¥ž 겜ì°ì ë°ìí©ëë€.
+
+ê·žëŠ¬ê³ ëŽë¶ì ìŒë¡ Pydanticì JSON ì§ë ¬í륌 ìíŽ `orjson`곌 ëìŒí Rust êž°ë° ë©ì»€ëìŠì ì¬ì©íë¯ë¡, ìëµ ëªšëžë§ìŒë¡ë ìŽë¯ž ìµìì ì±ë¥ì ì»ê² ë©ëë€.
+
## Ʞ볞 ìëµ íŽëì€ { #default-response-class }
-**FastAPI** íŽëì€ ê°ì²Ž ëë `APIRouter`륌 ìì±í ë Ʞ볞ì ìŒë¡ ì¬ì©í ìëµ íŽëì€ë¥Œ ì§ì í ì ììµëë€.
+**FastAPI** íŽëì€ ìžì€íŽì€ ëë `APIRouter`륌 ìì±í ë Ʞ볞ìŒë¡ ì¬ì©í ìëµ íŽëì€ë¥Œ ì§ì í ì ììµëë€.
ìŽë¥Œ ì ìíë ë§€ê°ë³ìë `default_response_class`ì
ëë€.
-ìë ìì ìì **FastAPI**ë 몚ë *ê²œë¡ ì²ëЬ*ìì Ʞ볞ì ìŒë¡ `JSONResponse` ëì `ORJSONResponse`륌 ì¬ì©í©ëë€.
+ìë ìì ìì **FastAPI**ë 몚ë *ê²œë¡ ì²ëЬ*ìì JSON ëì Ʞ볞ì ìŒë¡ `HTMLResponse`륌 ì¬ì©í©ëë€.
{* ../../docs_src/custom_response/tutorial010_py310.py hl[2,4] *}
@@ -310,4 +270,4 @@ HTTP 늬ëë ì
ìëµì ë°íí©ëë€. Ʞ볞ì ìŒë¡ ìí ìœëë 30
## ì¶ê° 묞ìí { #additional-documentation }
-OpenAPIìì `responses`륌 ì¬ì©íì¬ ë¯žëìŽ íì
ë° êž°í ìžë¶ ì 볎륌 ì ìží ìë ììµëë€: [OpenAPIìì ì¶ê° ìëµ](additional-responses.md){.internal-link target=_blank}.
+OpenAPIìì `responses`륌 ì¬ì©íì¬ ë¯žëìŽ íì
ë° êž°í ìžë¶ ì 볎륌 ì ìží ìë ììµëë€: [OpenAPIìì ì¶ê° ìëµ](additional-responses.md).
diff --git a/docs/ko/docs/advanced/dataclasses.md b/docs/ko/docs/advanced/dataclasses.md
index 0210812b6e..77e8d0464c 100644
--- a/docs/ko/docs/advanced/dataclasses.md
+++ b/docs/ko/docs/advanced/dataclasses.md
@@ -2,11 +2,11 @@
FastAPIë **Pydantic** ìì 구ì¶ëìŽ ììŒë©°, ì§êžê¹ì§ë Pydantic 몚ëžì ì¬ì©íŽ ìì²ê³Œ ìëµì ì ìžíë ë°©ë²ì 볎ì¬ëë žìµëë€.
-íì§ë§ FastAPIë
`dataclasses`ë ê°ì ë°©ììŒë¡ ì¬ì©íë ê²ì ì§ìí©ëë€:
+íì§ë§ FastAPIë [`dataclasses`](https://docs.python.org/3/library/dataclasses.html)ë ê°ì ë°©ììŒë¡ ì¬ì©íë ê²ì ì§ìí©ëë€:
{* ../../docs_src/dataclasses_/tutorial001_py310.py hl[1,6:11,18:19] *}
-ìŽë **Pydantic** ëë¶ì ì¬ì í ì§ìëëë°, PydanticìŽ
`dataclasses`ì ëí ëŽë¶ ì§ìì ì ê³µíêž° ë묞ì
ëë€.
+ìŽë **Pydantic** ëë¶ì ì¬ì í ì§ìëëë°, PydanticìŽ [`dataclasses`ì ëí ëŽë¶ ì§ì](https://docs.pydantic.dev/latest/concepts/dataclasses/#use-of-stdlib-dataclasses-with-basemodel)ì ì ê³µíêž° ë묞ì
ëë€.
ë°ëŒì ì ìœëì²ëŒ Pydanticì ëª
ìì ìŒë¡ ì¬ì©íì§ ìëëŒë, FastAPIë Pydanticì ì¬ì©íŽ íì€ dataclasses륌 Pydanticì dataclasses ë³íìŒë¡ ë³íí©ëë€.
@@ -18,7 +18,7 @@ FastAPIë **Pydantic** ìì 구ì¶ëìŽ ììŒë©°, ì§êžê¹ì§ë Pydantic
ìŽë Pydantic 몚ëžì ì¬ì©í ëì ê°ì ë°©ììŒë¡ ëìí©ëë€. ê·žëŠ¬ê³ ì€ì ë¡ë ëŽë¶ì ìŒë¡ë Pydanticì ì¬ì©íŽ ê°ì ë°©ììŒë¡ 구íë©ëë€.
-/// info | ì 볎
+/// info
dataclassesë Pydantic 몚ëžìŽ í ì ìë 몚ë ê²ì í ìë ìë€ë ì ì êž°ìµíìžì.
@@ -74,7 +74,7 @@ dataclassë ìëìŒë¡ Pydantic dataclassë¡ ë³íë©ëë€.
ìžì ëì²ëŒ FastAPIììë íìì ë°ëŒ `def`ì `async def`륌 ì¡°í©íŽ ì¬ì©í ì ììµëë€.
- ìŽë€ ê²ì ìžì ì¬ì©íŽìŒ íëì§ ë€ì íìžíê³ ì¶ë€ë©Ž, [`async`ì `await`](../async.md#in-a-hurry){.internal-link target=_blank} 묞ìì _"êžíì ê°ì?"_ ì¹ì
ì íìžíìžì.
+ ìŽë€ ê²ì ìžì ì¬ì©íŽìŒ íëì§ ë€ì íìžíê³ ì¶ë€ë©Ž, [`async`ì `await`](../async.md#in-a-hurry) 묞ìì _"êžíì ê°ì?"_ ì¹ì
ì íìžíìžì.
9. ìŽ *ê²œë¡ ì²ëЬ íšì*ë dataclasses륌(ë¬Œë¡ ë°íí ìë ìì§ë§) ë°ííì§ ìê³ , ëŽë¶ ë°ìŽí°ë¥Œ ëŽì ëì
ë늬ë€ì 늬ì€ížë¥Œ ë°íí©ëë€.
@@ -88,7 +88,7 @@ dataclassë ìëìŒë¡ Pydantic dataclassë¡ ë³íë©ëë€.
`dataclasses`륌 ë€ë¥ž Pydantic 몚ëžê³Œ ì¡°í©íê±°ë, ìŽë¥Œ ììíê±°ë, ì¬ë¬ë¶ì 몚ëžì í¬íšíë ë±ì ìì
ë í ì ììµëë€.
-ììží ëŽì©ì
dataclassesì êŽí Pydantic 묞ì륌 ì°žê³ íìžì.
+ììží ëŽì©ì [dataclassesì êŽí Pydantic 묞ì](https://docs.pydantic.dev/latest/concepts/dataclasses/)륌 ì°žê³ íìžì.
## ë²ì { #version }
diff --git a/docs/ko/docs/advanced/events.md b/docs/ko/docs/advanced/events.md
index f1dd8397a0..708ad443ff 100644
--- a/docs/ko/docs/advanced/events.md
+++ b/docs/ko/docs/advanced/events.md
@@ -150,11 +150,11 @@ async with lifespan(app):
ížêž°ì¬ ë§ì ë¶ë€ì ìí êž°ì ì ìž ìžë¶ì¬íì
ëë€. ð€
-ëŽë¶ì ìŒë¡ ASGI êž°ì ì¬ìììë ìŽê²ìŽ
Lifespan Protocolì ìŒë¶ìŽë©°, `startup`곌 `shutdown`ìŽëŒë ìŽë²€ížë¥Œ ì ìí©ëë€.
+ëŽë¶ì ìŒë¡ ASGI êž°ì ì¬ìììë ìŽê²ìŽ [Lifespan Protocol](https://asgi.readthedocs.io/en/latest/specs/lifespan.html)ì ìŒë¶ìŽë©°, `startup`곌 `shutdown`ìŽëŒë ìŽë²€ížë¥Œ ì ìí©ëë€.
/// info | ì 볎
-Starlette `lifespan` ížë€ë¬ì ëíŽìë
Starletteì Lifespan 묞ììì ë ìœìŽë³Œ ì ììµëë€.
+Starlette `lifespan` ížë€ë¬ì ëíŽìë [Starletteì Lifespan 묞ì](https://www.starlette.dev/lifespan/)ìì ë ìœìŽë³Œ ì ììµëë€.
ëí ìœëì ë€ë¥ž ìììì ì¬ì©í ì ìë lifespan ìí륌 ì²ëЬíë ë°©ë²ë í¬íšëìŽ ììµëë€.
@@ -162,4 +162,4 @@ Starlette `lifespan` ížë€ë¬ì ëíŽìë
OpenAPI Generatorê° ììŒë©°, **ë€ìí íë¡ê·žëë° ìžìŽ**륌 ì§ìíê³ OpenAPI ì¬ììŒë¡ë¶í° SDK륌 ìì±í ì ììµëë€.
+ë€ìíê² íì©í ì ìë ìµì
ìŒë¡ [OpenAPI Generator](https://openapi-generator.tech/)ê° ììŒë©°, **ë€ìí íë¡ê·žëë° ìžìŽ**륌 ì§ìíê³ OpenAPI ì¬ììŒë¡ë¶í° SDK륌 ìì±í ì ììµëë€.
-**TypeScript íŽëŒìŽìžíž**ì 겜ì°
Hey APIë TypeScript ìíê³ì ìµì íë 겜íì ì ê³µíë 목ì ì ë§ê² ì€ê³ë ì룚ì
ì
ëë€.
+**TypeScript íŽëŒìŽìžíž**ì ê²œì° [Hey API](https://heyapi.dev/)ë TypeScript ìíê³ì ìµì íë 겜íì ì ê³µíë 목ì ì ë§ê² ì€ê³ë ì룚ì
ì
ëë€.
-ë ë§ì SDK ìì±êž°ë
OpenAPI.Toolsìì íìží ì ììµëë€.
+ë ë§ì SDK ìì±êž°ë [OpenAPI.Tools](https://openapi.tools/#sdk)ìì íìží ì ììµëë€.
/// tip | í
@@ -24,15 +24,15 @@ FastAPIë **OpenAPI 3.1** ì¬ìì ìëìŒë¡ ìì±íë¯ë¡, ì¬ì©íë
ìŽ ì¹ì
ììë FastAPI륌 íìíë íì¬ë€ìŽ ì ê³µíë **ë²€ì² í¬ì êž°ë°** ë° **êž°ì
ì§ì** ì룚ì
ì ìê°í©ëë€. ìŽ ì íë€ì ê³ íì§ë¡ ìì±ë SDKì ëíŽ **ì¶ê° êž°ë¥**곌 **íµí©**ì ì ê³µí©ëë€.
-âš [**FastAPI íìíêž°**](../help-fastapi.md#sponsor-the-author){.internal-link target=_blank} âšë¥Œ íµíŽ, ìŽ íì¬ë€ì íë ììí¬ì ê·ž **ìíê³**ê° ê±Žê°íê³ **ì§ì ê°ë¥**íê² ì ì§ëëë¡ ëìµëë€.
+âš [**FastAPI íìíêž°**](../help-fastapi.md#sponsor-the-author) âšë¥Œ íµíŽ, ìŽ íì¬ë€ì íë ììí¬ì ê·ž **ìíê³**ê° ê±Žê°íê³ **ì§ì ê°ë¥**íê² ì ì§ëëë¡ ëìµëë€.
ëí ìŽë€ì íìì FastAPI **컀뮀ëí°**(ì¬ë¬ë¶)ì ëí ê°í íì ì 볎ì¬ì£Œë©°, **ì¢ì ìë¹ì€**륌 ì ê³µíë ê²ë¿ ìëëŒ, ê²¬ê³ íê³ íë°í íë ììí¬ìž FastAPI륌 ì§ìíë ë°ìë êŽì¬ìŽ ììì ëíë
ëë€. ð
ì륌 ë€ìŽ ë€ìì ì¬ì©íŽ ë³Œ ì ììµëë€:
-*
Speakeasy
-*
Stainless
-*
liblab
+* [Speakeasy](https://speakeasy.com/editor?utm_source=fastapi+repo&utm_medium=github+sponsorship)
+* [Stainless](https://www.stainless.com/?utm_source=fastapi&utm_medium=referral)
+* [liblab](https://developers.liblab.com/tutorials/sdk-for-fastapi?utm_source=fastapi)
ìŽ ì€ ìŒë¶ë ì€í ìì€ìŽê±°ë ë¬Žë£ í°ìŽë¥Œ ì ê³µíë¯ë¡, ë¹ì© ë¶ëŽ ììŽ ì¬ì©íŽ ë³Œ ì ììµëë€. ë€ë¥ž ìì© SDK ìì±êž°ë ììŒë©° ìšëŒìžìì ì°Ÿì ì ììµëë€. ð€
@@ -42,7 +42,7 @@ FastAPIë **OpenAPI 3.1** ì¬ìì ìëìŒë¡ ìì±íë¯ë¡, ì¬ì©íë
{* ../../docs_src/generate_clients/tutorial001_py310.py hl[7:9,12:13,16:17,21] *}
-*path operation*ìì ìì² íìŽë¡ëì ìëµ íìŽë¡ëì ì¬ì©íë 몚ëžì `Item`, `ResponseMessage` 몚ëžë¡ ì ìíê³ ìë€ë ì ì 죌목íìžì.
+*ê²œë¡ ì²ëЬ*ìì ìì² íìŽë¡ëì ìëµ íìŽë¡ëì ì¬ì©íë 몚ëžì `Item`, `ResponseMessage` 몚ëžë¡ ì ìíê³ ìë€ë ì ì 죌목íìžì.
### API 묞ì { #api-docs }
@@ -66,7 +66,7 @@ npx @hey-api/openapi-ts -i http://localhost:8000/openapi.json -o src/client
ìŽ ëª
ë ¹ì `./src/client`ì TypeScript SDK륌 ìì±í©ëë€.
-
`@hey-api/openapi-ts` ì€ì¹ ë°©ë²ê³Œ
ìì±ë 결곌묌ì íŽë¹ ì¹ì¬ìŽížìì íìží ì ììµëë€.
+[`@hey-api/openapi-ts` ì€ì¹ ë°©ë²](https://heyapi.dev/openapi-ts/get-started)곌 [ìì±ë 결곌묌](https://heyapi.dev/openapi-ts/output)ì íŽë¹ ì¹ì¬ìŽížìì íìží ì ììµëë€.
### SDK ì¬ì©íêž° { #using-the-sdk }
@@ -94,7 +94,7 @@ npx @hey-api/openapi-ts -i http://localhost:8000/openapi.json -o src/client
## íê·žê° ìë FastAPI ì± { #fastapi-app-with-tags }
-ëë¶ë¶ì ê²œì° FastAPI ì±ì ë 컀ì§ê³ , ìë¡ ë€ë¥ž *path operations* 귞룹ì ë¶ëЬíêž° ìíŽ í귞륌 ì¬ì©íê² ë ê°ë¥ì±ìŽ íœëë€.
+ëë¶ë¶ì ê²œì° FastAPI ì±ì ë 컀ì§ê³ , ìë¡ ë€ë¥ž *ê²œë¡ ì²ëЬ* 귞룹ì ë¶ëЬíêž° ìíŽ í귞륌 ì¬ì©íê² ë ê°ë¥ì±ìŽ íœëë€.
ì륌 ë€ìŽ **items** ì¹ì
곌 **users** ì¹ì
ìŽ ìê³ , ìŽë¥Œ íê·žë¡ ë¶ëЬí ì ììµëë€:
@@ -121,9 +121,9 @@ npx @hey-api/openapi-ts -i http://localhost:8000/openapi.json -o src/client
ItemsService.createItemItemsPost({name: "Plumbus", price: 5})
```
-...ìŽë íŽëŒìŽìžíž ìì±êž°ê° ê° *path operation*ì ëíŽ OpenAPI ëŽë¶ì **operation ID**륌 ì¬ì©íêž° ë묞ì
ëë€.
+...ìŽë íŽëŒìŽìžíž ìì±êž°ê° ê° *ê²œë¡ ì²ëЬ*ì ëíŽ OpenAPI ëŽë¶ì **operation ID**륌 ì¬ì©íêž° ë묞ì
ëë€.
-OpenAPIë 몚ë *path operations* ì 첎ìì operation IDê° ê°ê° ì ìŒíŽìŒ íë€ê³ ì구í©ëë€. ê·žëì FastAPIë operation IDê° ì ìŒíëë¡ **íšì ìŽëŠ**, **겜ë¡**, **HTTP method/operation**ì ì¡°í©íŽ operation ID륌 ìì±í©ëë€.
+OpenAPIë 몚ë *ê²œë¡ ì²ëЬ* ì 첎ìì operation IDê° ê°ê° ì ìŒíŽìŒ íë€ê³ ì구í©ëë€. ê·žëì FastAPIë operation IDê° ì ìŒíëë¡ **íšì ìŽëŠ**, **겜ë¡**, **HTTP method/operation**ì ì¡°í©íŽ operation ID륌 ìì±í©ëë€.
íì§ë§ ë€ììì ìŽë¥Œ ê°ì íë ë°©ë²ì 볎ì¬ëëŠ¬ê² ìµëë€. ð€
@@ -133,15 +133,15 @@ OpenAPIë 몚ë *path operations* ì 첎ìì operation IDê° ê°ê° ì ìŒ
ìŽ ê²œì° operation IDê° ë€ë¥ž ë°©ììŒë¡ë **ì ìŒ**íëë¡ ë³Žì¥íŽìŒ í©ëë€.
-ì륌 ë€ìŽ ê° *path operation*ìŽ í귞륌 ê°ëë¡ í ë€ì, **íê·ž**ì *path operation* **ìŽëŠ**(íšì ìŽëŠ)ì êž°ë°ìŒë¡ operation ID륌 ìì±í ì ììµëë€.
+ì륌 ë€ìŽ ê° *ê²œë¡ ì²ëЬ*ìŽ í귞륌 ê°ëë¡ í ë€ì, **íê·ž**ì *ê²œë¡ ì²ëЬ* **ìŽëŠ**(íšì ìŽëŠ)ì êž°ë°ìŒë¡ operation ID륌 ìì±í ì ììµëë€.
### ì ìŒ ID ìì± íšì 컀ì€í°ë§ìŽì§ { #custom-generate-unique-id-function }
-FastAPIë ê° *path operation*ì ëíŽ **ì ìŒ ID**륌 ì¬ì©íë©°, ìŽë **operation ID** ë° ìì²/ìëµì íìí 컀ì€í
ëªšëž ìŽëŠìë ì¬ì©ë©ëë€.
+FastAPIë ê° *ê²œë¡ ì²ëЬ*ì ëíŽ **ì ìŒ ID**륌 ì¬ì©íë©°, ìŽë **operation ID** ë° ìì²/ìëµì íìí 컀ì€í
ëªšëž ìŽëŠìë ì¬ì©ë©ëë€.
ìŽ íšì륌 컀ì€í°ë§ìŽì§í ì ììµëë€. ìŽ íšìë `APIRoute`륌 ë°ì 묞ììŽì ë°íí©ëë€.
-ì륌 ë€ìŽ ìëììë 첫 ë²ì§ž íê·ž(ëë¶ë¶ íê·žë íëë§ ìì ê²ì
ëë€)ì *path operation* ìŽëŠ(íšì ìŽëŠ)ì ì¬ì©í©ëë€.
+ì륌 ë€ìŽ ìëììë 첫 ë²ì§ž íê·ž(ëë¶ë¶ íê·žë íëë§ ìì ê²ì
ëë€)ì *ê²œë¡ ì²ëЬ* ìŽëŠ(íšì ìŽëŠ)ì ì¬ì©í©ëë€.
ê·ž ë€ì ìŽ ì»€ì€í
íšì륌 `generate_unique_id_function` ë§€ê°ë³ìë¡ **FastAPI**ì ì ë¬í ì ììµëë€:
@@ -201,7 +201,7 @@ npx @hey-api/openapi-ts -i ./openapi.json -o src/client
ëí 몚ë ê²ì ëíŽ **ìžëŒìž ì€ë¥**ë íìží ì ììµëë€.
-ê·žëŠ¬ê³ ë°±ìë ìœë륌 ì
ë°ìŽíží ë€ íë¡ ížìë륌 **ì¬ìì±(regenerate)**í멎, ì *path operations*ê° ë©ìëë¡ ì¶ê°ëê³ êž°ì¡Ž ê²ì ì ê±°ëë©°, ê·ž ë°ì ë³ê²œ ì¬íë ìì±ë ìœëì ë°ìë©ëë€. ð€
+ê·žëŠ¬ê³ ë°±ìë ìœë륌 ì
ë°ìŽíží ë€ íë¡ ížìë륌 **ì¬ìì±(regenerate)**í멎, ì *ê²œë¡ ì²ëЬ*ê° ë©ìëë¡ ì¶ê°ëê³ êž°ì¡Ž ê²ì ì ê±°ëë©°, ê·ž ë°ì ë³ê²œ ì¬íë ìì±ë ìœëì ë°ìë©ëë€. ð€
ìŽë 묎ìžê° ë³ê²œë멎 ê·ž ë³ê²œìŽ íŽëŒìŽìžíž ìœëìë ìëìŒë¡ **ë°ì**ëë€ë ë»ì
ëë€. ëí íŽëŒìŽìžížë¥Œ **ë¹ë(build)**í멎 ì¬ì©ë ë°ìŽí°ê° **ë¶ìŒì¹(mismatch)**í ê²œì° ì€ë¥ê° ë°ìí©ëë€.
diff --git a/docs/ko/docs/advanced/index.md b/docs/ko/docs/advanced/index.md
index 6212a7279c..feb91d5a6b 100644
--- a/docs/ko/docs/advanced/index.md
+++ b/docs/ko/docs/advanced/index.md
@@ -2,7 +2,7 @@
## ì¶ê° êž°ë¥ { #additional-features }
-ë©ìž [ììµì - ì¬ì©ì ìëŽì](../tutorial/index.md){.internal-link target=_blank}ë ì¬ë¬ë¶ìŽ **FastAPI**ì 몚ë 죌ì êž°ë¥ì ëë¬ë³Žìêž°ì ì¶©ë¶í ê²ì
ëë€.
+ë©ìž [ììµì - ì¬ì©ì ìëŽì](../tutorial/index.md)ë ì¬ë¬ë¶ìŽ **FastAPI**ì 몚ë 죌ì êž°ë¥ì ëë¬ë³Žìêž°ì ì¶©ë¶í ê²ì
ëë€.
ìŽìŽì§ë ì¥ììë ì¬ë¬ë¶ìŽ ë€ë¥ž ìµì
, êµ¬ì± ë° ì¶ê° êž°ë¥ì ë³Žì€ ì ììµëë€.
@@ -16,6 +16,6 @@
## ììµì륌 뚌ì ìœìŒììì€ { #read-the-tutorial-first }
-ì¬ë¬ë¶ì ë©ìž [ììµì - ì¬ì©ì ìëŽì](../tutorial/index.md){.internal-link target=_blank}ì ì§ììŒë¡ **FastAPI**ì ëë¶ë¶ì êž°ë¥ì ì¬ì©íì€ ì ììµëë€.
+ì¬ë¬ë¶ì ë©ìž [ììµì - ì¬ì©ì ìëŽì](../tutorial/index.md)ì ì§ììŒë¡ **FastAPI**ì ëë¶ë¶ì êž°ë¥ì ì¬ì©íì€ ì ììµëë€.
ìŽìŽì§ë ì¥ë€ì ì¬ë¬ë¶ìŽ ë©ìž ììµì - ì¬ì©ì ìëŽì륌 ìŽë¯ž ìœìŒì
šìŒë©° 죌ì ììŽëìŽë¥Œ ìê³ ê³ì ë€ê³ ê°ì í©ëë€.
diff --git a/docs/ko/docs/advanced/middleware.md b/docs/ko/docs/advanced/middleware.md
index f6f7bbc966..7443cf4241 100644
--- a/docs/ko/docs/advanced/middleware.md
+++ b/docs/ko/docs/advanced/middleware.md
@@ -1,8 +1,8 @@
# ê³ êž Middleware { #advanced-middleware }
-ë©ìž íí 늬ìŒìì ì í늬ìŒìŽì
ì [컀ì€í
Middleware](../tutorial/middleware.md){.internal-link target=_blank}륌 ì¶ê°íë ë°©ë²ì ìœììµëë€.
+ë©ìž íí 늬ìŒìì ì í늬ìŒìŽì
ì [컀ì€í
Middleware](../tutorial/middleware.md)륌 ì¶ê°íë ë°©ë²ì ìœììµëë€.
-ê·žëŠ¬ê³ [`CORSMiddleware`ë¡ CORS ì²ëЬíêž°](../tutorial/cors.md){.internal-link target=_blank}ë ìœììµëë€.
+ê·žëŠ¬ê³ [`CORSMiddleware`ë¡ CORS ì²ëЬíêž°](../tutorial/cors.md)ë ìœììµëë€.
ìŽ ì¹ì
ììë ë€ë¥ž middlewareë€ì ì¬ì©íë ë°©ë²ì ìŽíŽë³Žê² ìµëë€.
@@ -91,7 +91,7 @@ HTTP Host Header 공격ì ë°©ìŽíêž° ìíŽ, ë€ìŽì€ë 몚ë ìì²ì
ì륌 ë€ìŽ:
-*
Uvicornì `ProxyHeadersMiddleware`
-*
MessagePack
+* [Uvicornì `ProxyHeadersMiddleware`](https://github.com/encode/uvicorn/blob/master/uvicorn/middleware/proxy_headers.py)
+* [MessagePack](https://github.com/florimondmanca/msgpack-asgi)
-ì¬ì© ê°ë¥í ë€ë¥ž middleware륌 ë³Žë €ë©Ž
Starletteì Middleware 묞ìì
ASGI Awesome List륌 íìžíìžì.
+ì¬ì© ê°ë¥í ë€ë¥ž middleware륌 ë³Žë €ë©Ž [Starletteì Middleware 묞ì](https://www.starlette.dev/middleware/)ì [ASGI Awesome List](https://github.com/florimondmanca/awesome-asgi)륌 íìžíìžì.
diff --git a/docs/ko/docs/advanced/openapi-callbacks.md b/docs/ko/docs/advanced/openapi-callbacks.md
index 95f90d73cc..fa71acdcf8 100644
--- a/docs/ko/docs/advanced/openapi-callbacks.md
+++ b/docs/ko/docs/advanced/openapi-callbacks.md
@@ -35,7 +35,7 @@
/// tip | í
-`callback_url` 쿌늬 íëŒë¯ží°ë Pydanticì
Url íì
ì ì¬ì©í©ëë€.
+`callback_url` 쿌늬 íëŒë¯ží°ë Pydanticì [Url](https://docs.pydantic.dev/latest/api/networks/) íì
ì ì¬ì©í©ëë€.
///
@@ -66,7 +66,7 @@ httpx.post(callback_url, json={"description": "Invoice paid", "paid": True})
ì€ì ìœë°±ì ëšì§ HTTP ìì²ì
ëë€.
-ìœë°±ì ì§ì 구íí ëë
HTTPXë
Requests ê°ì ê²ì ì¬ì©í ì ììµëë€.
+ìœë°±ì ì§ì 구íí ëë [HTTPX](https://www.python-httpx.org)ë [Requests](https://requests.readthedocs.io/) ê°ì ê²ì ì¬ì©í ì ììµëë€.
///
@@ -106,11 +106,11 @@ httpx.post(callback_url, json={"description": "Invoice paid", "paid": True})
ìŒë°ì ìž *ê²œë¡ ì²ëЬ*ìì 죌ì ì°šìŽì ì 2ê°ì§ì
ëë€:
* ì€ì ìœë륌 ê°ì§ íìê° ììµëë€. ì¬ë¬ë¶ì ì±ì ìŽ ìœë륌 ì ë ížì¶íì§ ìêž° ë묞ì
ëë€. ìŽë *external API*륌 묞ìííë ë°ë§ ì¬ì©ë©ëë€. ë°ëŒì íšìë ê·žë¥ `pass`ë§ ììŽë ë©ëë€.
-* *path*ìë
OpenAPI 3 expression(ììží ëŽì©ì ìë ì°žê³ )ìŽ í¬íšë ì ììŒë©°, ìŽë¥Œ íµíŽ *ì¬ë¬ë¶ì API*ë¡ ë³ŽëŽì§ ìë ìì²ì íëŒë¯ží°ì ìŒë¶ ê°ì ë³ìë¡ ì¬ì©í ì ììµëë€.
+* *path*ìë [OpenAPI 3 ííì](https://github.com/OAI/OpenAPI-Specification/blob/master/versions/3.1.0.md#key-expression)(ììží ëŽì©ì ìë ì°žê³ )ìŽ í¬íšë ì ììŒë©°, ìŽë¥Œ íµíŽ *ì¬ë¬ë¶ì API*ë¡ ë³ŽëŽì§ ìë ìì²ì íëŒë¯ží°ì ìŒë¶ ê°ì ë³ìë¡ ì¬ì©í ì ììµëë€.
### ìœë°± ê²œë¡ ííì { #the-callback-path-expression }
-ìœë°± *path*ë *ì¬ë¬ë¶ì API*ë¡ ë³ŽëŽì§ ìë ìì²ì ìŒë¶ë¥Œ í¬íší ì ìë
OpenAPI 3 expressionì ê°ì§ ì ììµëë€.
+ìœë°± *path*ë *ì¬ë¬ë¶ì API*ë¡ ë³ŽëŽì§ ìë ìì²ì ìŒë¶ë¥Œ í¬íší ì ìë [OpenAPI 3 ííì](https://github.com/OAI/OpenAPI-Specification/blob/master/versions/3.1.0.md#key-expression)ì ê°ì§ ì ììµëë€.
ìŽ ê²œì°, ë€ì `str`ì
ëë€:
@@ -179,7 +179,7 @@ https://www.external.org/events/invoices/2expen51ve
### 묞ì íìžíêž° { #check-the-docs }
-ìŽì ì±ì ì€ííê³
http://127.0.0.1:8000/docsë¡ ìŽëíìžì.
+ìŽì ì±ì ì€ííê³ [http://127.0.0.1:8000/docs](http://127.0.0.1:8000/docs)ë¡ ìŽëíìžì.
*ê²œë¡ ì²ëЬ*ì ëíŽ "Callbacks" ì¹ì
ì í¬íší 묞ìê° íìëë©°, *external API*ê° ìŽë€ ííì¬ìŒ íëì§ íìží ì ììµëë€:
diff --git a/docs/ko/docs/advanced/openapi-webhooks.md b/docs/ko/docs/advanced/openapi-webhooks.md
index 8651c4176c..e40a7bb186 100644
--- a/docs/ko/docs/advanced/openapi-webhooks.md
+++ b/docs/ko/docs/advanced/openapi-webhooks.md
@@ -48,7 +48,7 @@ webhookììë ì€ì ë¡(`/items/` ê°ì) *겜ë¡(path)*륌 ì ìžíì§ ì
### 묞ì íìžíêž° { #check-the-docs }
-ìŽì ì±ì ì€ííê³
http://127.0.0.1:8000/docsë¡ ìŽëíìžì.
+ìŽì ì±ì ì€ííê³ [http://127.0.0.1:8000/docs](http://127.0.0.1:8000/docs)ë¡ ìŽëíìžì.
묞ìì ìŒë°ì ìž *ê²œë¡ ì²ëЬ*ê° ë³ŽìŽê³ , ìŽì ë ìŒë¶ **webhooks**ë íšê» ë³ŽìŒ ê²ì
ëë€:
diff --git a/docs/ko/docs/advanced/path-operation-advanced-configuration.md b/docs/ko/docs/advanced/path-operation-advanced-configuration.md
index da8e43bd3e..253a6f3021 100644
--- a/docs/ko/docs/advanced/path-operation-advanced-configuration.md
+++ b/docs/ko/docs/advanced/path-operation-advanced-configuration.md
@@ -60,7 +60,7 @@ OpenAPIì ì¬ì©í *ê²œë¡ ì²ëЬ íšì*ì docstring ì€ ì륌 ì íí
몚ëž, ìí ìœë ë±ê³Œ íšê» ì¶ê° ìëµë ì ìží ì ììµëë€.
-ìŽì ëí 묞ìì ì 첎 ì¥ìŽ ììŒë, [OpenAPIì ì¶ê° ìëµ](additional-responses.md){.internal-link target=_blank}ìì ìœìŽë³Žìžì.
+ìŽì ëí 묞ìì ì 첎 ì¥ìŽ ììŒë, [OpenAPIì ì¶ê° ìëµ](additional-responses.md)ìì ìœìŽë³Žìžì.
## OpenAPI Extra { #openapi-extra }
@@ -68,7 +68,7 @@ OpenAPIì ì¬ì©í *ê²œë¡ ì²ëЬ íšì*ì docstring ì€ ì륌 ì íí
/// note | êž°ì ìžë¶ì¬í
-OpenAPI ëª
ìžììë ìŽë¥Œ
Operation ObjectëŒê³ ë¶ëŠ
ëë€.
+OpenAPI ëª
ìžììë ìŽë¥Œ [Operation Object](https://github.com/OAI/OpenAPI-Specification/blob/main/versions/3.0.3.md#operation-object)ëŒê³ ë¶ëŠ
ëë€.
///
@@ -82,7 +82,7 @@ OpenAPI ëª
ìžììë ìŽë¥Œ
Starletteì 묞ììì íìží ì ììµëë€.
+ì¬ì© ê°ë¥í 몚ë ë§€ê°ë³ìì ìµì
ì [Starletteì 묞ì](https://www.starlette.dev/responses/#set-cookie)ìì íìží ì ììµëë€.
diff --git a/docs/ko/docs/advanced/response-directly.md b/docs/ko/docs/advanced/response-directly.md
index c43b11a4d5..301a259b2f 100644
--- a/docs/ko/docs/advanced/response-directly.md
+++ b/docs/ko/docs/advanced/response-directly.md
@@ -2,19 +2,23 @@
**FastAPI**ìì *ê²œë¡ ì²ëЬ(path operation)*륌 ìì±í ë, ìŒë°ì ìŒë¡ `dict`, `list`, Pydantic 몚ëž, ë°ìŽí°ë² ìŽì€ ëªšëž ë±ì ë°ìŽí°ë¥Œ ë°íí ì ììµëë€.
-Ʞ볞ì ìŒë¡ **FastAPI**ë [JSON íží ê°ë¥ ìžìœë](../tutorial/encoder.md){.internal-link target=_blank}ì ì€ëª
ë `jsonable_encoder`륌 ì¬ì©íŽ íŽë¹ ë°í ê°ì ìëìŒë¡ JSONìŒë¡ ë³íí©ëë€.
+[ìëµ ëªšëž](../tutorial/response-model.md)ì ì ìží멎 FastAPIë Pydanticì ì¬ì©íŽ ë°ìŽí°ë¥Œ JSONìŒë¡ ì§ë ¬íí©ëë€.
-ê·žë° ë€ì, ëŽë¶ì ìŒë¡ë JSON íží ë°ìŽí°(ì: `dict`)륌 `JSONResponse`ì ë£ìŽ íŽëŒìŽìžížë¡ ìëµì ì ì¡íë ë° ì¬ì©í©ëë€.
+ìëµ ëªšëžì ì ìžíì§ ììŒë©Ž, FastAPIë [JSON íží ê°ë¥ ìžìœë](../tutorial/encoder.md)ì ì€ëª
ë `jsonable_encoder`륌 ì¬ì©íŽ ë°ìŽí°ë¥Œ ë³ííê³ ìŽë¥Œ `JSONResponse`ì ë£ìµëë€.
-íì§ë§ *ê²œë¡ ì²ëЬ*ìì `JSONResponse`륌 ì§ì ë°íí ìë ììµëë€.
+ëí `JSONResponse`륌 ì§ì ìì±íŽ ë°íí ìë ììµëë€.
-ì륌 ë€ìŽ, ì¬ì©ì ì ì í€ëë ì¿ í€ë¥Œ ë°ííŽìŒ íë 겜ì°ì ì ì©í ì ììµëë€.
+/// tip | í
+
+ìŒë°ì ìŒë¡ `JSONResponse`륌 ì§ì ë°ííë ê²ë³Žë€ [ìëµ ëªšëž](../tutorial/response-model.md)ì ì¬ì©íë ížìŽ ì±ë¥ìŽ íšì¬ ì¢ìµëë€. ìŽë ê² í멎 PydanticìŽ Rustìì ë°ìŽí°ë¥Œ ì§ë ¬íí©ëë€.
+
+///
## `Response` ë°ííêž° { #return-a-response }
-ì¬ì€, `Response` ëë ê·ž íì íŽëì€ë¥Œ ë°íí ì ììµëë€.
+`Response` ëë ê·ž íì íŽëì€ë¥Œ ë°íí ì ììµëë€.
-/// tip | í
+/// info | ì 볎
`JSONResponse` ì첎ë `Response`ì íì íŽëì€ì
ëë€.
@@ -26,6 +30,8 @@ Pydantic 몚ëžë¡ ë°ìŽí° ë³íì ìííì§ ììŒë©°, ëŽì©ì ë€ë¥ž
ìŽë¡ ìžíŽ ë§ì ì ì°ì±ì ì»ì ì ììµëë€. ìŽë€ ë°ìŽí° ì íìŽë ë°íí ì ìê³ , ë°ìŽí° ì ìžìŽë ì íšì± ê²ì¬ë¥Œ ì¬ì ìí ì ììµëë€.
+ëí ë§ì ì±
ìë ë°ëŠ
ëë€. ë°ííë ë°ìŽí°ê° ì¬ë°ë¥Žê³ , ì¬ë°ë¥ž íììŽë©°, ì§ë ¬íê° ê°ë¥íëë¡ ì¬ë¬ë¶ìŽ ì§ì 볎ì¥íŽìŒ í©ëë€.
+
## `Response`ìì `jsonable_encoder` ì¬ì©íêž° { #using-the-jsonable-encoder-in-a-response }
**FastAPI**ë ë°ííë `Response`ì ìë¬Žë° ë³ê²œë íì§ ììŒë¯ë¡, ê·ž ëŽì©ìŽ ì€ë¹ëìŽ ìëì§ íìžíŽìŒ í©ëë€.
@@ -50,16 +56,28 @@ Pydantic 몚ëžë¡ ë°ìŽí° ë³íì ìííì§ ììŒë©°, ëŽì©ì ë€ë¥ž
ìŽì , ìŽë¥Œ ì¬ì©íŽ ì¬ì©ì ì ì ìëµì ë°ííë ë°©ë²ì ììë³Žê² ìµëë€.
-ì륌 ë€ìŽ
XML ìëµì ë°ííê³ ì¶ë€ê³ ê°ì íŽ ë³Žê² ìµëë€.
+ì륌 ë€ìŽ [XML](https://en.wikipedia.org/wiki/XML) ìëµì ë°ííê³ ì¶ë€ê³ ê°ì íŽ ë³Žê² ìµëë€.
XML ëŽì©ì 묞ììŽì ë£ê³ , ìŽë¥Œ `Response`ì ë£ìŽ ë°íí ì ììµëë€:
{* ../../docs_src/response_directly/tutorial002_py310.py hl[1,18] *}
+## ìëµ ëªšëž ëì ë°©ì { #how-a-response-model-works }
+
+ê²œë¡ ì²ëЬìì [ìëµ ëªšëž - ë°í íì
](../tutorial/response-model.md)ì ì ìží멎 **FastAPI**ë Pydanticì ì¬ì©íŽ ë°ìŽí°ë¥Œ JSONìŒë¡ ì§ë ¬íí©ëë€.
+
+{* ../../docs_src/response_model/tutorial001_01_py310.py hl[16,21] *}
+
+ìŽë Rust ìž¡ìì ì²ëЬëë¯ë¡, ìŒë°ì ìž Python곌 `JSONResponse` íŽëì€ë¡ ìííë ê²ë³Žë€ ì±ë¥ìŽ íšì¬ ì¢ìµëë€.
+
+`response_model` ëë ë°í íì
ì ì¬ì©í ë FastAPIë `jsonable_encoder`ë¡ ë°ìŽí°ë¥Œ ë³í(ìŽë ë ë늜ëë€)íì§ë ìê³ , `JSONResponse` íŽëì€ë¥Œ ì¬ì©íì§ë ììµëë€.
+
+ëì ìëµ ëªšëž(ëë ë°í íì
)ì ì¬ì©íŽ PydanticìŽ ìì±í JSON ë°ìŽížë¥Œ ê°ì žì, JSONì ë§ë 믞ëìŽ íì
(`application/json`)ì ê°ì§ `Response`륌 ì§ì ë°íí©ëë€.
+
## ì°žê³ ì¬í { #notes }
`Response`륌 ì§ì ë°íí ë, ê·ž ë°ìŽí°ë ìëìŒë¡ ì íšì± ê²ì¬ëê±°ë, ë³í(ì§ë ¬í)ëê±°ë, 묞ìíëì§ ììµëë€.
-ê·žë¬ë [OpenAPIìì ì¶ê° ìëµ](additional-responses.md){.internal-link target=_blank}ìì ì€ëª
ë ëë¡ ë¬žìíí ì ììµëë€.
+ê·žë¬ë [OpenAPIìì ì¶ê° ìëµ](additional-responses.md)ìì ì€ëª
ë ëë¡ ë¬žìíí ì ììµëë€.
ìŽí ì¹ì
ìì ìë ë°ìŽí° ë³í, 묞ìí ë±ì ê³ì ì¬ì©í멎ì ìŽë¬í ì¬ì©ì ì ì `Response`륌 ì¬ì©íë/ì ìžíë ë°©ë²ì íìží ì ììµëë€.
diff --git a/docs/ko/docs/advanced/response-headers.md b/docs/ko/docs/advanced/response-headers.md
index a4cb287fec..e7157d8f48 100644
--- a/docs/ko/docs/advanced/response-headers.md
+++ b/docs/ko/docs/advanced/response-headers.md
@@ -20,7 +20,7 @@
`Response`륌 ì§ì ë°íí ëìë í€ë륌 ì¶ê°í ì ììµëë€.
-[ìëµì ì§ì ë°ííêž°](response-directly.md){.internal-link target=_blank}ìì ì€ëª
í ëë¡ ìëµì ìì±íê³ , í€ë륌 ì¶ê° ë§€ê°ë³ìë¡ ì ë¬íìžì:
+[ìëµì ì§ì ë°ííêž°](response-directly.md)ì ì€ëª
í ëë¡ ìëµì ìì±íê³ , í€ë륌 ì¶ê° ë§€ê°ë³ìë¡ ì ë¬íìžì:
{* ../../docs_src/response_headers/tutorial001_py310.py hl[10:12] *}
@@ -36,6 +36,6 @@
## 컀ì€í
í€ë { #custom-headers }
-
`X-` ì ëìŽë¥Œ ì¬ì©íì¬ ì»€ì€í
ì¬ì€ í€ë륌 ì¶ê°í ì ìë€ë ì ì êž°ìµíìžì.
+컀ì€í
ì¬ì€ í€ëë [`X-` ì ëìŽë¥Œ ì¬ì©íì¬](https://developer.mozilla.org/en-US/docs/Web/HTTP/Headers) ì¶ê°í ì ìë€ë ì ì êž°ìµíìžì.
-íì§ë§, ì¬ë¬ë¶ìŽ ëžëŒì°ì ìì íŽëŒìŽìžížê° 볌 ì ìꞰ륌 ìíë 컀ì€í
í€ëê° ìë 겜ì°, CORS ì€ì ì ìŽë¥Œ ì¶ê°íŽìŒ í©ëë€([CORS (Cross-Origin Resource Sharing)](../tutorial/cors.md){.internal-link target=_blank}ìì ììží ìì볎ìžì).
Starletteì CORS 묞ìì 묞ìíë `expose_headers` ë§€ê°ë³ì륌 ì¬ì©íìžì.
+íì§ë§, ì¬ë¬ë¶ìŽ ëžëŒì°ì ìì íŽëŒìŽìžížê° 볌 ì ìꞰ륌 ìíë 컀ì€í
í€ëê° ìë 겜ì°, CORS ì€ì ì ìŽë¥Œ ì¶ê°íŽìŒ í©ëë€([CORS (Cross-Origin Resource Sharing)](../tutorial/cors.md)ìì ììží ìì볎ìžì). [Starletteì CORS 묞ì](https://www.starlette.dev/middleware/#corsmiddleware)ì 묞ìíë `expose_headers` ë§€ê°ë³ì륌 ì¬ì©íìžì.
diff --git a/docs/ko/docs/advanced/security/http-basic-auth.md b/docs/ko/docs/advanced/security/http-basic-auth.md
index 5b50c65fda..273b802050 100644
--- a/docs/ko/docs/advanced/security/http-basic-auth.md
+++ b/docs/ko/docs/advanced/security/http-basic-auth.md
@@ -32,7 +32,7 @@ HTTP Basic Authììë ì í늬ìŒìŽì
ìŽ ì¬ì©ìëª
곌 ë¹ë°ë²ížê°
dependency륌 ì¬ì©íŽ ì¬ì©ìëª
곌 ë¹ë°ë²ížê° ì¬ë°ë¥žì§ íìžíìžì.
-ìŽë¥Œ ìíŽ Python íì€ ëªšë
`secrets`륌 ì¬ì©íŽ ì¬ì©ìëª
곌 ë¹ë°ë²ížë¥Œ íìží©ëë€.
+ìŽë¥Œ ìíŽ Python íì€ ëªšë [`secrets`](https://docs.python.org/3/library/secrets.html)륌 ì¬ì©íŽ ì¬ì©ìëª
곌 ë¹ë°ë²ížë¥Œ íìží©ëë€.
`secrets.compare_digest()`ë `bytes` ëë ASCII 묞ì(ììŽìì ì¬ì©íë 묞ì)ë§ í¬íší `str`ì ë°ììŒ í©ëë€. ìŠ, `Sebastián`ì `á` ê°ì 묞ìê° ììŒë©Ž ëìíì§ ììµëë€.
@@ -52,7 +52,7 @@ if not (credentials.username == "stanleyjobson") or not (credentials.password ==
íì§ë§ `secrets.compare_digest()`륌 ì¬ì©í멎 "timing attacks"ëŒê³ ë¶ëЬë í ì íì 공격ì ëíŽ ìì íŽì§ëë€.
-### Timing Attacks { #timing-attacks }
+### íìŽë° 공격 { #timing-attacks }
ê·žë ë€ë©Ž "timing attack"ìŽë 묎ììŒê¹ì?
diff --git a/docs/ko/docs/advanced/security/index.md b/docs/ko/docs/advanced/security/index.md
index 4c7abfacc7..126e6524a3 100644
--- a/docs/ko/docs/advanced/security/index.md
+++ b/docs/ko/docs/advanced/security/index.md
@@ -2,7 +2,7 @@
## ì¶ê° êž°ë¥ { #additional-features }
-[íí ëŠ¬ìŒ - ì¬ì©ì ê°ìŽë: 볎ì](../../tutorial/security/index.md){.internal-link target=_blank}ìì ë€ë£¬ ëŽì© ìžìë, 볎ìì ì²ëЬíêž° ìí ëª ê°ì§ ì¶ê° êž°ë¥ìŽ ììµëë€.
+[íí ëŠ¬ìŒ - ì¬ì©ì ê°ìŽë: 볎ì](../../tutorial/security/index.md)ìì ë€ë£¬ ëŽì© ìžìë, 볎ìì ì²ëЬíêž° ìí ëª ê°ì§ ì¶ê° êž°ë¥ìŽ ììµëë€.
/// tip | í
@@ -14,6 +14,6 @@
## 뚌ì íí ëŠ¬ìŒ ìœêž° { #read-the-tutorial-first }
-ë€ì ì¹ì
ì 죌ì [íí ëŠ¬ìŒ - ì¬ì©ì ê°ìŽë: 볎ì](../../tutorial/security/index.md){.internal-link target=_blank}ì ìŽë¯ž ìœìë€ê³ ê°ì í©ëë€.
+ë€ì ì¹ì
ì 죌ì [íí ëŠ¬ìŒ - ì¬ì©ì ê°ìŽë: 볎ì](../../tutorial/security/index.md)ì ìŽë¯ž ìœìë€ê³ ê°ì í©ëë€.
몚ë ëìŒí ê°ë
ì êž°ë°ìŒë¡ íì§ë§, ëª ê°ì§ ì¶ê° êž°ë¥ì ì¬ì©í ì ìê² íŽì€ëë€.
diff --git a/docs/ko/docs/advanced/security/oauth2-scopes.md b/docs/ko/docs/advanced/security/oauth2-scopes.md
index 0f90f92ae9..5a785ff9fd 100644
--- a/docs/ko/docs/advanced/security/oauth2-scopes.md
+++ b/docs/ko/docs/advanced/security/oauth2-scopes.md
@@ -60,7 +60,7 @@ OAuth2 ì
ì¥ììë ê·žì 묞ììŽì
ëë€.
## ì 첎 ê°ì { #global-view }
-뚌ì , ë©ìž **íí ëŠ¬ìŒ - ì¬ì©ì ê°ìŽë**ì [ë¹ë°ë²íž(ë° íŽì±)륌 ì¬ì©íë OAuth2, JWT í í°ì ì¬ì©íë Bearer](../../tutorial/security/oauth2-jwt.md){.internal-link target=_blank} ìì ìì ìŽë€ ë¶ë¶ìŽ ë°ëëì§ ë¹ ë¥Žê² ìŽíŽë³Žê² ìµëë€. ìŽì OAuth2 ì€ìœí륌 ì¬ì©í©ëë€:
+뚌ì , ë©ìž **íí ëŠ¬ìŒ - ì¬ì©ì ê°ìŽë**ì [ë¹ë°ë²íž(ë° íŽì±)륌 ì¬ì©íë OAuth2, JWT í í°ì ì¬ì©íë Bearer](../../tutorial/security/oauth2-jwt.md) ìì ìì ìŽë€ ë¶ë¶ìŽ ë°ëëì§ ë¹ ë¥Žê² ìŽíŽë³Žê² ìµëë€. ìŽì OAuth2 ì€ìœí륌 ì¬ì©í©ëë€:
{* ../../docs_src/security/tutorial005_an_py310.py hl[5,9,13,47,65,106,108:116,122:126,130:136,141,157] *}
@@ -271,4 +271,4 @@ API 묞ì륌 ìŽë©Ž, ìžìŠíê³ ìžê°í ì€ìœí륌 ì§ì í ì ììµ
## ë°ìœë ìŽí° `dependencies`ììì `Security` { #security-in-decorator-dependencies }
-[ê²œë¡ ì²ëЬ ë°ìœë ìŽí°ì ì졎ì±](../../tutorial/dependencies/dependencies-in-path-operation-decorators.md){.internal-link target=_blank}ìì ì€ëª
í ê²ì²ëŒ ë°ìœë ìŽí°ì `dependencies` ë§€ê°ë³ìì `Depends`ì `list`륌 ì ìí ì ìë ê²ê³Œ ê°ì ë°©ììŒë¡, ê±°êž°ìì `scopes`ì íšê» `Security`륌 ì¬ì©í ìë ììµëë€.
+[ê²œë¡ ì²ëЬ ë°ìœë ìŽí°ì ì졎ì±](../../tutorial/dependencies/dependencies-in-path-operation-decorators.md)ìì ì€ëª
í ê²ì²ëŒ ë°ìœë ìŽí°ì `dependencies` ë§€ê°ë³ìì `Depends`ì `list`륌 ì ìí ì ìë ê²ê³Œ ê°ì ë°©ììŒë¡, ê±°êž°ìì `scopes`ì íšê» `Security`륌 ì¬ì©í ìë ììµëë€.
diff --git a/docs/ko/docs/advanced/settings.md b/docs/ko/docs/advanced/settings.md
index f53006bfba..49a2b640e9 100644
--- a/docs/ko/docs/advanced/settings.md
+++ b/docs/ko/docs/advanced/settings.md
@@ -8,7 +8,7 @@
/// tip | í
-í겜 ë³ì륌 ìŽíŽíë €ë©Ž [í겜 ë³ì](../environment-variables.md){.internal-link target=_blank}륌 ìœìŽë³Žìžì.
+í겜 ë³ì륌 ìŽíŽíë €ë©Ž [í겜 ë³ì](../environment-variables.md)륌 ìœìŽë³Žìžì.
///
@@ -20,11 +20,11 @@
## Pydantic `Settings` { #pydantic-settings }
-ë€íí Pydanticì
Pydantic: Settings management륌 íµíŽ í겜 ë³ììì ì€ë ìŽë¬í ì€ì ì ì²ëЬí ì ìë íë¥í ì ížëЬí°ë¥Œ ì ê³µí©ëë€.
+ë€íí Pydanticì í겜 ë³ììì ì€ë ìŽë¬í ì€ì ì ì²ëЬí ì ìë íë¥í ì ížëЬí°ë¥Œ [Pydantic: Settings êŽëЬ](https://docs.pydantic.dev/latest/concepts/pydantic_settings/)ë¡ ì ê³µí©ëë€.
### `pydantic-settings` ì€ì¹íêž° { #install-pydantic-settings }
-뚌ì [ê°ì í겜](../virtual-environments.md){.internal-link target=_blank}ì ë§ë€ê³ íì±íí ë€ì, `pydantic-settings` íší€ì§ë¥Œ ì€ì¹íìžì:
+뚌ì [ê°ì í겜](../virtual-environments.md)ì ë§ë€ê³ íì±íí ë€ì, `pydantic-settings` íší€ì§ë¥Œ ì€ì¹íìžì:
@@ -100,7 +100,7 @@ $ ADMIN_EMAIL="deadpool@example.com" APP_NAME="ChimichangApp" fastapi run main.p
## ë€ë¥ž 몚ëì ì€ì { #settings-in-another-module }
-[Bigger Applications - Multiple Files](../tutorial/bigger-applications.md){.internal-link target=_blank}ìì 볞 ê²ì²ëŒ, ì€ì ì ë€ë¥ž 몚ë íìŒì ë£ì ìë ììµëë€.
+[ë í° ì í늬ìŒìŽì
- ì¬ë¬ íìŒ](../tutorial/bigger-applications.md)ìì 볞 ê²ì²ëŒ, ì€ì ì ë€ë¥ž 몚ë íìŒì ë£ì ìë ììµëë€.
ì륌 ë€ìŽ `config.py` íìŒì ë€ìì²ëŒ ë§ë€ ì ììµëë€:
@@ -112,7 +112,7 @@ $ ADMIN_EMAIL="deadpool@example.com" APP_NAME="ChimichangApp" fastapi run main.p
/// tip | í
-[Bigger Applications - Multiple Files](../tutorial/bigger-applications.md){.internal-link target=_blank}ìì 볞 ê²ì²ëŒ `__init__.py` íìŒë íìí©ëë€.
+[ë í° ì í늬ìŒìŽì
- ì¬ë¬ íìŒ](../tutorial/bigger-applications.md)ìì 볞 ê²ì²ëŒ `__init__.py` íìŒë íìí©ëë€.
///
@@ -172,7 +172,7 @@ $ ADMIN_EMAIL="deadpool@example.com" APP_NAME="ChimichangApp" fastapi run main.p
///
-Pydanticì ìžë¶ ëŒìŽëžë¬ëŠ¬ë¥Œ ì¬ì©íŽ ìŽë° ì íì íìŒìì ìœë êž°ë¥ì ì§ìí©ëë€. ììží ëŽì©ì
Pydantic Settings: Dotenv (.env) support륌 ì°žê³ íìžì.
+Pydanticì ìžë¶ ëŒìŽëžë¬ëŠ¬ë¥Œ ì¬ì©íŽ ìŽë° ì íì íìŒìì ìœë êž°ë¥ì ì§ìí©ëë€. ììží ëŽì©ì [Pydantic Settings: Dotenv (.env) ì§ì](https://docs.pydantic.dev/latest/concepts/pydantic_settings/#dotenv-env-support)ì ì°žê³ íìžì.
/// tip | í
@@ -197,7 +197,7 @@ APP_NAME="ChimichangApp"
/// tip | í
-`model_config` ìì±ì Pydantic ì€ì ì ìí ê²ì
ëë€. ììží ëŽì©ì
Pydantic: Concepts: Configuration륌 ì°žê³ íìžì.
+`model_config` ìì±ì Pydantic ì€ì ì ìí ê²ì
ëë€. ììží ëŽì©ì [Pydantic: ê°ë
: 구ì±](https://docs.pydantic.dev/latest/concepts/config/)ì ì°žê³ íìžì.
///
@@ -291,7 +291,7 @@ participant execute as Execute function
ìŽë ê² í멎 ê±°ì ì ì ë³ìì²ëŒ ëìí©ëë€. íì§ë§ ìì¡Žì± íšì륌 ì¬ì©íë¯ë¡ í
ì€ížë¥Œ ìíŽ ìœê² overrideí ì ììµëë€.
-`@lru_cache`ë Python íì€ ëŒìŽëžë¬ëЬì `functools`ì í¬íšëìŽ ììŒë©°, ììží ëŽì©ì
`@lru_cache`ì ëí Python 묞ììì íìží ì ììµëë€.
+`@lru_cache`ë Python íì€ ëŒìŽëžë¬ëЬì `functools`ì í¬íšëìŽ ììŒë©°, ììží ëŽì©ì [`@lru_cache`ì ëí Python 묞ì](https://docs.python.org/3/library/functools.html#functools.lru_cache)ìì íìží ì ììµëë€.
## ì 늬 { #recap }
diff --git a/docs/ko/docs/advanced/sub-applications.md b/docs/ko/docs/advanced/sub-applications.md
index 8da217aab6..b592c0a39d 100644
--- a/docs/ko/docs/advanced/sub-applications.md
+++ b/docs/ko/docs/advanced/sub-applications.md
@@ -1,10 +1,10 @@
-# íì ìì©íë¡ê·žëš - ë§ìŽíž { #sub-applications-mounts }
+# íì ì í늬ìŒìŽì
- ë§ìŽíž { #sub-applications-mounts }
-ê°ê°ì ë
늜ì ìž OpenAPIì 묞ì UI륌 ê°ë ë ê°ì ë
늜ì ìž FastAPI ì í늬ìŒìŽì
ìŽ íìíë€ë©Ž, ë©ìž ì±ì ëê³ íë(ëë ê·ž ìŽì)ì íì ìì©íë¡ê·žëšì "ë§ìŽíž"í ì ììµëë€.
+ê°ê°ì ë
늜ì ìž OpenAPIì 묞ì UI륌 ê°ë ë ê°ì ë
늜ì ìž FastAPI ì í늬ìŒìŽì
ìŽ íìíë€ë©Ž, ë©ìž ì±ì ëê³ íë(ëë ê·ž ìŽì)ì íì ì í늬ìŒìŽì
ì "ë§ìŽíž"í ì ììµëë€.
## **FastAPI** ì í늬ìŒìŽì
ë§ìŽíž { #mounting-a-fastapi-application }
-"ë§ìŽíž"ë ìì í "ë
늜ì ìž" ì í늬ìŒìŽì
ì í¹ì 겜ë¡ì ì¶ê°íê³ , ê·ž íì ìì©íë¡ê·žëšì ì ìžë _ê²œë¡ ì²ëЬ_ë¡ íŽë¹ ê²œë¡ ìëì 몚ë ê²ì ì²ëЬíëë¡ íë ê²ì ì믞í©ëë€.
+"ë§ìŽíž"ë ìì í "ë
늜ì ìž" ì í늬ìŒìŽì
ì í¹ì 겜ë¡ì ì¶ê°íê³ , ê·ž íì ì í늬ìŒìŽì
ì ì ìžë _ê²œë¡ ì²ëЬ_ë¡ íŽë¹ ê²œë¡ ìëì 몚ë ê²ì ì²ëЬíëë¡ íë ê²ì ì믞í©ëë€.
### ìµìì ì í늬ìŒìŽì
{ #top-level-application }
@@ -12,17 +12,17 @@
{* ../../docs_src/sub_applications/tutorial001_py310.py hl[3, 6:8] *}
-### íì ìì©íë¡ê·žëš { #sub-application }
+### íì ì í늬ìŒìŽì
{ #sub-application }
-ê·ž ë€ì, íì ìì©íë¡ê·žëšê³Œ ê·ž *ê²œë¡ ì²ëЬ*륌 ìì±í©ëë€.
+ê·ž ë€ì, íì ì í늬ìŒìŽì
곌 ê·ž *ê²œë¡ ì²ëЬ*륌 ìì±í©ëë€.
-ìŽ íì ìì©íë¡ê·žëšì ë ë€ë¥ž íì€ FastAPI ì í늬ìŒìŽì
ìŽì§ë§, "ë§ìŽíž"ë ì í늬ìŒìŽì
ì
ëë€:
+ìŽ íì ì í늬ìŒìŽì
ì ë ë€ë¥ž íì€ FastAPI ì í늬ìŒìŽì
ìŽì§ë§, "ë§ìŽíž"ë ì í늬ìŒìŽì
ì
ëë€:
{* ../../docs_src/sub_applications/tutorial001_py310.py hl[11, 14:16] *}
-### íì ìì©íë¡ê·žëš ë§ìŽíž { #mount-the-sub-application }
+### íì ì í늬ìŒìŽì
ë§ìŽíž { #mount-the-sub-application }
-ìµìì ì í늬ìŒìŽì
`app`ìì íì ìì©íë¡ê·žëš `subapi`륌 ë§ìŽíží©ëë€.
+ìµìì ì í늬ìŒìŽì
`app`ìì íì ì í늬ìŒìŽì
`subapi`륌 ë§ìŽíží©ëë€.
ìŽ ê²œì° `/subapi` 겜ë¡ì ë§ìŽížë©ëë€:
@@ -30,27 +30,27 @@
### ìë API 묞ì íìž { #check-the-automatic-api-docs }
-ìŽì íìŒê³Œ íšê» `fastapi` ëª
ë ¹ì ì€ííìžì:
+ìŽì `fastapi` ëª
ë ¹ìŽë¥Œ ì€ííìžì:
```console
-$ fastapi dev main.py
+$ fastapi dev
INFO: Uvicorn running on http://127.0.0.1:8000 (Press CTRL+C to quit)
```
-귞늬ê³
http://127.0.0.1:8000/docsìì 묞ì륌 ì¬ìžì.
+ê·žëŠ¬ê³ [http://127.0.0.1:8000/docs](http://127.0.0.1:8000/docs)ìì 묞ì륌 ì¬ìžì.
ë©ìž ì±ì ìë API 묞ì륌 ë³Žê² ë ê²ìŽë©°, ë©ìž ì± ì첎ì _ê²œë¡ ì²ëЬ_ë§ í¬íšë©ëë€:

-ê·ž ë€ì,
http://127.0.0.1:8000/subapi/docsìì íì ìì©íë¡ê·žëšì 묞ì륌 ì¬ìžì.
+ê·ž ë€ì, [http://127.0.0.1:8000/subapi/docs](http://127.0.0.1:8000/subapi/docs)ìì íì ì í늬ìŒìŽì
ì 묞ì륌 ì¬ìžì.
-íì ìì©íë¡ê·žëšì ìë API 묞ì륌 ë³Žê² ë ê²ìŽë©°, íì ê²œë¡ ì ëì¬ `/subapi` ìëì ì¬ë°ë¥Žê² í¬íšë íì ìì©íë¡ê·žëš ì첎ì _ê²œë¡ ì²ëЬ_ë§ í¬íšë©ëë€:
+íì ì í늬ìŒìŽì
ì ìë API 묞ì륌 ë³Žê² ë ê²ìŽë©°, íì ê²œë¡ ì ëì¬ `/subapi` ìëì ì¬ë°ë¥Žê² í¬íšë íì ì í늬ìŒìŽì
ì첎ì _ê²œë¡ ì²ëЬ_ë§ í¬íšë©ëë€:

@@ -58,10 +58,10 @@ $ fastapi dev main.py
### êž°ì ì ìžë¶ì¬í: `root_path` { #technical-details-root-path }
-ììì ì€ëª
í ëë¡ íì ìì©íë¡ê·žëšì ë§ìŽíží멎, FastAPIë ASGI ëª
ìžì ë©ì»€ëìŠìž `root_path`륌 ì¬ì©íŽ íì ìì©íë¡ê·žëšì ëí ë§ìŽíž 겜ë¡ë¥Œ ì ë¬íë ìì
ì ì²ëЬí©ëë€.
+ììì ì€ëª
í ëë¡ íì ì í늬ìŒìŽì
ì ë§ìŽíží멎, FastAPIë ASGI ëª
ìžì ë©ì»€ëìŠìž `root_path`륌 ì¬ì©íŽ íì ì í늬ìŒìŽì
ì ëí ë§ìŽíž 겜ë¡ë¥Œ ì ë¬íë ìì
ì ì²ëЬí©ëë€.
-ìŽë ê² í멎 íì ìì©íë¡ê·žëšì 묞ì UI륌 ìíŽ íŽë¹ ê²œë¡ ì ëì¬ë¥Œ ì¬ì©íŽìŒ íë€ë ê²ì ìê² ë©ëë€.
+ìŽë ê² í멎 íì ì í늬ìŒìŽì
ì 묞ì UI륌 ìíŽ íŽë¹ ê²œë¡ ì ëì¬ë¥Œ ì¬ì©íŽìŒ íë€ë ê²ì ìê² ë©ëë€.
-ëí íì ìì©íë¡ê·žëšë ì첎ì ìŒë¡ íì ì±ì ë§ìŽíží ì ììŒë©°, FastAPIê° ìŽ ëªšë `root_path`륌 ìëìŒë¡ ì²ëЬíêž° ë묞ì 몚ë ê²ìŽ ì¬ë°ë¥Žê² ëìí©ëë€.
+ëí íì ì í늬ìŒìŽì
ë ì첎ì ìŒë¡ íì ì±ì ë§ìŽíží ì ììŒë©°, FastAPIê° ìŽ ëªšë `root_path`륌 ìëìŒë¡ ì²ëЬíêž° ë묞ì 몚ë ê²ìŽ ì¬ë°ë¥Žê² ëìí©ëë€.
-`root_path`ì ìŽë¥Œ ëª
ìì ìŒë¡ ì¬ì©íë ë°©ë²ì ëíŽìë [íë¡ì ë€](behind-a-proxy.md){.internal-link target=_blank} ì¹ì
ìì ë ìì볌 ì ììµëë€.
+`root_path`ì ìŽë¥Œ ëª
ìì ìŒë¡ ì¬ì©íë ë°©ë²ì ëíŽìë [íë¡ì ë€](behind-a-proxy.md) ì¹ì
ìì ë ìì볌 ì ììµëë€.
diff --git a/docs/ko/docs/advanced/templates.md b/docs/ko/docs/advanced/templates.md
index 3ae718f153..9c33f37e91 100644
--- a/docs/ko/docs/advanced/templates.md
+++ b/docs/ko/docs/advanced/templates.md
@@ -8,7 +8,7 @@
## ìì¡Žì± ì€ì¹ { #install-dependencies }
-[ê°ì í겜](../virtual-environments.md){.internal-link target=_blank}ì ìì±íê³ , íì±íí í `jinja2`륌 ì€ì¹íŽìŒ í©ëë€:
+[ê°ì í겜](../virtual-environments.md)ì ìì±íê³ , íì±íí í `jinja2`륌 ì€ì¹íŽìŒ í©ëë€:
@@ -123,4 +123,4 @@ Item ID: 42
## ë ë§ì ìžë¶ ì¬í { #more-details }
-í
í늿 í
ì€ížë¥Œ í¬íší ë ë§ì ìžë¶ ì¬íì
Starletteì í
í늿 묞ì륌 íìžíìžì.
+í
í늿 í
ì€ížë¥Œ í¬íší ë ë§ì ìžë¶ ì¬íì [Starletteì í
í늿 묞ì](https://www.starlette.dev/templates/)륌 íìžíìžì.
diff --git a/docs/ko/docs/advanced/testing-websockets.md b/docs/ko/docs/advanced/testing-websockets.md
index 23ff34cd3a..28f131c2d1 100644
--- a/docs/ko/docs/advanced/testing-websockets.md
+++ b/docs/ko/docs/advanced/testing-websockets.md
@@ -6,8 +6,8 @@
{* ../../docs_src/app_testing/tutorial002_py310.py hl[27:31] *}
-/// note | ì°žê³
+/// note
-ììží ëŽì©ì Starletteì
WebSocket í
ì€íž 묞ì륌 íìžíìžì.
+ììží ëŽì©ì Starletteì [WebSocket í
ì€íž](https://www.starlette.dev/testclient/#testing-websocket-sessions) 묞ì륌 íìžíìžì.
///
diff --git a/docs/ko/docs/advanced/using-request-directly.md b/docs/ko/docs/advanced/using-request-directly.md
index 0c45e2e2f8..7456d2a79c 100644
--- a/docs/ko/docs/advanced/using-request-directly.md
+++ b/docs/ko/docs/advanced/using-request-directly.md
@@ -15,7 +15,7 @@
## `Request` ê°ì²Žì ëí ìžë¶ ì¬í { #details-about-the-request-object }
-**FastAPI**ë ì€ì ë¡ ëŽë¶ì **Starlette**ì ì¬ì©íë©°, ê·ž ìì ì¬ë¬ ë구륌 ë§ë¶ìž 구조ì
ëë€. ë°ëŒì ì¬ë¬ë¶ìŽ íìí ë Starletteì
`Request` ê°ì²Žë¥Œ ì§ì ì¬ì©í ì ììµëë€.
+**FastAPI**ë ì€ì ë¡ ëŽë¶ì **Starlette**ì ì¬ì©íë©°, ê·ž ìì ì¬ë¬ ë구륌 ë§ë¶ìž 구조ì
ëë€. ë°ëŒì ì¬ë¬ë¶ìŽ íìí ë Starletteì [`Request`](https://www.starlette.dev/requests/) ê°ì²Žë¥Œ ì§ì ì¬ì©í ì ììµëë€.
ëí ìŽë `Request` ê°ì²Žìì ë°ìŽí°ë¥Œ ì§ì ê°ì žì€ë 겜ì°(ì: 볞묞ì ìœêž°) FastAPIê° íŽë¹ ë°ìŽí°ë¥Œ ê²ìŠíê±°ë ë³ííì§ ììŒë©°, 묞ìí(OpenAPI륌 íµí ìë API ì¬ì©ì ìží°íìŽì€ì©)ë ëì§ ìëë€ë ì믞ìŽêž°ë í©ëë€.
@@ -45,7 +45,7 @@
## `Request` ì€ëª
ì { #request-documentation }
-ì¬ë¬ë¶ì
ê³µì Starlette ì€ëª
ì ì¬ìŽížì `Request` ê°ì²Žì ëí ë ììží ëŽì©ì ìœìŽë³Œ ì ììµëë€.
+ì¬ë¬ë¶ì [`Request` ê°ì²Žì ëí ê³µì Starlette ì€ëª
ì ì¬ìŽíž](https://www.starlette.dev/requests/)ì ëí ë ììží ëŽì©ì ìœìŽë³Œ ì ììµëë€.
/// note | êž°ì ìžë¶ì¬í
diff --git a/docs/ko/docs/advanced/websockets.md b/docs/ko/docs/advanced/websockets.md
index cb59097f6e..0b920c3b38 100644
--- a/docs/ko/docs/advanced/websockets.md
+++ b/docs/ko/docs/advanced/websockets.md
@@ -1,10 +1,10 @@
# WebSockets { #websockets }
-ì¬ë¬ë¶ì **FastAPI**ìì
WebSockets륌 ì¬ì©í ì ììµëë€.
+ì¬ë¬ë¶ì **FastAPI**ìì [WebSockets](https://developer.mozilla.org/en-US/docs/Web/API/WebSockets_API)륌 ì¬ì©í ì ììµëë€.
## `websockets` ì€ì¹ { #install-websockets }
-[ê°ì í겜](../virtual-environments.md){.internal-link target=_blank}ì ìì±íê³ íì±íí ë€ì, `websockets`("WebSocket" íë¡í ìœì ìœê² ì¬ì©í ì ìê² íŽì£Œë Python ëŒìŽëžë¬ëЬ)륌 ì€ì¹íìžì:
+[ê°ì í겜](../virtual-environments.md)ì ìì±íê³ íì±íí ë€ì, `websockets`("WebSocket" íë¡í ìœì ìœê² ì¬ì©í ì ìê² íŽì£Œë Python ëŒìŽëžë¬ëЬ)륌 ì€ì¹íìžì:
@@ -64,19 +64,19 @@ WebSocket 겜ë¡ìì ë©ìì§ë¥Œ ëêž°(`await`)íê³ ì ì¡í ì ììµ
## ìëíŽë³Žêž° { #try-it }
-íìŒ ìŽëŠìŽ `main.py`ëŒê³ ê°ì íê³ ë€ììŒë¡ ì í늬ìŒìŽì
ì ì€íí©ëë€:
+ìœë륌 `main.py` íìŒì ë£ê³ ì í늬ìŒìŽì
ì ì€íí©ëë€:
```console
-$ fastapi dev main.py
+$ fastapi dev
INFO: Uvicorn running on http://127.0.0.1:8000 (Press CTRL+C to quit)
```
-ëžëŒì°ì ìì
http://127.0.0.1:8000ì ì¬ìžì.
+ëžëŒì°ì ìì [http://127.0.0.1:8000](http://127.0.0.1:8000)ì ì¬ìžì.
ê°ëší íìŽì§ê° ëíë ê²ì
ëë€:
@@ -115,25 +115,25 @@ WebSocket ìëí¬ìžížìì `fastapi`ìì ë€ìì ê°ì žì ì¬ì©í
WebSocketìŽêž° ë묞ì `HTTPException`ì ë°ììí€ë ê²ì ì ì íì§ ììµëë€. ëì `WebSocketException`ì ë°ììíµëë€.
-ëª
ìžìì ì ìë
ì íší ìœë륌 ì¬ì©íì¬ ì¢
ë£ ìœë륌 ì€ì í ì ììµëë€.
+ëª
ìžìì ì ìë [ì íší ìœë](https://tools.ietf.org/html/rfc6455#section-7.4.1)륌 ì¬ì©íì¬ ì¢
ë£ ìœë륌 ì€ì í ì ììµëë€.
///
### ì¢
ìì±ì ê°ì§ WebSockets ìëíŽë³Žêž° { #try-the-websockets-with-dependencies }
-íìŒ ìŽëŠìŽ `main.py`ëŒê³ ê°ì íê³ ë€ììŒë¡ ì í늬ìŒìŽì
ì ì€íí©ëë€:
+ì í늬ìŒìŽì
ì ì€íí©ëë€:
```console
-$ fastapi dev main.py
+$ fastapi dev
INFO: Uvicorn running on http://127.0.0.1:8000 (Press CTRL+C to quit)
```
-ëžëŒì°ì ìì
http://127.0.0.1:8000ì ì¬ìžì.
+ëžëŒì°ì ìì [http://127.0.0.1:8000](http://127.0.0.1:8000)ì ì¬ìžì.
ì¬êž°ìì ë€ìì ì€ì í ì ììµëë€:
@@ -174,7 +174,7 @@ Client #1596980209979 left the chat
íì§ë§ 몚ë ê²ì ë©ëªšëЬì ëšìŒ 늬ì€ížë¡ ì²ëЬíë¯ë¡, íë¡ìžì€ê° ì€í ì€ìž ëìë§ ëìíë©° ëšìŒ íë¡ìžì€ììë§ ìëíë€ë ì ì êž°ìµíìžì.
-FastAPIì ìœê² íµí©í ì ììŒë©Žì ë ê²¬ê³ íê³ Redis, PostgreSQL ë±ì ì§ìíë ëêµ¬ê° íìíë€ë©Ž,
encode/broadcaster륌 íìžíìžì.
+FastAPIì ìœê² íµí©í ì ììŒë©Žì ë ê²¬ê³ íê³ Redis, PostgreSQL ë±ì ì§ìíë ëêµ¬ê° íìíë€ë©Ž, [encode/broadcaster](https://github.com/encode/broadcaster)륌 íìžíìžì.
///
@@ -182,5 +182,5 @@ FastAPIì ìœê² íµí©í ì ììŒë©Žì ë ê²¬ê³ íê³ Redis, PostgreSQL
ë€ì ìµì
ì ëíŽ ë ììë³Žë €ë©Ž Starletteì 묞ì륌 íìžíìžì:
-*
`WebSocket` íŽëì€.
-*
íŽëì€ êž°ë° WebSocket ì²ëЬ.
+* [`WebSocket` íŽëì€](https://www.starlette.dev/websockets/).
+* [íŽëì€ êž°ë° WebSocket ì²ëЬ](https://www.starlette.dev/endpoints/#websocketendpoint).
diff --git a/docs/ko/docs/advanced/wsgi.md b/docs/ko/docs/advanced/wsgi.md
index 24b074443d..921e426efd 100644
--- a/docs/ko/docs/advanced/wsgi.md
+++ b/docs/ko/docs/advanced/wsgi.md
@@ -1,6 +1,6 @@
# WSGI í¬íšíêž° - Flask, Django ë± { #including-wsgi-flask-django-others }
-[ìëž ì í늬ìŒìŽì
- ë§ìŽíž](sub-applications.md){.internal-link target=_blank}, [íë¡ì ë€ìì](behind-a-proxy.md){.internal-link target=_blank}ìì 볞 ê²ì²ëŒ WSGI ì í늬ìŒìŽì
ì ë§ìŽíží ì ììµëë€.
+[ìëž ì í늬ìŒìŽì
- ë§ìŽíž](sub-applications.md), [íë¡ì ë€ìì](behind-a-proxy.md)ìì 볞 ê²ì²ëŒ WSGI ì í늬ìŒìŽì
ì ë§ìŽíží ì ììµëë€.
ìŽë¥Œ ìíŽ `WSGIMiddleware`륌 ì¬ì©íŽ WSGI ì í늬ìŒìŽì
(ì: Flask, Django ë±)ì ê°ì ì ììµëë€.
@@ -36,13 +36,13 @@
ê·žëŠ¬ê³ ëëšžì§ë **FastAPI**ì ìíŽ ì²ëЬë©ëë€.
-ì€ííê³
http://localhost:8000/v1/ë¡ ìŽëí멎 Flaskì ìëµì 볌 ì ììµëë€:
+ì€ííê³ [http://localhost:8000/v1/](http://localhost:8000/v1/)ë¡ ìŽëí멎 Flaskì ìëµì 볌 ì ììµëë€:
```txt
Hello, World from Flask!
```
-귞늬ê³
http://localhost:8000/v2ë¡ ìŽëí멎 **FastAPI**ì ìëµì 볌 ì ììµëë€:
+ê·žëŠ¬ê³ [http://localhost:8000/v2](http://localhost:8000/v2)ë¡ ìŽëí멎 **FastAPI**ì ìëµì 볌 ì ììµëë€:
```JSON
{
diff --git a/docs/ko/docs/alternatives.md b/docs/ko/docs/alternatives.md
index f26fbe39dd..4f92f69d24 100644
--- a/docs/ko/docs/alternatives.md
+++ b/docs/ko/docs/alternatives.md
@@ -14,7 +14,7 @@
## ìŽì ëêµ¬ë€ { #previous-tools }
-###
Django { #django }
+### [Django](https://www.djangoproject.com/) { #django }
ê°ì¥ ìžêž° ìë Python frameworkìŽë©° ë늬 ì 뢰ë°ê³ ììµëë€. Instagram ê°ì ìì€í
ì ë§ëë ë° ì¬ì©ë©ëë€.
@@ -22,7 +22,7 @@
ë°±ìëìì HTMLì ìì±íêž° ìíŽ ë§ë€ìŽì¡ì§, íëì ìž íë°ížìë(ì: React, Vue.js, Angular)ë ë€ë¥ž ìì€í
(ì:
IoT êž°êž°)ìì ì¬ì©ëë API륌 ë§ë€êž° ìíŽ ì€ê³ë ê²ì ìëëë€.
-###
Django REST Framework { #django-rest-framework }
+### [Django REST Framework](https://www.django-rest-framework.org/) { #django-rest-framework }
Django REST frameworkë Django륌 êž°ë°ìŒë¡ Web API륌 구ì¶íêž° ìí ì ì°í toolkitìŒë¡ ë§ë€ìŽì¡ê³ , Djangoì API êž°ë¥ì ê°ì íêž° ìí 목ì ìŽììµëë€.
@@ -42,7 +42,7 @@ Django REST Frameworkë Tom Christieê° ë§ë€ììµëë€. **FastAPI**ì êž°
///
-###
Flask { #flask }
+### [Flask](https://flask.palletsprojects.com) { #flask }
Flaskë "microframework"ë¡, Djangoì Ʞ볞ìŒë¡ í¬íšë ë°ìŽí°ë² ìŽì€ íµí©ìŽë ì¬ë¬ êž°ë¥ë€ì í¬íšíì§ ììµëë€.
@@ -64,7 +64,7 @@ micro-frameworkê° ëêž°. íìí ë구ì 구ì±ìì륌 ìœê² ì¡°í©í
///
-###
Requests { #requests }
+### [Requests](https://requests.readthedocs.io) { #requests }
**FastAPI**ë ì€ì ë¡ **Requests**ì ëììŽ ìëëë€. ëì ë²ìë ë§€ì° ë€ëŠ
ëë€.
@@ -106,7 +106,7 @@ def read_url():
///
-###
Swagger /
OpenAPI { #swagger-openapi }
+### [Swagger](https://swagger.io/) / [OpenAPI](https://github.com/OAI/OpenAPI-Specification/) { #swagger-openapi }
ì ê° Django REST Frameworkìì ê°ì¥ ìíë 죌ì êž°ë¥ì ìë API 묞ìíììµëë€.
@@ -124,8 +124,8 @@ def read_url():
ëí íì€ êž°ë°ì ì¬ì©ì ìží°íìŽì€ ë구륌 íµí©íêž°:
-*
Swagger UI
-*
ReDoc
+* [Swagger UI](https://github.com/swagger-api/swagger-ui)
+* [ReDoc](https://github.com/Rebilly/ReDoc)
ìŽ ë ê°ì§ë ꜀ ëì€ì ìŽê³ ìì ì ìŽêž° ë묞ì ì íëììµëë€. íì§ë§ ê°ëší ê²ìíŽë³Žë©Ž OpenAPI륌 ìí ëì UIê° ìì ê°ì§ë ìë€ë ê²ì ì ì ììµëë€(**FastAPI**ì íšê» ì¬ì©í ì ììµëë€).
@@ -135,7 +135,7 @@ def read_url():
Flask REST frameworkë ì¬ë¬ ê°ê° ìì§ë§, ìê°ì ë€ì¬ ì¡°ì¬íŽ ë³ž 결곌, ìë¹ìê° ì€ëšëìê±°ë ë°©ì¹ëìŽ ììê³ , íŽê²°ëì§ ìì ì¬ë¬ ìŽì ë묞ì ì í©íì§ ìì 겜ì°ê° ë§ììµëë€.
-###
Marshmallow { #marshmallow }
+### [Marshmallow](https://marshmallow.readthedocs.io/en/stable/) { #marshmallow }
API ìì€í
ì íìí 죌ì êž°ë¥ ì€ íëë ë°ìŽí° "
ì§ë ¬í"ì
ëë€. ìŽë ìœë(Python)ìì ë°ìŽí°ë¥Œ ê°ì žì ë€ížìí¬ë¡ ì ì¡í ì ìë ííë¡ ë³ííë ê²ì ì믞í©ëë€. ì륌 ë€ìŽ ë°ìŽí°ë² ìŽì€ì ë°ìŽí°ë¥Œ ëŽì ê°ì²Žë¥Œ JSON ê°ì²Žë¡ ë³ííê±°ë, `datetime` ê°ì²Žë¥Œ 묞ììŽë¡ ë³ííë ë±ì ìì
ì
ëë€.
@@ -153,7 +153,7 @@ APIì ë íë í¬ê² íìí êž°ë¥ì ë°ìŽí° ê²ìŠì
ëë€. í¹ì
///
-###
Webargs { #webargs }
+### [Webargs](https://webargs.readthedocs.io/en/latest/) { #webargs }
APIì íìí ë ë€ë¥ž í° êž°ë¥ì ë€ìŽì€ë ìì²ìì ë°ìŽí°ë¥Œ
íì±íë ê²ì
ëë€.
@@ -175,7 +175,7 @@ Webargsë Marshmallowì ê°ì ê°ë°ìë€ìŽ ë§ë€ììµëë€.
///
-###
APISpec { #apispec }
+### [APISpec](https://apispec.readthedocs.io/en/stable/) { #apispec }
Marshmallowì Webargsë plug-in ííë¡ ê²ìŠ, parsing, serializationì ì ê³µí©ëë€.
@@ -205,7 +205,7 @@ API륌 ìí ìŽëа íì€ìž OpenAPI륌 ì§ìíêž°.
///
-###
Flask-apispec { #flask-apispec }
+### [Flask-apispec](https://flask-apispec.readthedocs.io/en/latest/) { #flask-apispec }
Flask plug-inìŒë¡, Webargs, Marshmallow, APISpecì 묶ìŽì€ëë€.
@@ -219,11 +219,11 @@ Flask + Flask-apispec + Marshmallow + Webargs ì¡°í©ì **FastAPI**륌 ë§ë€êž°
ìŽë¥Œ ì¬ì©í멎ì ì¬ë¬ Flask full-stack generatorê° ë§ë€ìŽì¡ìµëë€. ìŽê²ë€ìŽ ì§êžê¹ì§ ì (ê·žëŠ¬ê³ ì¬ë¬ ìžë¶ í)ê° ì¬ì©íŽ ìš ì£Œì stackì
ëë€:
-*
https://github.com/tiangolo/full-stack
-*
https://github.com/tiangolo/full-stack-flask-couchbase
-*
https://github.com/tiangolo/full-stack-flask-couchdb
+* [https://github.com/tiangolo/full-stack](https://github.com/tiangolo/full-stack)
+* [https://github.com/tiangolo/full-stack-flask-couchbase](https://github.com/tiangolo/full-stack-flask-couchbase)
+* [https://github.com/tiangolo/full-stack-flask-couchdb](https://github.com/tiangolo/full-stack-flask-couchdb)
-ê·žëŠ¬ê³ ìŽ ëìŒí full-stack generatorë€ìŽ [**FastAPI** Project Generators](project-generation.md){.internal-link target=_blank}ì êž°ë°ìŽ ëììµëë€.
+ê·žëŠ¬ê³ ìŽ ëìŒí full-stack generatorë€ìŽ [**FastAPI** Project Generators](project-generation.md)ì êž°ë°ìŽ ëììµëë€.
/// info | ì 볎
@@ -237,7 +237,7 @@ serialization곌 validationì ì ìíë ëìŒí ìœëë¡ë¶í° OpenAPI sc
///
-###
NestJS (귞늬ê³
Angular) { #nestjs-and-angular }
+### [NestJS](https://nestjs.com/) (ê·žëŠ¬ê³ [Angular](https://angular.io/)) { #nestjs-and-angular }
ìŽê±Ž Pythonë ìëëë€. NestJSë Angularìì ìê°ì ë°ì JavaScript(TypeScript) NodeJS frameworkì
ëë€.
@@ -259,13 +259,13 @@ Python íì
ì ì¬ì©íŽ ë°ìŽë ìëí° ì§ìì ì ê³µíêž°.
///
-###
Sanic { #sanic }
+### [Sanic](https://sanic.readthedocs.io/en/latest/) { #sanic }
`asyncio` êž°ë°ì ë§€ì° ë¹ ë¥ž Python framework ì€ ìŽêž° ì¬ë¡ììµëë€. Flaskì ë§€ì° ì ì¬íê² ë§ë€ìŽì¡ìµëë€.
/// note | êž°ì ìžë¶ì¬í
-Ʞ볞 Python `asyncio` 룚í ëì
`uvloop`륌 ì¬ì©íìµëë€. ìŽê²ìŽ ë§€ì° ë¹ ë¥Žê² ë§ë ììžì
ëë€.
+[`uvloop`](https://github.com/MagicStack/uvloop)륌 Ʞ볞 Python `asyncio` 룚í ëì ì¬ì©íìµëë€. ìŽê²ìŽ ë§€ì° ë¹ ë¥Žê² ë§ë ììžì
ëë€.
ìŽë Uvicorn곌 Starletteì ëª
íí ìê°ì 죌ìê³ , íì¬ ê³µê° benchmarkììë ìŽ ëìŽ Sanicë³Žë€ ë ë¹ ëŠ
ëë€.
@@ -279,7 +279,7 @@ Python íì
ì ì¬ì©íŽ ë°ìŽë ìëí° ì§ìì ì ê³µíêž°.
///
-###
Falcon { #falcon }
+### [Falcon](https://falconframework.org/) { #falcon }
Falconì ë ë€ë¥ž ê³ ì±ë¥ Python frameworkë¡, ìµìíìŒë¡ ì€ê³ëìê³ Hug ê°ì ë€ë¥ž frameworkì êž°ë°ìŒë¡ ëìíëë¡ ë§ë€ìŽì¡ìµëë€.
@@ -297,7 +297,7 @@ Hug(= Falcon êž°ë°)곌 íšê», íšììì `response` íëŒë¯ží°ë¥Œ ì ìž
///
-###
Molten { #molten }
+### [Molten](https://moltenframework.com/) { #molten }
**FastAPI**륌 ë§ë€êž° ììí ìŽêž° ëšê³ìì Moltenì ìê² ëìê³ , ꜀ ë¹ì·í ììŽëìŽë¥Œ ê°ê³ ìììµëë€:
@@ -321,7 +321,7 @@ Routeë í ê³³ìì ì ìžíê³ , ë€ë¥ž ê³³ì ì ìžë íšì륌 ì¬ì©í©
///
-###
Hug { #hug }
+### [Hug](https://github.com/hugapi/hug) { #hug }
Hugë Python type hints륌 ì¬ì©íŽ API íëŒë¯ží° íì
ì ì ìžíë êž°ë¥ì 구íí ìŽêž° framework ì€ íëììµëë€. ìŽë ë€ë¥ž ë구ë€ë ê°ì ë°©ìì íëë¡ ìê°ì ì€ íë¥í ììŽëìŽììµëë€.
@@ -337,7 +337,7 @@ OpenAPIë JSON Schema ê°ì íì€ì êž°ë°ìŒë¡ íì§ ììêž° ë묞ì
/// info | ì 볎
-Hugë Timothy Crosleyê° ë§ë€ììµëë€. Python íìŒìì import륌 ìëìŒë¡ ì ë ¬íë íë¥í ë구ìž
`isort`ì ì ìììŽêž°ë í©ëë€.
+Hugë Timothy Crosleyê° ë§ë€ììµëë€. Python íìŒìì import륌 ìëìŒë¡ ì ë ¬íë íë¥í ëêµ¬ìž [`isort`](https://github.com/timothycrosley/isort)ì ì ìììŽêž°ë í©ëë€.
///
@@ -351,7 +351,7 @@ Hugë í€ëì ì¿ í€ë¥Œ ì€ì íêž° ìíŽ íšìì `response` íëŒë¯ží°
///
-###
APIStar (<= 0.5) { #apistar-0-5 }
+### [APIStar](https://github.com/encode/apistar) (<= 0.5) { #apistar-0-5 }
**FastAPI**륌 ë§ë€êž°ë¡ ê²°ì íêž° ì§ì ì **APIStar** ìë²ë¥Œ ë°ê²¬íìµëë€. ì°Ÿê³ ìë ê±°ì 몚ë ê²ì ê°ì¶ê³ ììê³ ì€ê³ë íë¥íìµëë€.
@@ -401,7 +401,7 @@ APIStarë Tom Christieê° ë§ë€ììµëë€. ë€ìì ë§ë ì¬ë곌 ëìŒ
## **FastAPI**ê° ì¬ì©íë ê² { #used-by-fastapi }
-###
Pydantic { #pydantic }
+### [Pydantic](https://docs.pydantic.dev/) { #pydantic }
Pydanticì Python type hints륌 êž°ë°ìŒë¡ ë°ìŽí° ê²ìŠ, serialization, 묞ìí(JSON Schema ì¬ì©)륌 ì ìíë ëŒìŽëžë¬ëЬì
ëë€.
@@ -417,7 +417,7 @@ Marshmallowì ë¹êµí ì ììµëë€. ë€ë§ benchmarkìì Marshmallow볎
///
-###
Starlette { #starlette }
+### [Starlette](https://www.starlette.dev/) { #starlette }
Starletteë 겜ë
ASGI framework/toolkitìŒë¡, ê³ ì±ë¥ asyncio ìë¹ì€ë¥Œ ë§ë€êž°ì ìŽìì ì
ëë€.
@@ -462,7 +462,7 @@ ASGIë Django ìœìŽ í ë©€ë²ë€ìŽ ê°ë° ì€ìž ìë¡ìŽ "íì€"ì
ëë€
///
-###
Uvicorn { #uvicorn }
+### [Uvicorn](https://www.uvicorn.dev/) { #uvicorn }
Uvicornì uvloop곌 httptoolsë¡ êµ¬ì¶ë ìŽê³ ì ASGI ìë²ì
ëë€.
@@ -476,10 +476,10 @@ Starletteì **FastAPI**ìì ê¶ì¥íë ìë²ì
ëë€.
ëí `--workers` 컀맚ëëŒìž ìµì
ì ì¬ì©í멎 ë¹ëêž° ë©í°íë¡ìžì€ ìë²ë¡ ì€íí ìë ììµëë€.
-ììží ëŽì©ì [ë°°í¬](deployment/index.md){.internal-link target=_blank} ì¹ì
ì íìžíìžì.
+ììží ëŽì©ì [ë°°í¬](deployment/index.md) ì¹ì
ì íìžíìžì.
///
## ë²€ì¹ë§í¬ì ìë { #benchmarks-and-speed }
-Uvicorn, Starlette, FastAPI ì¬ìŽì ì°šìŽë¥Œ ìŽíŽíê³ ë¹êµíë €ë©Ž [ë²€ì¹ë§í¬](benchmarks.md){.internal-link target=_blank} ì¹ì
ì íìžíìžì.
+Uvicorn, Starlette, FastAPI ì¬ìŽì ì°šìŽë¥Œ ìŽíŽíê³ ë¹êµíë €ë©Ž [ë²€ì¹ë§í¬](benchmarks.md) ì¹ì
ì íìžíìžì.
diff --git a/docs/ko/docs/async.md b/docs/ko/docs/async.md
index 36f1ca6bf1..485111fac9 100644
--- a/docs/ko/docs/async.md
+++ b/docs/ko/docs/async.md
@@ -141,7 +141,7 @@ def results():
/// info | ì 볎
-ìëŠë€ìŽ ìŒë¬ì€íž:
Ketrina Thompson. ðš
+ìëŠë€ìŽ ìŒë¬ì€íž: [Ketrina Thompson](https://www.instagram.com/ketrinadrawsalot). ðš
///
@@ -207,7 +207,7 @@ def results():
/// info | ì 볎
-ìëŠë€ìŽ ìŒë¬ì€íž:
Ketrina Thompson. ðš
+ìëŠë€ìŽ ìŒë¬ì€íž: [Ketrina Thompson](https://www.instagram.com/ketrinadrawsalot). ðš
///
@@ -251,7 +251,7 @@ def results():
ê·žëŠ¬ê³ ìŽê²ìŽ **FastAPI**ë¡ ì»ë ê²ê³Œ ê°ì ìì€ì ì±ë¥ì
ëë€.
-ëí ë³ë ¬ì±ê³Œ ë¹ëêž°ì±ì ëìì ì¬ì©í ì ììŒë¯ë¡, ëë¶ë¶ì í
ì€ížë NodeJS íë ììí¬ë³Žë€ ë ëì ì±ë¥ì ì»ê³ , Cì ë ê°ê¹ìŽ ì»ŽíìŒ ìžìŽìž Goì ëë±í ì±ë¥ì ì»ì ì ììµëë€
(몚ë Starlette ëë¶ì
ëë€).
+ëí ë³ë ¬ì±ê³Œ ë¹ëêž°ì±ì ëìì ì¬ì©í ì ììŒë¯ë¡, ëë¶ë¶ì í
ì€ížë NodeJS íë ììí¬ë³Žë€ ë ëì ì±ë¥ì ì»ê³ , Cì ë ê°ê¹ìŽ ì»ŽíìŒ ìžìŽìž Goì ëë±í ì±ë¥ì ì»ì ì ììµëë€ [(몚ë Starlette ëë¶ì
ëë€)](https://www.techempower.com/benchmarks/#section=data-r17&hw=ph&test=query&l=zijmkf-1).
### ëìì±ìŽ ë³ë ¬ì±ë³Žë€ ë ëìê°ì? { #is-concurrency-better-than-parallelism }
@@ -298,7 +298,7 @@ CPU bound ìì
ì íí ììë ë³µì¡í ìí ì²ëŠ¬ê° íìí ê²ë€
ìŽê²ì íìŽì¬ìŽ **ë°ìŽí° ì¬ìŽìžì€**, ëšžì ë¬ë, í¹í ë¥ë¬ëì 죌ì ìžìŽëŒë ëšìí ì¬ì€ê³Œ ëíŽì ž, FastAPI륌 ë°ìŽí° ì¬ìŽìžì€/ëšžì ë¬ë ì¹ API ë° ì í늬ìŒìŽì
(ê·ž ìžìë ë§ì ê²ë€)ì ë§€ì° ì ë§ë ì íìŒë¡ ë§ë€ìŽ ì€ëë€.
-íë¡ëì
ìì ìŽ ë³ë ¬ì±ì ìŽë»ê² ë¬ì±íëì§ ë³Žë €ë©Ž [ë°°í¬](deployment/index.md){.internal-link target=_blank} ì¹ì
ì ì°žê³ íìžì.
+íë¡ëì
ìì ìŽ ë³ë ¬ì±ì ìŽë»ê² ë¬ì±íëì§ ë³Žë €ë©Ž [ë°°í¬](deployment/index.md) ì¹ì
ì ì°žê³ íìžì.
## `async`ì `await` { #async-and-await }
@@ -363,13 +363,13 @@ async def read_burgers():
### ì¬ë¬ë¶ë§ì async ìœë ìì±íêž° { #write-your-own-async-code }
-Starlette(ê·žëŠ¬ê³ **FastAPI**)ë
AnyIO륌 êž°ë°ìŒë¡ íê³ ììŒë©°, íìŽì¬ íì€ ëŒìŽëžë¬ëЬ
asyncioì
Trio 몚ëì ížíë©ëë€.
+Starlette(ê·žëŠ¬ê³ **FastAPI**)ë [AnyIO](https://anyio.readthedocs.io/en/stable/)륌 êž°ë°ìŒë¡ íê³ ììŒë©°, íìŽì¬ íì€ ëŒìŽëžë¬ëЬ [asyncio](https://docs.python.org/3/library/asyncio-task.html)ì [Trio](https://trio.readthedocs.io/en/stable/) 몚ëì ížíë©ëë€.
-í¹í, ìœëìì ë ê³ êž íšíŽìŽ íìí ê³ êž ëìì± ì¬ì© ì¬ë¡ììë ì§ì
AnyIO륌 ì¬ì©í ì ììµëë€.
+í¹í, ìœëìì ë ê³ êž íšíŽìŽ íìí ê³ êž ëìì± ì¬ì© ì¬ë¡ììë ì§ì [AnyIO](https://anyio.readthedocs.io/en/stable/)륌 ì¬ì©í ì ììµëë€.
-ê·žëŠ¬ê³ FastAPI륌 ì¬ì©íì§ ìëëŒë, ëì ížíì±ì í볎íê³ ê·ž ìŽì (ì: *structured concurrency*)ì ì»êž° ìíŽ
AnyIOë¡ ì¬ë¬ë¶ë§ì async ì í늬ìŒìŽì
ì ìì±í ìë ììµëë€.
+ê·žëŠ¬ê³ FastAPI륌 ì¬ì©íì§ ìëëŒë, ëì ížíì±ì í볎íê³ ê·ž ìŽì (ì: *structured concurrency*)ì ì»êž° ìíŽ [AnyIO](https://anyio.readthedocs.io/en/stable/)ë¡ ì¬ë¬ë¶ë§ì async ì í늬ìŒìŽì
ì ìì±í ìë ììµëë€.
-ì ë AnyIO ìì ìì ë ìŽìŽë¡ ë ë€ë¥ž ëŒìŽëžë¬ëŠ¬ë¥Œ ë§ë€ìëë°, íì
ìŽë
ží
ìŽì
ì ì¡°êž ê°ì íê³ ë ëì **ìëìì±**, **ìžëŒìž ì€ë¥** ë±ì ì»êž° ìí ê²ì
ëë€. ëí **ìŽíŽ**íê³ **ì¬ë¬ë¶ë§ì async ìœë**륌 ìì±íëë¡ ëë ì¹ì í ìê°ì íí 늬ìŒë ì ê³µí©ëë€:
Asyncer. í¹í **async ìœëì ìŒë°**(blocking/ëêž°) ìœë륌 **ê²°í©**íŽìŒ íë€ë©Ž ì죌 ì ì©í©ëë€.
+ì ë AnyIO ìì ìì ë ìŽìŽë¡ ë ë€ë¥ž ëŒìŽëžë¬ëŠ¬ë¥Œ ë§ë€ìëë°, íì
ìŽë
ží
ìŽì
ì ì¡°êž ê°ì íê³ ë ëì **ìëìì±**, **ìžëŒìž ì€ë¥** ë±ì ì»êž° ìí ê²ì
ëë€. ëí **ìŽíŽ**íê³ **ì¬ë¬ë¶ë§ì async ìœë**륌 ìì±íëë¡ ëë ì¹ì í ìê°ì íí 늬ìŒë ì ê³µí©ëë€: [Asyncer](https://asyncer.tiangolo.com/). í¹í **async ìœëì ìŒë°**(blocking/ëêž°) ìœë륌 **ê²°í©**íŽìŒ íë€ë©Ž ì죌 ì ì©í©ëë€.
### ë¹ëêž° ìœëì ë€ë¥ž íí { #other-forms-of-asynchronous-code }
@@ -381,7 +381,7 @@ Starlette(ê·žëŠ¬ê³ **FastAPI**)ë
Gevent륌 ì¬ì©í ì ììì ê²ì
ëë€. íì§ë§ ìœë륌 ìŽíŽíê³ , ëë²ê¹
íê³ , ìŽì ëíŽ ìê°íë ê²ìŽ íšì¬ ë ë³µì¡í©ëë€.
+ìŽì ë²ì ì íìŽì¬ììë ì€ë ë ëë [Gevent](https://www.gevent.org/)륌 ì¬ì©í ì ììì ê²ì
ëë€. íì§ë§ ìœë륌 ìŽíŽíê³ , ëë²ê¹
íê³ , ìŽì ëíŽ ìê°íë ê²ìŽ íšì¬ ë ë³µì¡í©ëë€.
ìŽì ë²ì ì NodeJS/ëžëŒì°ì JavaScriptììë "callback"ì ì¬ì©íì ê²ì
ëë€. ìŽë "callback hell"ë¡ ìŽìŽì§ëë€.
@@ -419,15 +419,15 @@ Starlette(ê·žëŠ¬ê³ **FastAPI**)ë
I/O 륌 ìííë ìœë륌 ì¬ì©íì§ ìë í `async def`륌 ì¬ì©íë ížìŽ ë ë«ìµëë€.
-ê·žëŒìë ë ê²œì° ëªšë, **FastAPI**ë ìŽì ì ì¬ì©íë íë ììí¬ë³Žë€ [ì¬ì í ë ë¹ ë¥Œ](index.md#performance){.internal-link target=_blank} ê°ë¥ì±ìŽ ëìµëë€(ëë ìµìí ë¹ì·í©ëë€).
+ê·žëŒìë ë ê²œì° ëªšë, **FastAPI**ë ìŽì ì ì¬ì©íë íë ììí¬ë³Žë€ [ì¬ì í ë ë¹ ë¥Œ](index.md#performance) ê°ë¥ì±ìŽ ëìµëë€(ëë ìµìí ë¹ì·í©ëë€).
### ìì¡Žì± { #dependencies }
-[ì졎ì±](tutorial/dependencies/index.md){.internal-link target=_blank}ìë ëìŒíê² ì ì©ë©ëë€. ì졎ì±ìŽ `async def` ëì íì€ `def` íšìëŒë©Ž, ìžë¶ ì€ë ëíìì ì€íë©ëë€.
+[ì졎ì±](tutorial/dependencies/index.md)ìë ëìŒíê² ì ì©ë©ëë€. ì졎ì±ìŽ `async def` ëì íì€ `def` íšìëŒë©Ž, ìžë¶ ì€ë ëíìì ì€íë©ëë€.
### íì ìì¡Žì± { #sub-dependencies }
-ìë¡ë¥Œ íìë¡ íë ì¬ë¬ ì졎ì±ê³Œ [íì ì졎ì±](tutorial/dependencies/sub-dependencies.md){.internal-link target=_blank}ì íšì ì ìì ë§€ê°ë³ìë¡ ê°ì§ ì ììŒë©°, ê·žì€ ìŒë¶ë `async def`ë¡, ë€ë¥ž ìŒë¶ë ìŒë° `def`ë¡ ìì±ëìì ì ììµëë€. ê·žëë ì ì ëìíë©°, ìŒë° `def`ë¡ ìì±ë ê²ë€ì "await"ëë ëì (ì€ë ëíìì) ìžë¶ ì€ë ëìì ížì¶ë©ëë€.
+ìë¡ë¥Œ íìë¡ íë ì¬ë¬ ì졎ì±ê³Œ [íì ì졎ì±](tutorial/dependencies/sub-dependencies.md)ì íšì ì ìì ë§€ê°ë³ìë¡ ê°ì§ ì ììŒë©°, ê·žì€ ìŒë¶ë `async def`ë¡, ë€ë¥ž ìŒë¶ë ìŒë° `def`ë¡ ìì±ëìì ì ììµëë€. ê·žëë ì ì ëìíë©°, ìŒë° `def`ë¡ ìì±ë ê²ë€ì "await"ëë ëì (ì€ë ëíìì) ìžë¶ ì€ë ëìì ížì¶ë©ëë€.
### ë€ë¥ž ì ížëŠ¬í° íšì { #other-utility-functions }
diff --git a/docs/ko/docs/benchmarks.md b/docs/ko/docs/benchmarks.md
index 2d4fdbeddb..43c25e865f 100644
--- a/docs/ko/docs/benchmarks.md
+++ b/docs/ko/docs/benchmarks.md
@@ -1,6 +1,6 @@
# ë²€ì¹ë§í¬ { #benchmarks }
-ë
늜ì ìž TechEmpower ë²€ì¹ë§í¬ì ë°ë¥Žë©Ž **FastAPI** ì í늬ìŒìŽì
ìŽ Uvicornì ì¬ì©íì¬ ì¬ì© ê°ë¥í ê°ì¥ ë¹ ë¥ž Python íë ììí¬ ì€ íëë¡ ì€íëë©°, Starletteì Uvicorn ì첎(ëŽë¶ì ìŒë¡ FastAPIê° ì¬ì©íë ë구)ë³Žë€ ì¡°êž ìëì ìì¹í©ëë€.
+ë
늜ì ìž TechEmpower ë²€ì¹ë§í¬ì ë°ë¥Žë©Ž **FastAPI** ì í늬ìŒìŽì
ìŽ Uvicornì ì¬ì©íì¬ [ì¬ì© ê°ë¥í ê°ì¥ ë¹ ë¥ž Python íë ììí¬ ì€ íë](https://www.techempower.com/benchmarks/#section=test&runid=7464e520-0dc2-473d-bd34-dbdfd7e85911&hw=ph&test=query&l=zijzen-7)ë¡ ì€íëë©°, Starletteì Uvicorn ì첎(ëŽë¶ì ìŒë¡ FastAPIê° ì¬ì©íë ë구)ë³Žë€ ì¡°êž ìëì ìì¹í©ëë€.
ê·žë¬ë ë²€ì¹ë§í¬ì ë¹êµë¥Œ íìží ë ë€ì ì¬íì ìŒëì ëìŽìŒ í©ëë€.
diff --git a/docs/ko/docs/deployment/cloud.md b/docs/ko/docs/deployment/cloud.md
index 0705e120c4..9d9dc93a3d 100644
--- a/docs/ko/docs/deployment/cloud.md
+++ b/docs/ko/docs/deployment/cloud.md
@@ -6,7 +6,7 @@
## FastAPI Cloud { #fastapi-cloud }
-**
FastAPI Cloud**ë **FastAPI**륌 ë§ë ëìŒí ìì±ìì íìŽ êµ¬ì¶íìµëë€.
+**[FastAPI Cloud](https://fastapicloud.com)**ë **FastAPI**륌 ë§ë ëìŒí ìì±ìì íìŽ êµ¬ì¶íìµëë€.
ìµìíì ë
žë ¥ìŒë¡ API륌 **구ì¶**, **ë°°í¬**, **ì ê·Œ**íë 곌ì ì ê°ìíí©ëë€.
@@ -16,9 +16,9 @@ FastAPI Cloudë *FastAPI and friends* ì€í ìì€ íë¡ì ížì 죌ì í
## íŽëŒì°ë ì ê³µì
첎 - íììë€ { #cloud-providers-sponsors }
-ë€ë¥ž ëªëª íŽëŒì°ë ì ê³µì
첎ë€ë âš [**FastAPI륌 íìí©ëë€**](../help-fastapi.md#sponsor-the-author){.internal-link target=_blank} âš. ð
+ë€ë¥ž ëªëª íŽëŒì°ë ì ê³µì
첎ë€ë âš [**FastAPI륌 íìí©ëë€**](../help-fastapi.md#sponsor-the-author) âš. ð
ê°ìŽë륌 ë°ëŒ íê³ ìë¹ì€ë¥Œ ì¬ì©íŽë³Žêž° ìíŽ ìŽë€ë ê³ ë €íŽë³Œ ì ììµëë€:
-*
Render
-*
Railway
+* [Render](https://docs.render.com/deploy-fastapi?utm_source=deploydoc&utm_medium=referral&utm_campaign=fastapi)
+* [Railway](https://docs.railway.com/guides/fastapi?utm_medium=integration&utm_source=docs&utm_campaign=fastapi)
diff --git a/docs/ko/docs/deployment/concepts.md b/docs/ko/docs/deployment/concepts.md
index dd7edd1bae..a5c5e53e0d 100644
--- a/docs/ko/docs/deployment/concepts.md
+++ b/docs/ko/docs/deployment/concepts.md
@@ -25,7 +25,7 @@
## 볎ì - HTTPS { #security-https }
-[ìŽì HTTPS ì¥](https.md){.internal-link target=_blank}ìì HTTPSê° APIì ìíží륌 ì ê³µíë ë°©ìì ëíŽ ë°°ì ìµëë€.
+[ìŽì HTTPS ì¥](https.md)ìì HTTPSê° APIì ìíží륌 ì ê³µíë ë°©ìì ëíŽ ë°°ì ìµëë€.
ëí HTTPSë ìŒë°ì ìŒë¡ ì í늬ìŒìŽì
ìë² ë°ê¹¥ì **ìžë¶** 컎í¬ëížìž **TLS Termination Proxy**ê° ì ê³µíë€ë ê²ë íìžíìµëë€.
@@ -190,7 +190,7 @@ FastAPI ì í늬ìŒìŽì
ì Uvicornì ì€ííë `fastapi` ëª
ë ¹ ê°ì
### ì컀 íë¡ìžì€ì í¬íž { #worker-processes-and-ports }
-[HTTPSì ëí 묞ì](https.md){.internal-link target=_blank}ìì, ìë²ìì íëì í¬ížì IP 죌ì ì¡°í©ìë íëì íë¡ìžì€ë§ 늬ì€ëí ì ìë€ë ê²ì êž°ìµíìëì?
+[HTTPSì ëí 묞ì](https.md)ìì, ìë²ìì íëì í¬ížì IP 죌ì ì¡°í©ìë íëì íë¡ìžì€ë§ 늬ì€ëí ì ìë€ë ê²ì êž°ìµíìëì?
ìŽê²ì ì¬ì í ì¬ì€ì
ëë€.
@@ -243,7 +243,7 @@ FastAPI ì í늬ìŒìŽì
ì Uvicornì ì€ííë `fastapi` ëª
ë ¹ ê°ì
**컚í
ìŽë**, Docker, Kubernetesì ëí ìŒë¶ ëŽì©ìŽ ìì§ì ì ìŽíŽëì§ ììë êŽì°®ìµëë€.
-ë€ì ì¥ìì 컚í
ìŽë ìŽë¯žì§, Docker, Kubernetes ë±ì ë ì€ëª
íê² ìµëë€: [컚í
ìŽëìì FastAPI - Docker](docker.md){.internal-link target=_blank}.
+ë€ì ì¥ìì 컚í
ìŽë ìŽë¯žì§, Docker, Kubernetes ë±ì ë ì€ëª
íê² ìµëë€: [컚í
ìŽëìì FastAPI - Docker](docker.md).
///
@@ -281,7 +281,7 @@ FastAPI ì í늬ìŒìŽì
ì Uvicornì ì€ííë `fastapi` ëª
ë ¹ ê°ì
/// tip | í
-컚í
ìŽëë¡ ìŽë¥Œ ì²ëЬíë ë 구첎ì ìž ììë ë€ì ì¥ìì ì ê³µíê² ìµëë€: [컚í
ìŽëìì FastAPI - Docker](docker.md){.internal-link target=_blank}.
+컚í
ìŽëë¡ ìŽë¥Œ ì²ëЬíë ë 구첎ì ìž ììë ë€ì ì¥ìì ì ê³µíê² ìµëë€: [컚í
ìŽëìì FastAPI - Docker](docker.md).
///
diff --git a/docs/ko/docs/deployment/docker.md b/docs/ko/docs/deployment/docker.md
index ca0136d836..d965af1d1e 100644
--- a/docs/ko/docs/deployment/docker.md
+++ b/docs/ko/docs/deployment/docker.md
@@ -1,6 +1,6 @@
# 컚í
ìŽëì FastAPI - ë컀 { #fastapi-in-containers-docker }
-FastAPI ì í늬ìŒìŽì
ì ë°°í¬í ë ìŒë°ì ìž ì ê·Œ ë°©ë²ì **늬ë
ì€ ì»ší
ìŽë ìŽë¯žì§**륌 ë¹ëíë ê²ì
ëë€. 볎íµ
**Docker**륌 ì¬ì©íŽ ìíí©ëë€. ê·žë° ë€ì íŽë¹ 컚í
ìŽë ìŽë¯žì§ë¥Œ ëª ê°ì§ ê°ë¥í ë°©ë² ì€ íëë¡ ë°°í¬í ì ììµëë€.
+FastAPI ì í늬ìŒìŽì
ì ë°°í¬í ë ìŒë°ì ìž ì ê·Œ ë°©ë²ì **늬ë
ì€ ì»ší
ìŽë ìŽë¯žì§**륌 ë¹ëíë ê²ì
ëë€. ë³Žíµ [**Docker**](https://www.docker.com/)륌 ì¬ì©íŽ ìíí©ëë€. ê·žë° ë€ì íŽë¹ 컚í
ìŽë ìŽë¯žì§ë¥Œ ëª ê°ì§ ê°ë¥í ë°©ë² ì€ íëë¡ ë°°í¬í ì ììµëë€.
늬ë
ì€ ì»ší
ìŽë륌 ì¬ì©í멎 **볎ì**, **ì¬í ê°ë¥ì±**, **ëšìíš** ë± ì¬ë¬ ì¥ì ìŽ ììµëë€.
@@ -60,16 +60,16 @@ CMD ["fastapi", "run", "app/main.py", "--port", "80"]
Dockerë **컚í
ìŽë ìŽë¯žì§**ì **컚í
ìŽë**륌 ìì±íê³ êŽëЬíë 죌ì ë구 ì€ íëì
ëë€.
-ëí
Docker Hubìë ë€ìí ë구, í겜, ë°ìŽí°ë² ìŽì€, ì í늬ìŒìŽì
ì ìí 믞늬 ë§ë€ìŽì§ **ê³µì 컚í
ìŽë ìŽë¯žì§**ê° ê³µê°ëìŽ ììµëë€.
+ëí [Docker Hub](https://hub.docker.com/)ìë ë€ìí ë구, í겜, ë°ìŽí°ë² ìŽì€, ì í늬ìŒìŽì
ì ìí 믞늬 ë§ë€ìŽì§ **ê³µì 컚í
ìŽë ìŽë¯žì§**ê° ê³µê°ëìŽ ììµëë€.
-ì륌 ë€ìŽ, ê³µì
Python Imageê° ììµëë€.
+ì륌 ë€ìŽ, ê³µì [Python Image](https://hub.docker.com/_/python)ê° ììµëë€.
ê·žëŠ¬ê³ ë°ìŽí°ë² ìŽì€ ë± ë€ìí ì©ëì ë€ë¥ž ìŽë¯žì§ë ë§ìŽ ììµëë€. ì륌 ë€ë©Ž:
-*
PostgreSQL
-*
MySQL
-*
MongoDB
-*
Redis ë±
+* [PostgreSQL](https://hub.docker.com/_/postgres)
+* [MySQL](https://hub.docker.com/_/mysql)
+* [MongoDB](https://hub.docker.com/_/mongo)
+* [Redis](https://hub.docker.com/_/redis) ë±
믞늬 ë§ë€ìŽì§ 컚í
ìŽë ìŽë¯žì§ë¥Œ ì¬ì©í멎 ìë¡ ë€ë¥ž ë구륌 **ê²°í©**íê³ ì¬ì©íêž°ê° ë§€ì° ìœìµëë€. ì륌 ë€ìŽ ìë¡ìŽ ë°ìŽí°ë² ìŽì€ë¥Œ ìííŽ ë³Œ ëë ê·žë ìµëë€. ëë¶ë¶ì ê²œì° **ê³µì ìŽë¯žì§**륌 ì¬ì©íê³ , í겜 ë³ìë¡ ì€ì ë§ í멎 ë©ëë€.
@@ -111,7 +111,7 @@ Dockerë Kubernetes ê°ì 몚ë 컚í
ìŽë êŽëЬ ìì€í
ìë ìŽë¬í
ê°ì¥ ìŒë°ì ìž ë°©ë²ì íší€ì§ ìŽëŠê³Œ ë²ì ì í ì€ì íëì© ì ìŽ ë `requirements.txt` íìŒì ì¬ì©íë ê²ì
ëë€.
-ë²ì ë²ì륌 ì€ì í ëë [FastAPI ë²ì ë€ì ëíì¬](versions.md){.internal-link target=_blank}ìì ìœì ê²ê³Œ ê°ì ììŽëìŽë¥Œ ì¬ì©í멎 ë©ëë€.
+ë²ì ë²ì륌 ì€ì í ëë [FastAPI ë²ì ë€ì ëíì¬](versions.md)ìì ìœì ê²ê³Œ ê°ì ììŽëìŽë¥Œ ì¬ì©í멎 ë©ëë€.
ì륌 ë€ìŽ `requirements.txt`ë ë€ì곌 ê°ì ì ììµëë€:
@@ -238,7 +238,7 @@ CMD ["fastapi", "run", "app/main.py", "--port", "80"]
#### `CMD` ì¬ì©íêž° - Exec Form { #use-cmd-exec-form }
-Docker ì§ììŽ
`CMD`ë ë ê°ì§ íììŒë¡ ìì±í ì ììµëë€:
+Docker ì§ììŽ [`CMD`](https://docs.docker.com/reference/dockerfile/#cmd)ë ë ê°ì§ íììŒë¡ ìì±í ì ììµëë€:
â
**Exec** form:
@@ -254,11 +254,11 @@ CMD ["fastapi", "run", "app/main.py", "--port", "80"]
CMD fastapi run app/main.py --port 80
```
-FastAPIê° ì ìì ìŒë¡ ì¢
ë£(graceful shutdown)ëê³ [lifespan ìŽë²€íž](../advanced/events.md){.internal-link target=_blank}ê° ížëŠ¬ê±°ëëë¡ íë €ë©Ž, íì **exec** formì ì¬ì©íìžì.
+FastAPIê° ì ìì ìŒë¡ ì¢
ë£(graceful shutdown)ëê³ [lifespan ìŽë²€íž](../advanced/events.md)ê° ížëŠ¬ê±°ëëë¡ íë €ë©Ž, íì **exec** formì ì¬ì©íìžì.
-ììží ëŽì©ì
shell and exec formì ëí Docker 묞ì륌 ì°žê³ íìžì.
+ììží ëŽì©ì [shell and exec formì ëí Docker 묞ì](https://docs.docker.com/reference/dockerfile/#shell-and-exec-form)륌 ì°žê³ íìžì.
-ìŽë `docker compose`륌 ì¬ì©í ë ꜀ ëì ë ì ììµëë€. ì¢ ë êž°ì ì ìž ììž ëŽì©ì Docker Compose FAQ ì¹ì
ì ì°žê³ íìžì:
Why do my services take 10 seconds to recreate or stop?.
+ìŽë `docker compose`륌 ì¬ì©í ë ꜀ ëì ë ì ììµëë€. ì¢ ë êž°ì ì ìž ììž ëŽì©ì Docker Compose FAQ ì¹ì
ì ì°žê³ íìžì: [Why do my services take 10 seconds to recreate or stop?](https://docs.docker.com/compose/faq/#why-do-my-services-take-10-seconds-to-recreate-or-stop).
#### ëë í°ëЬ 구조 { #directory-structure }
@@ -305,7 +305,7 @@ RUN pip install --no-cache-dir --upgrade -r /code/requirements.txt
íší€ì§ ì졎ì±ì ë€ìŽë¡ëíê³ ì€ì¹íë ë°ìë **ëª ë¶**ìŽ ê±žëŠŽ ì ìì§ë§, **ìºì**륌 ì¬ì©í멎 ë§ììŒ **ëª ìŽ**멎 ëë©ëë€.
-ëí ê°ë° ì€ì ìœë ë³ê²œ ì¬íìŽ ëìíëì§ íìžíêž° ìíŽ ì»ší
ìŽë ìŽë¯žì§ë¥Œ ê³ì ë¹ëíê² ëë¯ë¡, ìŽë ê² ì ìœëë ìê°ì ëì ëìŽ ìë¹í 컀ì§ëë€.
+ëí ê°ë° ì€ì ìœë ë³ê²œ ì¬íìŽ ëìíëì§ íìžíêž° ìíŽ ì»ší
ìŽë ìŽë¯žì§ë¥Œ ê³ì ë¹ëíê² ëë¯ë¡, ìŽë ê² ì ìœëë ìê°ì ëì€ëìŽ ìë¹í 컀ì§ëë€.
ê·ž ë€ì `Dockerfile`ì ëë¶ë¶ ê·Œì²ìì 몚ë ìœë륌 ë³µì¬í©ëë€. ìŽ ë¶ë¶ì **ê°ì¥ ì죌 ë³ê²œëë** ë¶ë¶ìŽë¯ë¡, ê±°ì íì ìŽ ëšê³ ìŽíìë ìºì륌 ì¬ì©í ì ìêž° ë묞ì ëë¶ë¶ì ë¡ëë€.
@@ -352,7 +352,7 @@ $ docker run -d --name mycontainer -p 80:80 myimage
## íìžíêž° { #check-it }
-Docker 컚í
ìŽëì URLìì íìží ì ììŽìŒ í©ëë€. ì륌 ë€ìŽ:
http://192.168.99.100/items/5?q=somequery ëë
http://127.0.0.1/items/5?q=somequery(ëë Docker ížì€ížë¥Œ ì¬ì©íŽ ëë±íê² íìží ì ììµëë€).
+Docker 컚í
ìŽëì URLìì íìží ì ììŽìŒ í©ëë€. ì륌 ë€ìŽ: [http://192.168.99.100/items/5?q=somequery](http://192.168.99.100/items/5?q=somequery) ëë [http://127.0.0.1/items/5?q=somequery](http://127.0.0.1/items/5?q=somequery)(ëë Docker ížì€ížë¥Œ ì¬ì©íŽ ëë±íê² íìží ì ììµëë€).
ìëì ê°ì ê²ì ë³Žê² ë ê²ì
ëë€:
@@ -362,17 +362,17 @@ Docker 컚í
ìŽëì URLìì íìží ì ììŽìŒ í©ëë€. ì륌 ë€
## ìží°ëí°ëž API 묞ì { #interactive-api-docs }
-ìŽì
http://192.168.99.100/docs ëë
http://127.0.0.1/docs(ëë Docker ížì€ížë¥Œ ì¬ì©íŽ ëë±íê² ì ê·Œ)ë¡ ìŽëí ì ììµëë€.
+ìŽì [http://192.168.99.100/docs](http://192.168.99.100/docs) ëë [http://127.0.0.1/docs](http://127.0.0.1/docs)(ëë Docker ížì€ížë¥Œ ì¬ì©íŽ ëë±íê² ì ê·Œ)ë¡ ìŽëí ì ììµëë€.
-ìëìŒë¡ ìì±ë ìží°ëí°ëž API 묞ì(
Swagger UI ì ê³µ)륌 볌 ì ììµëë€:
+ìëìŒë¡ ìì±ë ìží°ëí°ëž API 묞ì([Swagger UI](https://github.com/swagger-api/swagger-ui) ì ê³µ)륌 볌 ì ììµëë€:

## ëì API 묞ì { #alternative-api-docs }
-ëí
http://192.168.99.100/redoc ëë
http://127.0.0.1/redoc(ëë Docker ížì€ížë¥Œ ì¬ì©íŽ ëë±íê² ì ê·Œ)ë¡ ìŽëí ìë ììµëë€.
+ëí [http://192.168.99.100/redoc](http://192.168.99.100/redoc) ëë [http://127.0.0.1/redoc](http://127.0.0.1/redoc)(ëë Docker ížì€ížë¥Œ ì¬ì©íŽ ëë±íê² ì ê·Œ)ë¡ ìŽëí ìë ììµëë€.
-ëì ìë 묞ì(
ReDoc ì ê³µ)륌 볌 ì ììµëë€:
+ëì ìë 묞ì([ReDoc](https://github.com/Rebilly/ReDoc) ì ê³µ)륌 볌 ì ììµëë€:

@@ -413,7 +413,7 @@ CMD ["fastapi", "run", "main.py", "--port", "80"]
## ë°°í¬ ê°ë
{ #deployment-concepts }
-컚í
ìŽë êŽì ìì ê°ì [ë°°í¬ ê°ë
](concepts.md){.internal-link target=_blank}ë€ì ë€ì ìŽìŒêž°íŽ ëŽ
ìë€.
+컚í
ìŽë êŽì ìì ê°ì [ë°°í¬ ê°ë
](concepts.md)ë€ì ë€ì ìŽìŒêž°íŽ ëŽ
ìë€.
컚í
ìŽëë ì£Œë¡ ì í늬ìŒìŽì
ì **ë¹ë ë° ë°°í¬** 곌ì ì ëšìííë ë구ìŽì§ë§, ìŽë¬í **ë°°í¬ ê°ë
**ì ì²ëЬíë í¹ì ì ê·Œ ë°©ìì ê°ì íì§ë ììŒë©°, ê°ë¥í ì ëµì ì¬ë¬ ê°ì§ì
ëë€.
@@ -432,7 +432,7 @@ CMD ["fastapi", "run", "main.py", "--port", "80"]
FastAPI ì í늬ìŒìŽì
ì **컚í
ìŽë ìŽë¯žì§**(ê·žëŠ¬ê³ ëì€ì ì€í ì€ìž **컚í
ìŽë**)ìë§ ì§ì€íë€ë©Ž, HTTPSë ë³Žíµ ë€ë¥ž ë구ì ìíŽ **ìžë¶ì ìŒë¡** ì²ëЬë©ëë€.
-ì륌 ë€ìŽ
Traefikì ì¬ì©íë ë€ë¥ž 컚í
ìŽëê° **HTTPS**ì **ìžìŠì**ì **ìë** íëì ì²ëЬí ì ììµëë€.
+ì륌 ë€ìŽ [Traefik](https://traefik.io/)ì ì¬ì©íë ë€ë¥ž 컚í
ìŽëê° **HTTPS**ì **ìžìŠì**ì **ìë** íëì ì²ëЬí ì ììµëë€.
/// tip | í
@@ -558,7 +558,7 @@ CMD ["fastapi", "run", "app/main.py", "--port", "80", "--workers", "4"]
/// info | ì 볎
-Kubernetes륌 ì¬ì©íë€ë©Ž, ìŽë ìë§ë
Init ContainerìŒ ê²ì
ëë€.
+Kubernetes륌 ì¬ì©íë€ë©Ž, ìŽë ìë§ë [Init Container](https://kubernetes.io/docs/concepts/workloads/pods/init-containers/)ìŒ ê²ì
ëë€.
///
@@ -570,7 +570,7 @@ Kubernetes륌 ì¬ì©íë€ë©Ž, ìŽë ìë§ë
tiangolo/uvicorn-gunicorn-fastapi. íì§ë§ ìŽì ë deprecatedëììµëë€. âïž
+곌거ìë ê³µì FastAPI Docker ìŽë¯žì§ê° ìììµëë€: [tiangolo/uvicorn-gunicorn-fastapi](https://github.com/tiangolo/uvicorn-gunicorn-fastapi-docker). íì§ë§ ìŽì ë deprecatedëììµëë€. âïž
ìë§ë ìŽ ë² ìŽì€ ë컀 ìŽë¯žì§(ëë ì ì¬í ë€ë¥ž ìŽë¯žì§)ë **ì¬ì©íì§ ìë** ê²ìŽ ì¢ìµëë€.
@@ -600,7 +600,7 @@ Kubernetes륌 ì¬ì©íë€ë©Ž, ìŽë ìë§ë
uv륌 ì¬ì©íë€ë©Ž,
uv Docker guide륌 ë°ë¥Œ ì ììµëë€.
+íë¡ì ížë¥Œ ì€ì¹íê³ êŽëЬíêž° ìíŽ [uv](https://github.com/astral-sh/uv)륌 ì¬ì©íë€ë©Ž, [uv Docker guide](https://docs.astral.sh/uv/guides/integration/docker/)륌 ë°ë¥Œ ì ììµëë€.
## ììœ { #recap }
diff --git a/docs/ko/docs/deployment/fastapicloud.md b/docs/ko/docs/deployment/fastapicloud.md
index 9a830b1579..a601f5416c 100644
--- a/docs/ko/docs/deployment/fastapicloud.md
+++ b/docs/ko/docs/deployment/fastapicloud.md
@@ -1,6 +1,6 @@
# FastAPI Cloud { #fastapi-cloud }
-**í ë²ì ëª
ë ¹**ìŒë¡ FastAPI ì±ì
FastAPI Cloudì ë°°í¬í ì ììµëë€. ìì§ìŽëŒë©Ž ëêž°ì ëª
ëšì ë±ë¡íŽ ë³Žìžì. ð
+**í ë²ì ëª
ë ¹**ìŒë¡ FastAPI ì±ì [FastAPI Cloud](https://fastapicloud.com)ì ë°°í¬í ì ììµëë€. ìì§ìŽëŒë©Ž ëêž°ì ëª
ëšì ë±ë¡íŽ ë³Žìžì. ð
## ë¡ê·žìžíêž° { #login }
@@ -40,7 +40,7 @@ Deploying to FastAPI Cloud...
## FastAPI Cloud ìê° { #about-fastapi-cloud }
-**
FastAPI Cloud**ë **FastAPI**륌 ë§ë ëìŒí ì ìì íìŽ êµ¬ì¶íìµëë€.
+**[FastAPI Cloud](https://fastapicloud.com)**ë **FastAPI**륌 ë§ë ëìŒí ì ìì íìŽ êµ¬ì¶íìµëë€.
ìµìíì ë
žë ¥ìŒë¡ API륌 **구ì¶**, **ë°°í¬**, **ì ê·Œ**íë 곌ì ì ê°ìíí©ëë€.
diff --git a/docs/ko/docs/deployment/https.md b/docs/ko/docs/deployment/https.md
index bda942af68..06ac147cdc 100644
--- a/docs/ko/docs/deployment/https.md
+++ b/docs/ko/docs/deployment/https.md
@@ -10,7 +10,7 @@ HTTPSë ê·žë¥ âìŒì ž ìê±°ëâ ìë멎 âêºŒì ž ìëâ ê²ìŽëŒ
///
-ìë¹ì êŽì ìì **HTTPSì Ʞ볞ì ë°°ì°ë €ë©Ž**
https://howhttps.works/륌 íìžíìžì.
+ìë¹ì êŽì ìì **HTTPSì Ʞ볞ì ë°°ì°ë €ë©Ž** [https://howhttps.works/](https://howhttps.works/)륌 íìžíìžì.
ìŽì **ê°ë°ì êŽì **ìì HTTPS륌 ìê°í ë ìŒëì ëìŽìŒ í ì¬ë¬ ê°ì§ê° ììµëë€:
@@ -28,13 +28,13 @@ HTTPSë ê·žë¥ âìŒì ž ìê±°ëâ ìë멎 âêºŒì ž ìëâ ê²ìŽëŒ
* **Ʞ볞ì ìŒë¡** ìŽë IP 죌ì íëë¹ **HTTPS ìžìŠì íëë§** ë ì ìë€ë ë»ì
ëë€.
* ìë²ê° ì묎늬 í¬ë , ê·ž ìì ì¬ëа ê° ì í늬ìŒìŽì
ìŽ ì묎늬 ìë ìêŽììµëë€.
* íì§ë§ ìŽì ëí **íŽê²°ì±
**ìŽ ììµëë€.
-* **TLS** íë¡í ìœ(HTTP ìŽì , TCP ë 벚ìì ìíží륌 ì²ëЬíë ê²)ì ëí **íì¥** ì€ì **
SNI**ëŒë ê²ìŽ ììµëë€.
+* **TLS** íë¡í ìœ(HTTP ìŽì , TCP ë 벚ìì ìíží륌 ì²ëЬíë ê²)ì ëí **íì¥** ì€ì **[
SNI](https://en.wikipedia.org/wiki/Server_Name_Indication)**ëŒë ê²ìŽ ììµëë€.
* ìŽ SNI íì¥ì ì¬ì©í멎, ëšìŒ ìë²(**ëšìŒ IP 죌ì**)ìì **ì¬ë¬ HTTPS ìžìŠì**륌 ì¬ì©íê³ **ì¬ë¬ HTTPS ëë©ìž/ì í늬ìŒìŽì
**ì ì ê³µí ì ììµëë€.
* ìŽë¥Œ ìíŽìë ìë²ìì **ê³µê° IP 죌ì**ë¡ ëŠ¬ì€ëíë **íëì** 컎í¬ëíž(íë¡ê·žëš)ê° ìë²ì ìë **몚ë HTTPS ìžìŠì**ì ì ê·Œí ì ììŽìŒ í©ëë€.
* 볎ì ì°ê²°ì ì»ì **ìŽíìë**, íµì íë¡í ìœ ì첎ë **ì¬ì í HTTP**ì
ëë€.
* **HTTP íë¡í ìœ**ë¡ ì ì¡ëëëŒë, ëŽì©ì **ìíží**ëìŽ ììµëë€.
-ìŒë°ì ìŒë¡ ìë²(ëšžì , ížì€íž ë±)ìë **íë¡ê·žëš/HTTP ìë² íë**륌 ì€ííŽ **HTTPS êŽë š ë¶ë¶ ì 첎**륌 êŽëЬíê² í©ëë€: **ìížíë HTTPS ìì²**ì ë°ê³ , ë³µížíë **HTTP ìì²**ì ê°ì ìë²ìì ì€í ì€ìž ì€ì HTTP ì í늬ìŒìŽì
(ìŽ ê²œì° **FastAPI** ì í늬ìŒìŽì
)ìŒë¡ ì ë¬íê³ , ì í늬ìŒìŽì
ì **HTTP ìëµ**ì ë°ì ì ì í **HTTPS ìžìŠì**ë¡ **ìíží**í ë€ **HTTPS**ë¡ íŽëŒìŽìžížì ë€ì 볎ëŽë ìí ì
ëë€. ìŽë° ìë²ë¥Œ íí **
TLS Termination Proxy**ëŒê³ ë¶ëŠ
ëë€.
+ìŒë°ì ìŒë¡ ìë²(ëšžì , ížì€íž ë±)ìë **íë¡ê·žëš/HTTP ìë² íë**륌 ì€ííŽ **HTTPS êŽë š ë¶ë¶ ì 첎**륌 êŽëЬíê² í©ëë€: **ìížíë HTTPS ìì²**ì ë°ê³ , ë³µížíë **HTTP ìì²**ì ê°ì ìë²ìì ì€í ì€ìž ì€ì HTTP ì í늬ìŒìŽì
(ìŽ ê²œì° **FastAPI** ì í늬ìŒìŽì
)ìŒë¡ ì ë¬íê³ , ì í늬ìŒìŽì
ì **HTTP ìëµ**ì ë°ì ì ì í **HTTPS ìžìŠì**ë¡ **ìíží**í ë€ **HTTPS**ë¡ íŽëŒìŽìžížì ë€ì 볎ëŽë ìí ì
ëë€. ìŽë° ìë²ë¥Œ íí **[TLS Termination Proxy](https://en.wikipedia.org/wiki/TLS_termination_proxy)**ëŒê³ ë¶ëŠ
ëë€.
TLS Termination Proxyë¡ ì¬ì©í ì ìë ìµì
ì ë€ì곌 ê°ìµëë€:
@@ -49,7 +49,7 @@ Let's Encrypt ìŽì ìë ìŽë¬í **HTTPS ìžìŠì**ê° ì 뢰í ì ìë
ìžìŠì륌 íëíë 곌ì ì ë²ê±°ë¡ê³ , ꜀ ë§ì ìë¥ ìì
ìŽ íìíìŒë©°, ìžìŠìë ìë¹í ë¹ììµëë€.
-íì§ë§ ê·ž í **
Let's Encrypt**ê° ë§ë€ìŽì¡ìµëë€.
+íì§ë§ ê·ž í **[Let's Encrypt](https://letsencrypt.org/)**ê° ë§ë€ìŽì¡ìµëë€.
ìŽë Linux Foundationì íë¡ì ížì
ëë€. íì€ ìížíì 볎ìì 몚ë ì¬ì©íë **HTTPS ìžìŠì**륌 **묎ë£ë¡**, ìëíë ë°©ììŒë¡ ì ê³µí©ëë€. ìŽ ìžìŠìë€ì ìëª
ìŽ ì§§ê³ (ìœ 3ê°ì) ê·žëì ì íš êž°ê°ìŽ ì§§ì ë§íŒ **ì€ì ë¡ ë³ŽììŽ ë ì¢ìì§êž°ë** í©ëë€.
@@ -200,9 +200,9 @@ TLS Termination Proxyë í©ìë ìíží륌 ì¬ì©íŽ **ìì²ì ë³µíží*
íë¡ì í€ëë ë€ì곌 ê°ìµëë€:
-*
X-Forwarded-For
-*
X-Forwarded-Proto
-*
X-Forwarded-Host
+* [X-Forwarded-For](https://developer.mozilla.org/en-US/docs/Web/HTTP/Reference/Headers/X-Forwarded-For)
+* [X-Forwarded-Proto](https://developer.mozilla.org/en-US/docs/Web/HTTP/Reference/Headers/X-Forwarded-Proto)
+* [X-Forwarded-Host](https://developer.mozilla.org/en-US/docs/Web/HTTP/Reference/Headers/X-Forwarded-Host)
///
@@ -218,7 +218,7 @@ TLS Termination Proxyë í©ìë ìíží륌 ì¬ì©íŽ **ìì²ì ë³µíží*
/// tip | í
-ìŽì ëíŽìë [íë¡ì ë€ìì ì€ííêž° - íë¡ì ì ë¬ í€ë íì±í](../advanced/behind-a-proxy.md#enable-proxy-forwarded-headers){.internal-link target=_blank} 묞ììì ë ìì볌 ì ììµëë€.
+ìŽì ëíŽìë [íë¡ì ë€ìì ì€ííêž° - íë¡ì ì ë¬ í€ë íì±í](../advanced/behind-a-proxy.md#enable-proxy-forwarded-headers) 묞ììì ë ìì볌 ì ììµëë€.
///
diff --git a/docs/ko/docs/deployment/index.md b/docs/ko/docs/deployment/index.md
index e0d2375344..74b3e0c718 100644
--- a/docs/ko/docs/deployment/index.md
+++ b/docs/ko/docs/deployment/index.md
@@ -16,7 +16,7 @@
ì¬ë¬ ë구륌 ì¡°í©íŽ ì§ì **ìë²ë¥Œ ë°°í¬**í ìë ìê³ , ìì
ì ìŒë¶ë¥Œ ëì íŽ ì£Œë **íŽëŒì°ë ìë¹ì€**륌 ì¬ì©í ìë ììŒë©°, ë€ë¥ž ê°ë¥í ì íì§ë ììµëë€.
-ì륌 ë€ìŽ, FastAPI ë€ì ìë ì í¬ íì FastAPIë¡ ìì
íë ê²ê³Œ ê°ì ê°ë°ì 겜íì ì ì§í멎ì, FastAPI ì±ì íŽëŒì°ëì ê°ë¥í í ê°ìíë ë°©ììŒë¡ ë°°í¬í ì ìëë¡
**FastAPI Cloud**륌 ë§ë€ììµëë€.
+ì륌 ë€ìŽ, FastAPI ë€ì ìë ì í¬ íì FastAPIë¡ ìì
íë ê²ê³Œ ê°ì ê°ë°ì 겜íì ì ì§í멎ì, FastAPI ì±ì íŽëŒì°ëì ê°ë¥í í ê°ìíë ë°©ììŒë¡ ë°°í¬í ì ìëë¡ [**FastAPI Cloud**](https://fastapicloud.com)륌 ë§ë€ììµëë€.
**FastAPI** ì í늬ìŒìŽì
ì ë°°í¬í ë ìë§ ìŒëì ëìŽìŒ í ëª ê°ì§ 죌ì ê°ë
ì 볎ì¬ëëŠ¬ê² ìµëë€(ëë¶ë¶ì ë€ë¥ž ì íì ì¹ ì í늬ìŒìŽì
ìë ì ì©ë©ëë€).
diff --git a/docs/ko/docs/deployment/manually.md b/docs/ko/docs/deployment/manually.md
index 93b1e76115..7199686829 100644
--- a/docs/ko/docs/deployment/manually.md
+++ b/docs/ko/docs/deployment/manually.md
@@ -52,11 +52,11 @@ FastAPIë
Uvicorn: ê³ ì±ë¥ ASGI ìë².
-* Hypercorn: HTTP/2 ë° Trio ë± ì¬ë¬ êž°ë¥ê³Œ ížíëë ASGI ìë².
-* Daphne: Django Channels륌 ìíŽ ë§ë€ìŽì§ ASGI ìë².
-* Granian: Python ì í늬ìŒìŽì
ì ìí Rust HTTP ìë².
-* NGINX Unit: NGINX Unitì ê°ë³ê³ ë€ì©ëë¡ ì¬ì©í ì ìë ì¹ ì í늬ìŒìŽì
ë°íìì
ëë€.
+* [Uvicorn](https://www.uvicorn.dev/): ê³ ì±ë¥ ASGI ìë².
+* [Hypercorn](https://hypercorn.readthedocs.io/): HTTP/2 ë° Trio ë± ì¬ë¬ êž°ë¥ê³Œ ížíëë ASGI ìë².
+* [Daphne](https://github.com/django/daphne): Django Channels륌 ìíŽ ë§ë€ìŽì§ ASGI ìë².
+* [Granian](https://github.com/emmett-framework/granian): Python ì í늬ìŒìŽì
ì ìí Rust HTTP ìë².
+* [NGINX Unit](https://unit.nginx.org/howto/fastapi/): NGINX Unitì ê°ë³ê³ ë€ì©ëë¡ ì¬ì©í ì ìë ì¹ ì í늬ìŒìŽì
ë°íìì
ëë€.
## ìë² ëšžì 곌 ìë² íë¡ê·žëš { #server-machine-and-server-program }
@@ -74,7 +74,7 @@ FastAPI륌 ì€ì¹í멎 íë¡ëì
ìë²ìž UvicornìŽ íšê» ì€ì¹ëë©°, `
íì§ë§ ASGI ìë²ë¥Œ ìëìŒë¡ ì€ì¹í ìë ììµëë€.
-[ê°ì í겜](../virtual-environments.md){.internal-link target=_blank}ì ë§ë€ê³ íì±íí ë€ì, ìë² ì í늬ìŒìŽì
ì ì€ì¹íìžì.
+[ê°ì í겜](../virtual-environments.md)ì ë§ë€ê³ íì±íí ë€ì, ìë² ì í늬ìŒìŽì
ì ì€ì¹íìžì.
ì륌 ë€ìŽ Uvicornì ì€ì¹íë €ë©Ž:
@@ -94,7 +94,7 @@ $ pip install "uvicorn[standard]"
`standard`륌 ì¶ê°í멎 UvicornìŽ ê¶ì¥ëë ì¶ê° ìì¡Žì± ëª ê°ì§ë¥Œ ì€ì¹íê³ ì¬ì©í©ëë€.
-ì¬êž°ìë `asyncio`륌 ê³ ì±ë¥ìŒë¡ ë첎í ì ìë ëë¡ìž ë첎ì¬ìž `uvloop`ê° í¬íšëë©°, í° ëìì± ì±ë¥ í¥ìì ì ê³µí©ëë€.
+ì¬êž°ìë `uvloop`ê° í¬íšëë©°, ìŽë `asyncio`륌 ê³ ì±ë¥ìŒë¡ ë첎í ì ìë ëë¡ìž ë첎ì¬ë¡, í° ëìì± ì±ë¥ í¥ìì ì ê³µí©ëë€.
`pip install "fastapi[standard]"` ê°ì ë°©ììŒë¡ FastAPI륌 ì€ì¹í멎 `uvicorn[standard]`ë íšê» ì€ì¹ë©ëë€.
diff --git a/docs/ko/docs/deployment/server-workers.md b/docs/ko/docs/deployment/server-workers.md
index 1be102925e..9cc1a9a816 100644
--- a/docs/ko/docs/deployment/server-workers.md
+++ b/docs/ko/docs/deployment/server-workers.md
@@ -13,13 +13,13 @@
ì í늬ìŒìŽì
ì ë°°í¬í ëë **ë€ì€ ìœìŽ**륌 íì©íê³ ë ë§ì ìì²ì ì²ëЬí ì ìëë¡ **íë¡ìžì€ ë³µì **륌 íê³ ì¶ì ê°ë¥ì±ìŽ íœëë€.
-ìŽì ì¥ì [ë°°í¬ ê°ë
ë€](concepts.md){.internal-link target=_blank}ìì 볞 ê²ì²ëŒ, ì¬ì©í ì ìë ì ëµìŽ ì¬ë¬ ê°ì§ ììµëë€.
+ìŽì ì¥ì [ë°°í¬ ê°ë
ë€](concepts.md)ìì 볞 ê²ì²ëŒ, ì¬ì©í ì ìë ì ëµìŽ ì¬ë¬ ê°ì§ ììµëë€.
ì¬êž°ìë `fastapi` ëª
ë ¹ìŽë¥Œ ì¬ì©íê±°ë `uvicorn` ëª
ë ¹ìŽë¥Œ ì§ì ì¬ì©íŽì, **ì컀 íë¡ìžì€**ì íšê» **Uvicorn**ì ì¬ì©íë ë°©ë²ì 볎ì¬ëëŠ¬ê² ìµëë€.
/// info | ì 볎
-Dockerë Kubernetes ê°ì 컚í
ìŽë륌 ì¬ì©íê³ ìë€ë©Ž, ë€ì ì¥ìž [컚í
ìŽëììì FastAPI - ë컀](docker.md){.internal-link target=_blank}ìì ë ììží ì€ëª
íê² ìµëë€.
+Dockerë Kubernetes ê°ì 컚í
ìŽë륌 ì¬ì©íê³ ìë€ë©Ž, ë€ì ì¥ìž [컚í
ìŽëììì FastAPI - ë컀](docker.md)ìì ë ììží ì€ëª
íê² ìµëë€.
í¹í **Kubernetes**ìì ì€íí ëë ì컀륌 ì¬ì©íꞰ볎ë€ë, ëì **컚í
ìŽëë¹ ëšìŒ Uvicorn íë¡ìžì€ íë**륌 ì€ííê³ ì¶ì ê°ë¥ì±ìŽ í¬ì§ë§, íŽë¹ ëŽì©ì ê·ž ì¥ì ë€ìì ì€ëª
íê² ìµëë€.
@@ -126,7 +126,7 @@ $ uvicorn main:app --host 0.0.0.0 --port 8080 --workers 4
## 컚í
ìŽëì ë컀 { #containers-and-docker }
-ë€ì ì¥ìž [컚í
ìŽëììì FastAPI - ë컀](docker.md){.internal-link target=_blank}ììë ë€ë¥ž **ë°°í¬ ê°ë
ë€**ì ì²ëЬíêž° ìíŽ ì¬ì©í ì ìë ëª ê°ì§ ì ëµì ì€ëª
íê² ìµëë€.
+ë€ì ì¥ìž [컚í
ìŽëììì FastAPI - ë컀](docker.md)ììë ë€ë¥ž **ë°°í¬ ê°ë
ë€**ì ì²ëЬíêž° ìíŽ ì¬ì©í ì ìë ëª ê°ì§ ì ëµì ì€ëª
íê² ìµëë€.
ëšìŒ Uvicorn íë¡ìžì€ë¥Œ ì€ííêž° ìíŽ, **ì²ìë¶í° ì¬ë¬ë¶ë§ì ìŽë¯žì§ë¥Œ ì§ì ë¹ë**íë ë°©ë²ì 볎ì¬ëëŠ¬ê² ìµëë€. ìŽë ê°ëší 곌ì ìŽë©°, **Kubernetes** ê°ì ë¶ì° 컚í
ìŽë êŽëЬ ìì€í
ì ì¬ì©í ë ìë§ë ìŽë ê² íê³ ì¶ì ê²ì
ëë€.
diff --git a/docs/ko/docs/deployment/versions.md b/docs/ko/docs/deployment/versions.md
index b94832aa82..fa1df45c30 100644
--- a/docs/ko/docs/deployment/versions.md
+++ b/docs/ko/docs/deployment/versions.md
@@ -4,7 +4,7 @@
ìë¡ìŽ êž°ë¥ìŽ ì죌 ì¶ê°ëê³ , ë²ê·žê° ê·ì¹ì ìŒë¡ ìì ëë©°, ìœëë ê³ìíŽì ì§ìì ìŒë¡ ê°ì ëê³ ììµëë€.
-ê·žëì íì¬ ë²ì ìŽ ìì§ `0.x.x`ìž ê²ì
ëë€. ìŽë ê° ë²ì ìŽ ì ì¬ì ìŒë¡ íì ížíì±ìŽ ê¹šì§ë ë³ê²œì í¬íší ì ììì ë°ìí©ëë€. ìŽë Semantic Versioning êŽë¡ë¥Œ ë°ëŠ
ëë€.
+ê·žëì íì¬ ë²ì ìŽ ìì§ `0.x.x`ìž ê²ì
ëë€. ìŽë ê° ë²ì ìŽ ì ì¬ì ìŒë¡ íì ížíì±ìŽ ê¹šì§ë ë³ê²œì í¬íší ì ììì ë°ìí©ëë€. ìŽë [Semantic Versioning](https://semver.org/) êŽë¡ë¥Œ ë°ëŠ
ëë€.
ì§êž ë°ë¡ **FastAPI**ë¡ íë¡ëì
ì í늬ìŒìŽì
ì ë§ë€ ì ììµëë€(ê·žëŠ¬ê³ ìë§ë íëì ê·žë ê² íŽì€ì
šì ê²ì
ëë€). ë€ë§ ëëšžì§ ìœëì íšê» ì¬ë°ë¥Žê² ëìíë ë²ì ì ì¬ì©íê³ ìëì§ íìžíêž°ë§ í멎 ë©ëë€.
@@ -34,7 +34,7 @@ fastapi[standard]>=0.112.0,<0.113.0
## ìŽì© ê°ë¥í ë²ì ë€ { #available-versions }
-ì¬ì© ê°ë¥í ë²ì (ì: íì¬ ìµì ë²ì ìŽ ë¬Žììžì§ íìžíêž° ìíŽ)ì [ëŠŽëŠ¬ì€ ë
žíž](../release-notes.md){.internal-link target=_blank}ìì íìží ì ììµëë€.
+ì¬ì© ê°ë¥í ë²ì (ì: íì¬ ìµì ë²ì ìŽ ë¬Žììžì§ íìžíêž° ìíŽ)ì [ëŠŽëŠ¬ì€ ë
žíž](../release-notes.md)ìì íìží ì ììµëë€.
## ë²ì ë€ì ëíŽ { #about-versions }
@@ -66,7 +66,7 @@ fastapi>=0.45.0,<0.46.0
ì±ì í
ì€ížë¥Œ ì¶ê°íŽìŒ í©ëë€.
-**FastAPI**ììë ë§€ì° ìœìµëë€(Starlette ëë¶ì). 묞ì륌 íìžíŽ ë³Žìžì: [í
ì€íž](../tutorial/testing.md){.internal-link target=_blank}
+**FastAPI**ììë ë§€ì° ìœìµëë€(Starlette ëë¶ì). 묞ì륌 íìžíŽ ë³Žìžì: [í
ì€íž](../tutorial/testing.md)
í
ì€ížë¥Œ ê°ì¶ ë€ìë **FastAPI** ë²ì ì ë ìµì ë²ì ìŒë¡ ì
ê·žë ìŽëíê³ , í
ì€ížë¥Œ ì€ííì¬ ëªšë ìœëê° ì¬ë°ë¥Žê² ëìíëì§ íìžíìžì.
diff --git a/docs/ko/docs/environment-variables.md b/docs/ko/docs/environment-variables.md
index e8809573fd..5b55960c8b 100644
--- a/docs/ko/docs/environment-variables.md
+++ b/docs/ko/docs/environment-variables.md
@@ -65,7 +65,7 @@ print(f"Hello {name} from Python")
/// tip | í
-`os.getenv()` ì ë ë²ì§ž ìžìë ë°íí Ʞ볞ê°ì
ëë€.
+[`os.getenv()`](https://docs.python.org/3.8/library/os.html#os.getenv) ì ë ë²ì§ž ìžìë ë°íí Ʞ볞ê°ì
ëë€.
ì ê³µíì§ ììŒë©Ž Ʞ볞ê°ì `None`ìŽë©°, ì¬êž°ìë ì¬ì©í Ʞ볞ê°ìŒë¡ `"World"`륌 ì ê³µí©ëë€.
@@ -153,7 +153,7 @@ Hello World from Python
/// tip | í
-The Twelve-Factor App: Config ìì ì¢ ë ììží ìì볌 ì ììµëë€.
+[The Twelve-Factor App: Config](https://12factor.net/config) ìì ì¢ ë ììží ìì볌 ì ììµëë€.
///
@@ -163,7 +163,7 @@ Hello World from Python
ìŠ, íìŽì¬ìì í겜 ë³ìë¡ë¶í° ìœì **몚ë ê°**ì **`str`**ìŽ ëê³ , ë€ë¥ž íì
ìŒë¡ì ë³íìŽë ê²ìŠì ìœëìì ìííŽìŒ í©ëë€.
-**ì í늬ìŒìŽì
ì€ì **ì ì²ëЬíêž° ìí í겜 ë³ì ì¬ì©ì ëí ììží ëŽì©ì [ê³ êž ì¬ì©ì ê°ìŽë - ì€ì ë° í겜 ë³ì](./advanced/settings.md){.internal-link target=_blank} ìì íìží ì ììµëë€.
+**ì í늬ìŒìŽì
ì€ì **ì ì²ëЬíêž° ìí í겜 ë³ì ì¬ì©ì ëí ììží ëŽì©ì [ê³ êž ì¬ì©ì ê°ìŽë - ì€ì ë° í겜 ë³ì](./advanced/settings.md) ìì íìží ì ììµëë€.
## `PATH` í겜 ë³ì { #path-environment-variable }
@@ -285,13 +285,13 @@ $ C:\opt\custompython\bin\python
////
-ìŽ ì 볎ë [ê°ì í겜](virtual-environments.md){.internal-link target=_blank} ì ëíŽ ìì볌 ë ì ì©í ê²ì
ëë€.
+ìŽ ì 볎ë [ê°ì í겜](virtual-environments.md) ì ëíŽ ìì볌 ë ì ì©í ê²ì
ëë€.
## ê²°ë¡ { #conclusion }
ìŽ ë¬žì륌 íµíŽ **í겜 ë³ì**ê° ë¬ŽììŽê³ íìŽì¬ìì ìŽë»ê² ì¬ì©íëì§ êž°ë³žì ìŒë¡ ìŽíŽíì
šì ê²ëë€.
-ëí í겜 ë³ìì ëí ìí€íŒëììì ìŽì ëíŽ ììží ìì볌 ì ììµëë€.
+ëí [í겜 ë³ìì ëí ìí€íŒëì](https://en.wikipedia.org/wiki/Environment_variable)ìì ìŽì ëíŽ ììží ìì볌 ì ììµëë€.
ë§ì 겜ì°ìì, í겜 ë³ìê° ìŽë»ê² ì ì©íê³ ì ì© ê°ë¥íì§ ë°ë¡ ëª
ííê² ì ìë ììµëë€. íì§ë§ ê°ë°í ë ë€ìí ìë늬ì€ìì ê³ì ëíëë¯ë¡ ìŽì ëíŽ ìë ê²ìŽ ì¢ìµëë€.
diff --git a/docs/ko/docs/fastapi-cli.md b/docs/ko/docs/fastapi-cli.md
index 0d87ce3219..bfa16e8b38 100644
--- a/docs/ko/docs/fastapi-cli.md
+++ b/docs/ko/docs/fastapi-cli.md
@@ -1,15 +1,15 @@
# FastAPI CLI { #fastapi-cli }
-**FastAPI CLI**ë FastAPI ì í늬ìŒìŽì
ì ìë¹íê³ , FastAPI íë¡ì ížë¥Œ êŽëЬíë ë± ë€ìí ìì
ì ì¬ì©í ì ìë 컀맚ë ëŒìž íë¡ê·žëšì
ëë€.
+**FastAPI CLI**ë FastAPI ì í늬ìŒìŽì
ì ìë¹íê³ , FastAPI íë¡ì ížë¥Œ êŽëЬíë ë± ë€ìí ìì
ì ì¬ì©í ì ìë 컀맚ë ëŒìž íë¡ê·žëšì
ëë€.
-FastAPI륌 ì€ì¹í ë(ì: `pip install "fastapi[standard]"`), `fastapi-cli`ëŒë íší€ì§ê° í¬íšëë©°, ìŽ íší€ì§ë í°ë¯žëìì `fastapi` ëª
ë ¹ìŽë¥Œ ì ê³µí©ëë€.
+FastAPI륌 ì€ì¹í멎(ì: `pip install "fastapi[standard]"`) í°ë¯žëìì ì€íí ì ìë 컀맚ë ëŒìž íë¡ê·žëšìŽ íšê» ì ê³µë©ëë€.
ê°ë°ì©ìŒë¡ FastAPI ì í늬ìŒìŽì
ì ì€ííë €ë©Ž `fastapi dev` ëª
ë ¹ìŽë¥Œ ì¬ì©í ì ììµëë€:
```console
-$
fastapi dev
main.py
+$
fastapi dev
FastAPI Starting development server ð
@@ -46,13 +46,66 @@ $
fastapi dev
Uvicornì ì¬ì©í©ëë€. ð
+ëí [VS Code íì¥](editor-support.md)ìŽë [FastAPI Cloud](https://fastapicloud.com) ê°ì ë€ë¥ž ë구ììë ìŽë¥Œ ì°Ÿì§ ëª»í ìë ììŒë¯ë¡, `pyproject.toml`ì `entrypoint`륌 ì¬ì©íë ê²ì ê¶ì¥í©ëë€.
## `fastapi dev` { #fastapi-dev }
@@ -62,7 +115,7 @@ FastAPI CLIë Python íë¡ê·žëšì 겜ë¡(ì: `main.py`)륌 ë°ì `FastAPI`
## `fastapi run` { #fastapi-run }
-`fastapi run`ì ì€íí멎 Ʞ볞ì ìŒë¡ íë¡ëì
몚ëë¡ FastAPIê° ììë©ëë€.
+`fastapi run`ì ì€íí멎 íë¡ëì
몚ëë¡ FastAPIê° ììë©ëë€.
Ʞ볞ì ìŒë¡ **auto-reload**ë ë¹íì±íëìŽ ììµëë€. ëí ì¬ì© ê°ë¥í 몚ë IP 죌ì륌 ì믞íë `0.0.0.0`ìì ì°ê²°ì ëêž°íë¯ë¡, íŽë¹ 컎íší°ì íµì í ì ìë ë구ìê²ë ê³µê°ì ìŒë¡ ì ê·Œ ê°ë¥íŽì§ëë€. ë³Žíµ íë¡ëì
ììë ìŽë ê² ì€ííë©°, ì륌 ë€ìŽ ì»ší
ìŽëìì ìŽë° ë°©ììŒë¡ ì€íí©ëë€.
@@ -70,6 +123,6 @@ FastAPI CLIë Python íë¡ê·žëšì 겜ë¡(ì: `main.py`)륌 ë°ì `FastAPI`
/// tip | í
-ììží ëŽì©ì [ë°°í¬ ë¬žì](deployment/index.md){.internal-link target=_blank}ìì íìží ì ììµëë€.
+ììží ëŽì©ì [ë°°í¬ ë¬žì](deployment/index.md)ìì íìží ì ììµëë€.
///
diff --git a/docs/ko/docs/features.md b/docs/ko/docs/features.md
index b511ae4707..0a5aa69436 100644
--- a/docs/ko/docs/features.md
+++ b/docs/ko/docs/features.md
@@ -6,8 +6,8 @@
### ê°ë°©í íì€ì êž°ë°ìŒë¡ { #based-on-open-standards }
-* OpenAPI: ê²œë¡ ì²ëЬ, ë§€ê°ë³ì, ìì² ë³žë¬ž, 볎ì ë±ì ì ìžì í¬íšíì¬ API륌 ìì±í©ëë€.
-* JSON Schema륌 ì¬ì©í ìë ë°ìŽí° ëªšëž ë¬žìí(OpenAPI ìì²Žê° JSON Schema륌 êž°ë°ìŒë¡ íêž° ë묞ì
ëë€).
+* [**OpenAPI**](https://github.com/OAI/OpenAPI-Specification): ê²œë¡ ì²ëЬ, ë§€ê°ë³ì, ìì² ë³žë¬ž, 볎ì ë±ì ì ìžì í¬íšíì¬ API륌 ìì±í©ëë€.
+* [**JSON Schema**](https://json-schema.org/)륌 ì¬ì©í ìë ë°ìŽí° ëªšëž ë¬žìí(OpenAPI ìì²Žê° JSON Schema륌 êž°ë°ìŒë¡ íêž° ë묞ì
ëë€).
* ëšìí ë ì¬ë €ì ë§ë¶ìž ë ìŽìŽê° ìëëŒ, ìžì¬í ê²í 륌 ê±°ì¹ ë€ ìŽë¬í íì€ì ì€ì¬ìŒë¡ ì€ê³ëììµëë€.
* ìŽë ëí ë€ìí ìžìŽë¡ ìë **íŽëŒìŽìžíž ìœë ìì±**ì ì¬ì©í ì ìê² íŽì€ëë€.
@@ -15,19 +15,19 @@
ëíí API 묞ìì íìì© ì¹ ì¬ì©ì ìží°íìŽì€ë¥Œ ì ê³µí©ëë€. íë ììí¬ê° OpenAPI륌 êž°ë°ìŒë¡ íêž°ì ì¬ë¬ ìµì
ìŽ ììŒë©°, Ʞ볞ìŒë¡ 2ê°ì§ê° í¬íšë©ëë€.
-* ëíí íììŽ ê°ë¥í Swagger UIë¡ ëžëŒì°ì ìì ì§ì API륌 ížì¶íê³ í
ì€íží ì ììµëë€.
+* [**Swagger UI**](https://github.com/swagger-api/swagger-ui)ë¡ ëíí íììŽ ê°ë¥íë©° ëžëŒì°ì ìì ì§ì API륌 ížì¶íê³ í
ì€íží ì ììµëë€.

-* ReDocì ìŽì©í ë첎 API 묞ìí.
+* [**ReDoc**](https://github.com/Rebilly/ReDoc)ì ìŽì©í ë첎 API 묞ìí.

### ê·žì íë íìŽì¬ { #just-modern-python }
-( Pydantic ëë¶ì) 몚ë ê²ìŽ íì€ **Python íì
** ì ìžì êž°ë°ìŒë¡ í©ëë€. ìë¡ ë°°ìž ë¬žë²ìŽ ììµëë€. ê·žì íì€ì ìž íë íìŽì¬ì
ëë€.
+(Pydantic ëë¶ì) 몚ë ê²ìŽ íì€ **Python íì
** ì ìžì êž°ë°ìŒë¡ í©ëë€. ìë¡ ë°°ìž ë¬žë²ìŽ ììµëë€. ê·žì íì€ì ìž íë íìŽì¬ì
ëë€.
-Python íì
ì ìŽë»ê² ì¬ì©íëì§ 2ë¶ ì ë ë³µìµìŽ íìíë€ë©Ž(FastAPI륌 ì¬ì©íì§ ìëëŒë), ë€ìì ì§§ì ììµì륌 íìžíìžì: [Python íì
](python-types.md){.internal-link target=_blank}.
+Python íì
ì ìŽë»ê² ì¬ì©íëì§ 2ë¶ ì ë ë³µìµìŽ íìíë€ë©Ž(FastAPI륌 ì¬ì©íì§ ìëëŒë), ë€ìì ì§§ì ììµì륌 íìžíìžì: [Python íì
](python-types.md).
ì¬ë¬ë¶ì íì
ìŽ ìë íì€ Pythonì ë€ì곌 ê°ìŽ ìì±í©ëë€:
@@ -75,7 +75,7 @@ my_second_user: User = User(**second_user_data)
íë ììí¬ ì 첎ë ì¬ì©íêž° ìœê³ ì§êŽì ìŒë¡ ì€ê³ëììŒë©°, ìµê³ ì ê°ë° 겜íì 볎ì¥íêž° ìíŽ ê°ë°ì ììíêž°ë ì ì 몚ë ê²°ì ì ì¬ë¬ ížì§êž°ìì í
ì€ížëììµëë€.
-Python ê°ë°ì ì€ë¬žì¡°ì¬ìì ê°ì¥ ë§ìŽ ì¬ì©ëë êž°ë¥ ì€ íëê° "ìë ìì±"ìŽëŒë ì ìŽ ë¶ëª
í©ëë€.
+Python ê°ë°ì ì€ë¬žì¡°ì¬ìì [ê°ì¥ ë§ìŽ ì¬ì©ëë êž°ë¥ ì€ íëê° "ìë ìì±"ìŽëŒë ì ](https://www.jetbrains.com/research/python-developers-survey-2017/#tools-and-features)ìŽ ë¶ëª
í©ëë€.
**FastAPI** íë ììí¬ ì 첎ë ìŽë¥Œ ë§ì¡±íêž° ìíŽ ë§ë€ìŽì¡ìµëë€. ìë ìì±ì ìŽëìë ìëí©ëë€.
@@ -83,11 +83,11 @@ Python ê°ë°ì ì€ë¬žì¡°ì¬ìì Visual Studio Codeìì:
+* [Visual Studio Code](https://code.visualstudio.com/)ìì:

-* PyCharmìì:
+* [PyCharm](https://www.jetbrains.com/pycharm/)ìì:

@@ -124,7 +124,7 @@ Python ê°ë°ì ì€ë¬žì¡°ì¬ìì Starletteì ìì í ížíëë©°(ëí ìŽë¥Œ êž°ë°ìŒë¡ í©ëë€). ë°ëŒì ì¶ê°ë¡ ê°ì§ê³ ìë Starlette ìœëë 몚ë ëìí©ëë€.
+**FastAPI**ë [**Starlette**](https://www.starlette.dev/)ì ìì í ížíëë©°(ëí ìŽë¥Œ êž°ë°ìŒë¡ í©ëë€). ë°ëŒì ì¶ê°ë¡ ê°ì§ê³ ìë Starlette ìœëë 몚ë ëìí©ëë€.
`FastAPI`ë ì€ì ë¡ `Starlette`ì íì íŽëì€ì
ëë€. ê·žëì Starletteì ìŽë¯ž ìê³ ìê±°ë ì¬ì©íê³ ìë€ë©Ž, ëë¶ë¶ì êž°ë¥ìŽ ê°ì ë°©ììŒë¡ ëìí ê²ì
ëë€.
**FastAPI**륌 ì¬ì©í멎 **Starlette**ì 몚ë êž°ë¥ì ì»ê² ë©ëë€(FastAPIë Starletteì ê°ë ¥í êž°ë¥ì ëí ê²ì
ëë€):
-* ì ë§ ìžìì ìž ì±ë¥. **NodeJS**ì **Go**ì ë²êžê°ë, ì¬ì© ê°ë¥í ê°ì¥ ë¹ ë¥ž Python íë ììí¬ ì€ íëì
ëë€.
+* ì ë§ ìžìì ìž ì±ë¥. [**NodeJS**ì **Go**ì ë²êžê°ë, ì¬ì© ê°ë¥í ê°ì¥ ë¹ ë¥ž Python íë ììí¬ ì€ íëì
ëë€](https://github.com/encode/starlette#performance).
* **WebSocket** ì§ì.
* íë¡ìžì€ ëŽ ë°±ê·žëŒìŽë ìì
.
* ìì ë° ì¢
ë£ ìŽë²€íž.
@@ -177,7 +177,7 @@ FastAPIë ì¬ì©íêž° ë§€ì° ìœì§ë§, ë§€ì° ê°ë ¥í **FastAPI**ì ëíŽ ížì íê³ ì ì ë€ë¥ž ì¬ëë€ìê² FastAPIê° ë§ìì ëë ìŽì 륌 ìë €ì£Œìžì. ð
+[**FastAPI**ì ëíŽ ížì](https://x.com/compose/tweet?text=I'm loving @fastapi because... https://github.com/fastapi/fastapi) íê³ ì ì ë€ë¥ž ì¬ëë€ìê² FastAPIê° ë§ìì ëë ìŽì 륌 ìë €ì£Œìžì. ð
**FastAPI**ê° ìŽë»ê² ì¬ì©ëê³ ìëì§, ìŽë€ ì ìŽ ë§ìì ë€ìëì§, ìŽë€ íë¡ì íž/íì¬ìì ì¬ì©íê³ ìëì§ ë±ì ëíŽ ë£ê³ ì¶ìµëë€.
## FastAPIì í¬ííêž° { #vote-for-fastapi }
-* Slantìì **FastAPI** ì ëíŽ í¬ííììì€.
-* AlternativeToìì **FastAPI** ì ëíŽ í¬ííììì€.
-* StackShareìì **FastAPI**륌 ì¬ì©íë€ê³ íìíìžì.
+* [Slantìì **FastAPI** ì ëíŽ í¬ííììì€](https://www.slant.co/options/34241/~fastapi-review).
+* [AlternativeToìì **FastAPI** ì ëíŽ í¬ííììì€](https://alternativeto.net/software/fastapi/about/).
+* [StackShareìì **FastAPI**륌 ì¬ì©íë€ê³ íìíìžì](https://stackshare.io/pypi-fastapi).
## GitHubìì ì§ë¬žìŒë¡ ë€ë¥ž ì¬ë ëêž° { #help-others-with-questions-in-github }
ë€ë¥ž ì¬ëë€ì ì§ë¬žì ëìì ì€ ì ììµëë€:
-* GitHub Discussions
-* GitHub Issues
+* [GitHub Discussions](https://github.com/fastapi/fastapi/discussions/categories/questions?discussions_q=category%3AQuestions+is%3Aunanswered)
+* [GitHub Issues](https://github.com/fastapi/fastapi/issues?q=is%3Aissue+is%3Aopen+sort%3Aupdated-desc+label%3Aquestion+-label%3Aanswered+)
ë§ì 겜ì°, ì¬ë¬ë¶ì ìŽë¯ž ê·ž ì§ë¬žì ëí ëµì ìê³ ìì ìë ììµëë€. ð€
-ë§ìœ ë§ì ì¬ëë€ì ì§ë¬žì ëìì€ë€ë©Ž, ê³µìì ìž [FastAPI ì 묞ê°](fastapi-people.md#fastapi-experts){.internal-link target=_blank}ê° ë ê²ì
ëë€. ð
+ë§ìœ ë§ì ì¬ëë€ì ì§ë¬žì ëìì€ë€ë©Ž, ê³µìì ìž [FastAPI ì 묞ê°](fastapi-people.md#fastapi-experts)ê° ë ê²ì
ëë€. ð
ê°ì¥ ì€ìí ì ì: ì¹ì íë €ê³ ë
žë ¥íë ê²ì
ëë€. ì¬ëë€ì ì¢ì ê°ì ìê³ ì€ë©°, ë§ì ê²œì° ìµì ì ë°©ììŒë¡ ì§ë¬žíì§ ìì ìë ììµëë€. íì§ë§ ìµëí ì¹ì íê² ëíë €ê³ ë
žë ¥íìžì. ð€
@@ -104,7 +104,7 @@ GitHubìì FastAPI륌 "watch"í ì ììµëë€ (ì€ë¥žìªœ ìëš "watch"
ë§ì 겜ì°, ìœëì ìŒë¶ë§ ë³µì¬íŽì ì¬ëЬì§ë§, ê·žê²ë§ìŒë¡ë **묞ì 륌 ì¬í**íêž°ì ì¶©ë¶íì§ ììµëë€.
-* ì§ë¬žììê² ìµìíì ì¬í ê°ë¥í ìì 륌 ì ê³µíŽë¬ëŒê³ ìì²í ì ììµëë€. ìŽë ê² í멎 ìœë륌 **ë³µì¬-ë¶ì¬ë£êž°**íì¬ ë¡ì»¬ìì ì€ííê³ , ì§ë¬žìê° ë³Žê³ ìë ê²ê³Œ ëìŒí ì€ë¥ë ëìì íìžíê±°ë ì¬ì© ì¬ë¡ë¥Œ ë ì ìŽíŽí ì ììµëë€.
+* ì§ë¬žììê² [ìµìíì ì¬í ê°ë¥í ìì ](https://stackoverflow.com/help/minimal-reproducible-example)륌 ì ê³µíŽë¬ëŒê³ ìì²í ì ììµëë€. ìŽë ê² í멎 ìœë륌 **ë³µì¬-ë¶ì¬ë£êž°**íì¬ ë¡ì»¬ìì ì€ííê³ , ì§ë¬žìê° ë³Žê³ ìë ê²ê³Œ ëìŒí ì€ë¥ë ëìì íìžíê±°ë ì¬ì© ì¬ë¡ë¥Œ ë ì ìŽíŽí ì ììµëë€.
* ëê·žë¬ìŽ ë§ììŽ ë ë€ë©Ž, 묞ì ì€ëª
ë§ì êž°ë°ìŒë¡ ì§ì **ìì 륌 ë§ë€ìŽ**볌 ìë ììµëë€. ë€ë§ ìŽë ìê°ìŽ ë§ìŽ ê±žëŠŽ ì ììŒë¯ë¡, 뚌ì 묞ì 륌 ëª
íí íŽë¬ëŒê³ ìì²íë ê²ìŽ ë ëì ì ìë€ë ì ì êž°ìµíìžì.
@@ -125,7 +125,7 @@ GitHubìì FastAPI륌 "watch"í ì ììµëë€ (ì€ë¥žìªœ ìëš "watch"
## GitHub ì ì¥ì 볎Ʞ { #watch-the-github-repository }
-GitHubìì FastAPI륌 "watch"í ì ììµëë€ (ì€ë¥žìªœ ìëš "watch" ë²íŒì íŽëŠ): https://github.com/fastapi/fastapi. ð
+GitHubìì FastAPI륌 "watch"í ì ììµëë€ (ì€ë¥žìªœ ìëš "watch" ë²íŒì íŽëŠ): [https://github.com/fastapi/fastapi](https://github.com/fastapi/fastapi). ð
"Releases only" ëì "Watching"ì ì íí멎 ëêµ°ê°ê° ì ìŽìë ì§ë¬žì ë§ë€ ë ì늌ì ë°ê² ë©ëë€. ëí ì ìŽì, ëì€ì»€ì
, PR ë±ë§ ì늌ì ë°ëë¡ ì§ì í ìë ììµëë€.
@@ -133,7 +133,7 @@ GitHubìì FastAPI륌 "watch"í ì ììµëë€ (ì€ë¥žìªœ ìëš "watch"
## ì§ë¬žíêž° { #ask-questions }
-GitHub ì ì¥ììì ì ì§ë¬žì ìì±í ì ììµëë€. ì륌 ë€ë©Ž ë€ì곌 ê°ìµëë€:
+GitHub ì ì¥ììì [ì ì§ë¬žì ìì±](https://github.com/fastapi/fastapi/discussions/new?category=questions)í ì ììµëë€. ì륌 ë€ë©Ž ë€ì곌 ê°ìµëë€:
* **ì§ë¬ž**ì íê±°ë **묞ì **ì ëíŽ ì§ë¬ží©ëë€.
* ìë¡ìŽ **êž°ë¥**ì ì ì í©ëë€.
@@ -196,12 +196,12 @@ Pull request륌 늬뷰í ë ê³ ë €íŽìŒ í ì¬í곌 ë°©ë²ì ë€ì곌 ê°
## Pull Request ë§ë€êž° { #create-a-pull-request }
-Pull Requests륌 ìŽì©íì¬ ìì€ ìœëì [êž°ì¬](contributing.md){.internal-link target=_blank}í ì ììµëë€. ì륌 ë€ë©Ž ë€ì곌 ê°ìµëë€:
+Pull Requests륌 ìŽì©íì¬ ìì€ ìœëì [êž°ì¬](contributing.md)í ì ììµëë€. ì륌 ë€ë©Ž ë€ì곌 ê°ìµëë€:
* 묞ììì ë°ê²¬í ì€í륌 ìì í ë.
-* FastAPIì ëí êž, ë¹ëì€, íìºì€ížë¥Œ ìì±íê±°ë ë°ê²¬íë€ë©Ž ìŽ íìŒì ížì§íì¬ ê³µì í ë.
+* FastAPIì ëí êž, ë¹ëì€, íìºì€ížë¥Œ ìì±íê±°ë ë°ê²¬íë€ë©Ž [ìŽ íìŒì ížì§](https://github.com/fastapi/fastapi/edit/master/docs/en/data/external_links.yml)íì¬ ê³µì í ë.
* íŽë¹ ì¹ì
ì ìì ë¶ë¶ì ë§í¬ë¥Œ ì¶ê°íŽìŒ í©ëë€.
-* ì¬ë¬ë¶ì ìžìŽë¡ [묞ì ë²ìì](contributing.md#translations){.internal-link target=_blank} ëìì ì€ ë.
+* ì¬ë¬ë¶ì ìžìŽë¡ [묞ì ë²ìì](contributing.md#translations) ëìì ì€ ë.
* ë€ë¥ž ì¬ëìŽ ìì±í ë²ìì ê²í íë ê²ë ëìž ì ììµëë€.
* ìë¡ìŽ ë¬žì ì¹ì
ì ì ìí ë.
* Ʞ졎 ìŽì/ë²ê·žë¥Œ ìì í ë.
@@ -218,8 +218,8 @@ Pull Requests륌 ìŽì©íì¬ ìì€ ìœëì [êž°ì¬](contributing.md){.intern
ì§êž í ì ìë 죌ì ìì
ì:
-* [GitHubìì ì§ë¬žìŒë¡ ë€ë¥ž ì¬ë ëêž°](#help-others-with-questions-in-github){.internal-link target=_blank} (ìì ì¹ì
ì ì°žì¡°íìžì).
-* [Pull Request 늬뷰íêž°](#review-pull-requests){.internal-link target=_blank} (ìì ì¹ì
ì ì°žì¡°íìžì).
+* [GitHubìì ì§ë¬žìŒë¡ ë€ë¥ž ì¬ë ëêž°](#help-others-with-questions-in-github) (ìì ì¹ì
ì ì°žì¡°íìžì).
+* [Pull Request 늬뷰íêž°](#review-pull-requests) (ìì ì¹ì
ì ì°žì¡°íìžì).
ìŽ ë ìì
ìŽ **ê°ì¥ ë§ì ìê°ì ì몚**í©ëë€. ìŽê²ìŽ FastAPI륌 ì ì§ êŽëЬíë 죌ì ìì
ì
ëë€.
@@ -227,11 +227,11 @@ Pull Requests륌 ìŽì©íì¬ ìì€ ìœëì [êž°ì¬](contributing.md){.intern
## ì±í
ì ì°žì¬íêž° { #join-the-chat }
-ð¥ Discord ì±í
ìë² ð¥ ì ì°žì¬íŽì FastAPI 컀뮀ëí°ì ë€ë¥ž ì¬ëë€ê³Œ ìŽìžëЬìžì.
+ð¥ [Discord ì±í
ìë²](https://discord.gg/VQjSZaeJmf) ð¥ ì ì°žì¬íŽì FastAPI 컀뮀ëí°ì ë€ë¥ž ì¬ëë€ê³Œ ìŽìžëЬìžì.
/// tip | í
-ì§ë¬žì GitHub Discussionsìì íìžì. [FastAPI Experts](fastapi-people.md#fastapi-experts){.internal-link target=_blank}ë¡ë¶í° ëìì ë°ì ê°ë¥ì±ìŽ íšì¬ ëìµëë€.
+ì§ë¬žì [GitHub Discussions](https://github.com/fastapi/fastapi/discussions/new?category=questions)ìì íìžì. [FastAPI Experts](fastapi-people.md#fastapi-experts)ë¡ë¶í° ëìì ë°ì ê°ë¥ì±ìŽ íšì¬ ëìµëë€.
ì±í
ì ë€ë¥ž ìŒë°ì ìž ëí륌 ìíŽìë§ ì¬ì©íìžì.
@@ -243,13 +243,13 @@ Pull Requests륌 ìŽì©íì¬ ìì€ ìœëì [êž°ì¬](contributing.md){.intern
GitHubììë í
íëŠ¿ìŽ ì¬ë°ë¥ž ì§ë¬žì ìì±íëë¡ ìëŽíì¬ ë ìœê² ì¢ì ëµë³ì ì»ê±°ë, ì§ë¬žíêž° ì ì ì€ì€ë¡ 묞ì 륌 íŽê²°í ìë ììµëë€. ê·žëŠ¬ê³ GitHubììë ìê°ìŽ ì¡°êž ê±žëŠ¬ëëŒë ì ê° íì 몚ë ê²ì ëµíëë¡ ë³Žì¥í ì ììµëë€. ì±í
ìì€í
ììë ì ê° ê°ìžì ìŒë¡ ê·žë ê² í ì ììµëë€. ð
-ì±í
ìì€í
ììì ëí ëí GitHubë§íŒ ìœê² ê²ìí ì ìêž° ë묞ì, ì§ë¬žê³Œ ëµë³ìŽ ëí ììì ì¬ëŒì§ ì ììµëë€. ê·žëŠ¬ê³ GitHubì ìë ê²ë§ [FastAPI Expert](fastapi-people.md#fastapi-experts){.internal-link target=_blank}ê° ëë ê²ìŒë¡ ìžì ëë¯ë¡, GitHubìì ë ë§ì êŽì¬ì ë°ê² ë ê°ë¥ì±ìŽ íœëë€.
+ì±í
ìì€í
ììì ëí ëí GitHubë§íŒ ìœê² ê²ìí ì ìêž° ë묞ì, ì§ë¬žê³Œ ëµë³ìŽ ëí ììì ì¬ëŒì§ ì ììµëë€. ê·žëŠ¬ê³ GitHubì ìë ê²ë§ [FastAPI Expert](fastapi-people.md#fastapi-experts)ê° ëë ê²ìŒë¡ ìžì ëë¯ë¡, GitHubìì ë ë§ì êŽì¬ì ë°ê² ë ê°ë¥ì±ìŽ íœëë€.
ë°ë©Ž, ì±í
ìì€í
ìë ìì² ëª
ì ì¬ì©ìê° ììŒë¯ë¡, ê±°ì íì ëí ìë륌 ì°Ÿì ê°ë¥ì±ìŽ ëìµëë€. ð
## ê°ë°ì ì€í°ì ëêž° { #sponsor-the-author }
-ì¬ë¬ë¶ì **ì í/íì¬**ê° **FastAPI**ì ì졎íê±°ë êŽë šëìŽ ìê³ , FastAPI ì¬ì©ì륌 ëììŒë¡ ìëŠ¬ê³ ì¶ë€ë©Ž GitHub sponsors륌 íµíŽ ê°ë°ì(ì )륌 ì€í°ìí ì ììµëë€. í°ìŽì ë°ëŒ 묞ìì ë°°ì§ ê°ì ì¶ê° ííì ë°ì ìë ììµëë€. ð
+ì¬ë¬ë¶ì **ì í/íì¬**ê° **FastAPI**ì ì졎íê±°ë êŽë šëìŽ ìê³ , FastAPI ì¬ì©ì륌 ëììŒë¡ ìëŠ¬ê³ ì¶ë€ë©Ž [GitHub sponsors](https://github.com/sponsors/tiangolo)륌 íµíŽ ê°ë°ì(ì )륌 ì€í°ìí ì ììµëë€. í°ìŽì ë°ëŒ 묞ìì ë°°ì§ ê°ì ì¶ê° ííì ë°ì ìë ììµëë€. ð
---
diff --git a/docs/ko/docs/history-design-future.md b/docs/ko/docs/history-design-future.md
index d972001215..524eea59a4 100644
--- a/docs/ko/docs/history-design-future.md
+++ b/docs/ko/docs/history-design-future.md
@@ -1,6 +1,6 @@
# ìì¬, ëììž ê·žëŠ¬ê³ ë¯žë { #history-design-and-future }
-ìŒë§ ì , í **FastAPI** ì¬ì©ìê° ìŽë ê² ë¬Œììµëë€:
+ìŒë§ ì , [í **FastAPI** ì¬ì©ìê° ìŽë ê² ë¬Œììµëë€](https://github.com/fastapi/fastapi/issues/3#issuecomment-454956920):
> ìŽ íë¡ì ížì ìì¬ë 묎ììžê°ì? ëª ì£Œ ë§ì ì묎 ë°ìë ê°ìêž° ëíë ìì²ëê² ì¢ìì§ ê²ì²ëŒ 볎ìŽë€ì [...]
@@ -14,7 +14,7 @@
**FastAPI**ì ìì¬ë ìë¹ ë¶ë¶ ê·ž ìŽì ì ìë ë구ë€ì ìì¬ì
ëë€.
-[ëì](alternatives.md){.internal-link target=_blank} ì¹ì
ìì ìžêžë ê²ì²ëŒ:
+[ëì](alternatives.md) ì¹ì
ìì ìžêžë ê²ì²ëŒ:
@@ -44,7 +44,7 @@
ê°ì¥ ìžêž° ìë Python ížì§êž°ë€: PyCharm, VS Code, Jedi êž°ë° ížì§êž°ìì ì¬ë¬ ììŽëìŽë¥Œ í
ì€ížíìµëë€.
-ìœ 80%ì ì¬ì©ì륌 í¬íšíë ìµê·Œ Python Developer Surveyì ë°ë¥Žë©Ž ê·žë ìµëë€.
+ìœ 80%ì ì¬ì©ì륌 í¬íšíë ìµê·Œ [Python Developer Survey](https://www.jetbrains.com/research/python-developers-survey-2018/#development-tools)ì ë°ë¥Žë©Ž ê·žë ìµëë€.
ìŠ, **FastAPI**ë Python ê°ë°ìì 80%ê° ì¬ì©íë ížì§êž°ë€ë¡ í¹ë³í í
ì€ížëììµëë€. ê·žëŠ¬ê³ ëë¶ë¶ì ë€ë¥ž ížì§êž°ë ì ì¬íê² ëìíë 겜í¥ìŽ ììŒë¯ë¡, ê·ž 몚ë ìŽì ì ì¬ì€ì 몚ë ížì§êž°ìì ëìíŽìŒ í©ëë€.
@@ -54,15 +54,15 @@
## íì조걎 { #requirements }
-ì¬ë¬ ëìì í
ì€íží í, ì¥ì ë묞ì **Pydantic**ì ì¬ì©íêž°ë¡ ê²°ì íìµëë€.
+ì¬ë¬ ëìì í
ì€íží í, ì¥ì ë묞ì [**Pydantic**](https://docs.pydantic.dev/)ì ì¬ì©íêž°ë¡ ê²°ì íìµëë€.
ê·ž í, JSON Schema륌 ìì í ì€ìíëë¡ íê³ , ì ìœ ì¡°ê±Ž ì ìžì ì ìíë ë€ìí ë°©ìì ì§ìíë©°, ì¬ë¬ ížì§êž°ììì í
ì€ížë¥Œ ë°íìŒë¡ ížì§êž° ì§ì(íì
ê²ì¬, ìë ìì±)ì ê°ì íêž° ìíŽ êž°ì¬íìµëë€.
-ê°ë° 곌ì ìì, ë ë€ë¥ž íµì¬ íìì¡°ê±Žìž **Starlette**ìë êž°ì¬íìµëë€.
+ê°ë° 곌ì ìì, ë ë€ë¥ž íµì¬ íìì¡°ê±Žìž [**Starlette**](https://www.starlette.dev/)ìë êž°ì¬íìµëë€.
## ê°ë° { #development }
-**FastAPI** ì첎륌 ë§ë€êž° ììíì ë쯀ìë, ëë¶ë¶ì ì¡°ê°ë€ìŽ ìŽë¯ž ê°ì¶°ì ž ììê³ , ëììžì ì ìëìŽ ìììŒë©°, íì조걎곌 ë구ë ì€ë¹ëìŽ ììê³ , íì€ê³Œ ëª
ìžì ëí ì§ìë ëª
ííê³ ìµì ìíììµëë€.
+**FastAPI** ì첎륌 ë§ë€êž° ììíì ë쯀ìë, ëë¶ë¶ì ì¡°ê°ë€ìŽ ìŽë¯ž ê°ì¶°ì ž ììê³ , ëììžì ì ìëìŽ ììë©°, íì조걎곌 ë구ë ì€ë¹ëìŽ ììê³ , íì€ê³Œ ëª
ìžì ëí ì§ìë ëª
ííê³ ìµì ìíììµëë€.
## 믞ë { #future }
@@ -76,4 +76,4 @@
**FastAPI**ì 믞ëë ë°ìµëë€.
-ê·žëŠ¬ê³ [ì¬ë¬ë¶ì ëì](help-fastapi.md){.internal-link target=_blank}ì í° íìŽ ë©ëë€.
+ê·žëŠ¬ê³ [ì¬ë¬ë¶ì ëì](help-fastapi.md)ì í° íìŽ ë©ëë€.
diff --git a/docs/ko/docs/how-to/authentication-error-status-code.md b/docs/ko/docs/how-to/authentication-error-status-code.md
index e039c073e9..c82ed0de22 100644
--- a/docs/ko/docs/how-to/authentication-error-status-code.md
+++ b/docs/ko/docs/how-to/authentication-error-status-code.md
@@ -2,7 +2,7 @@
FastAPI ë²ì `0.122.0` ìŽì ìë, íµí© 볎ì ì ížëЬí°ê° ìžìŠ ì€íš í íŽëŒìŽìžížì ì€ë¥ë¥Œ ë°íí ë HTTP ìí ìœë `403 Forbidden`ì ì¬ì©íìµëë€.
-FastAPI ë²ì `0.122.0`ë¶í°ë ë ì ì í HTTP ìí ìœë `401 Unauthorized`륌 ì¬ì©íë©°, HTTP ëª
ìžìž RFC 7235, RFC 9110륌 ë°ëŒ ìëµì í©ëЬì ìž `WWW-Authenticate` í€ë륌 ë°íí©ëë€.
+FastAPI ë²ì `0.122.0`ë¶í°ë ë ì ì í HTTP ìí ìœë `401 Unauthorized`륌 ì¬ì©íë©°, HTTP ëª
ìžìž [RFC 7235](https://datatracker.ietf.org/doc/html/rfc7235#section-3.1), [RFC 9110](https://datatracker.ietf.org/doc/html/rfc9110#name-401-unauthorized)륌 ë°ëŒ ìëµì í©ëЬì ìž `WWW-Authenticate` í€ë륌 ë°íí©ëë€.
íì§ë§ ìŽë€ ìŽì ë¡ë íŽëŒìŽìžížê° ìŽì ëìì ì졎íê³ ìë€ë©Ž, 볎ì íŽëì€ìì `make_not_authenticated_error` ë©ìë륌 ì€ë²ëŒìŽëíì¬ ìŽì ëììŒë¡ ëë늎 ì ììµëë€.
diff --git a/docs/ko/docs/how-to/conditional-openapi.md b/docs/ko/docs/how-to/conditional-openapi.md
index 3a87bf010b..b1617b1e83 100644
--- a/docs/ko/docs/how-to/conditional-openapi.md
+++ b/docs/ko/docs/how-to/conditional-openapi.md
@@ -10,7 +10,7 @@
ìœëì 볎ì ê²°íšìŽ ìë€ë©Ž, ê·ž ê²°íšì ì¬ì í 졎ì¬í ê²ì
ëë€.
-묞ì륌 ìšêž°ë ê²ì APIì ìížìì©íë ë°©ë²ì ìŽíŽíêž° ìŽë µê² ë§ë€ë©°, íë¡ëì
ìì ëë²ê¹
ì ë ìŽë µê² ë§ë€ ì ììµëë€. ìŽë ëšìí Security through obscurityì í ííë¡ ê°ì£Œë ì ììµëë€.
+묞ì륌 ìšêž°ë ê²ì APIì ìížìì©íë ë°©ë²ì ìŽíŽíêž° ìŽë µê² ë§ë€ë©°, íë¡ëì
ìì ëë²ê¹
ì ë ìŽë µê² ë§ë€ ì ììµëë€. ìŽë ëšìí [ìí륌 íµí 볎ì](https://en.wikipedia.org/wiki/Security_through_obscurity)ì í ííë¡ ê°ì£Œë ì ììµëë€.
API륌 볎ížíê³ ì¶ë€ë©Ž, ì륌 ë€ìŽ ë€ì곌 ê°ì ë ëì ë°©ë²ë€ìŽ ììµëë€:
diff --git a/docs/ko/docs/how-to/configure-swagger-ui.md b/docs/ko/docs/how-to/configure-swagger-ui.md
index b518fd8f72..8322266f5b 100644
--- a/docs/ko/docs/how-to/configure-swagger-ui.md
+++ b/docs/ko/docs/how-to/configure-swagger-ui.md
@@ -1,6 +1,6 @@
# Swagger UI êµ¬ì± { #configure-swagger-ui }
-ì¶ê°ì ìž Swagger UI ë§€ê°ë³ì륌 구ì±í ì ììµëë€.
+ì¶ê°ì ìž [Swagger UI ë§€ê°ë³ì](https://swagger.io/docs/open-source-tools/swagger-ui/usage/configuration/)륌 구ì±í ì ììµëë€.
구ì±ì íë €ë©Ž, `FastAPI()` ì± ê°ì²Žë¥Œ ìì±í ë ëë `get_swagger_ui_html()` íšìì `swagger_ui_parameters` ìžì륌 ì ë¬íììì€.
@@ -50,7 +50,7 @@ FastAPIë ëë¶ë¶ì ì¬ì© ì¬ë¡ì ì í©í ëª ê°ì§ Ʞ볞 êµ¬ì± ë§€
## êž°í Swagger UI ë§€ê°ë³ì { #other-swagger-ui-parameters }
-ì¬ì©í ì ìë ë€ë¥ž 몚ë êµ¬ì± ìµì
ì íìžíë €ë©Ž, Swagger UI ë§€ê°ë³ìì ëí ê³µì Swagger UI ë§€ê°ë³ì 묞ì륌 ì°žì¡°íììì€.
+ì¬ì©í ì ìë ë€ë¥ž 몚ë êµ¬ì± ìµì
ì íìžíë €ë©Ž, ê³µì [Swagger UI ë§€ê°ë³ì 묞ì](https://swagger.io/docs/open-source-tools/swagger-ui/usage/configuration/)륌 ì°žì¡°íììì€.
## JavaScript ì ì© ì€ì { #javascript-only-settings }
diff --git a/docs/ko/docs/how-to/custom-docs-ui-assets.md b/docs/ko/docs/how-to/custom-docs-ui-assets.md
index 7eb4b3cfdb..265eaca047 100644
--- a/docs/ko/docs/how-to/custom-docs-ui-assets.md
+++ b/docs/ko/docs/how-to/custom-docs-ui-assets.md
@@ -54,7 +54,7 @@ Swagger UIê° ìŽ ê³Œì ì 백귞ëŒìŽëìì ì²ëŠ¬íŽ ì£Œì§ë§, ìŽë¥Œ
### í
ì€ížíêž° { #test-it }
-ìŽì http://127.0.0.1:8000/docsìì 묞ìì ì ìí ë€ íìŽì§ë¥Œ ìë¡ê³ 칚í멎, ì CDNìì ìì
ì ë¶ë¬ì€ë ê²ì íìží ì ììµëë€.
+ìŽì [http://127.0.0.1:8000/docs](http://127.0.0.1:8000/docs)ìì 묞ìì ì ìí ë€ íìŽì§ë¥Œ ìë¡ê³ 칚í멎, ì CDNìì ìì
ì ë¶ë¬ì€ë ê²ì íìží ì ììµëë€.
## 묞ìì© JavaScriptì CSS ì첎 ížì€í
íêž° { #self-hosting-javascript-and-css-for-docs }
@@ -93,12 +93,12 @@ JavaScriptì CSS륌 ì첎 ížì€í
íë ê²ì ì륌 ë€ìŽ, ì€íëŒìž
**Swagger UI**ë ë€ì íìŒì ì¬ì©í©ëë€:
-* `swagger-ui-bundle.js`
-* `swagger-ui.css`
+* [`swagger-ui-bundle.js`](https://cdn.jsdelivr.net/npm/swagger-ui-dist@5/swagger-ui-bundle.js)
+* [`swagger-ui.css`](https://cdn.jsdelivr.net/npm/swagger-ui-dist@5/swagger-ui.css)
**ReDoc**ì ë€ì íìŒì ì¬ì©í©ëë€:
-* `redoc.standalone.js`
+* [`redoc.standalone.js`](https://cdn.jsdelivr.net/npm/redoc@2/bundles/redoc.standalone.js)
ìŽí íìŒ êµ¬ì¡°ë ë€ì곌 ê°ì ì ììµëë€:
@@ -122,7 +122,7 @@ JavaScriptì CSS륌 ì첎 ížì€í
íë ê²ì ì륌 ë€ìŽ, ì€íëŒìž
### ì ì íìŒ í
ì€ížíêž° { #test-the-static-files }
-ì í늬ìŒìŽì
ì ììíê³ http://127.0.0.1:8000/static/redoc.standalone.jsë¡ ìŽëíìžì.
+ì í늬ìŒìŽì
ì ììíê³ [http://127.0.0.1:8000/static/redoc.standalone.js](http://127.0.0.1:8000/static/redoc.standalone.js)ë¡ ìŽëíìžì.
**ReDoc**ì© ë§€ì° êžŽ JavaScript íìŒìŽ ë³ŽìŒ ê²ì
ëë€.
@@ -180,6 +180,6 @@ Swagger UIê° ìŽ ê³Œì ì 백귞ëŒìŽëìì ì²ëŠ¬íŽ ì£Œì§ë§, ìŽë¥Œ
### ì ì íìŒ UI í
ì€ížíêž° { #test-static-files-ui }
-ìŽì WiFi ì°ê²°ì ëê³ http://127.0.0.1:8000/docsìì 묞ìì ì ìí ë€ íìŽì§ë¥Œ ìë¡ê³ ì¹šíŽ ë³Žìžì.
+ìŽì WiFi ì°ê²°ì ëê³ [http://127.0.0.1:8000/docs](http://127.0.0.1:8000/docs)ìì 묞ìì ì ìí ë€ íìŽì§ë¥Œ ìë¡ê³ ì¹šíŽ ë³Žìžì.
ìží°ë·ìŽ ììŽë API 묞ì륌 ë³Žê³ , APIì ìížìì©í ì ìì ê²ì
ëë€.
diff --git a/docs/ko/docs/how-to/custom-request-and-route.md b/docs/ko/docs/how-to/custom-request-and-route.md
index 335193bb35..99138a7370 100644
--- a/docs/ko/docs/how-to/custom-request-and-route.md
+++ b/docs/ko/docs/how-to/custom-request-and-route.md
@@ -18,7 +18,7 @@
ì¬ì© ì¬ë¡ìë ë€ììŽ í¬íšë©ëë€:
-* JSONìŽ ìë ìì² ë°ë륌 JSONìŒë¡ ë³ííêž°(ì: `msgpack`).
+* JSONìŽ ìë ìì² ë°ë륌 JSONìŒë¡ ë³ííêž°(ì: [`msgpack`](https://msgpack.org/index.html)).
* gzipìŒë¡ ìì¶ë ìì² ë°ë ìì¶ íŽì íêž°.
* 몚ë ìì² ë°ë륌 ìëìŒë¡ ë¡ê¹
íêž°.
@@ -32,7 +32,7 @@
/// tip | í
-ìŽ ììë ëì ë°©ì ìì°ì ìí ì¥ëê° ìì ì
ëë€. Gzip ì§ììŽ íìíë€ë©Ž ì ê³µëë [`GzipMiddleware`](../advanced/middleware.md#gzipmiddleware){.internal-link target=_blank}륌 ì¬ì©í ì ììµëë€.
+ìŽ ììë ëì ë°©ì ìì°ì ìí ì¥ëê° ìì ì
ëë€. Gzip ì§ììŽ íìíë€ë©Ž ì ê³µëë [`GzipMiddleware`](../advanced/middleware.md#gzipmiddleware)륌 ì¬ì©í ì ììµëë€.
///
@@ -66,7 +66,7 @@
ê·žëŠ¬ê³ ìŽ ë ê°ì§, `scope`ì `receive`ê° ìë¡ìŽ `Request` ìžì€íŽì€ë¥Œ ë§ëë ë° íìí ê²ë€ì
ëë€.
-`Request`ì ëíŽ ë ììë³Žë €ë©Ž Starletteì Requests 묞ì륌 íìžíìžì.
+`Request`ì ëíŽ ë ììë³Žë €ë©Ž [Starletteì Requests 묞ì](https://www.starlette.dev/requests/)륌 íìžíìžì.
///
@@ -82,7 +82,7 @@
/// tip | í
-ê°ì 묞ì 륌 íŽê²°íë €ë©Ž `RequestValidationError`ì ëí 컀ì€í
ížë€ë¬ìì `body`륌 ì¬ì©íë ížìŽ ìë§ íšì¬ ë ìœìµëë€([ì€ë¥ ì²ëЬíêž°](../tutorial/handling-errors.md#use-the-requestvalidationerror-body){.internal-link target=_blank}).
+ê°ì 묞ì 륌 íŽê²°íë €ë©Ž `RequestValidationError`ì ëí 컀ì€í
ížë€ë¬ìì `body`륌 ì¬ì©íë ížìŽ ìë§ íšì¬ ë ìœìµëë€([ì€ë¥ ì²ëЬíêž°](../tutorial/handling-errors.md#use-the-requestvalidationerror-body)).
íì§ë§ ìŽ ììë ì¬ì í ì íšíë©°, ëŽë¶ 컎í¬ëížì ìížìì©íë ë°©ë²ì 볎ì¬ì€ëë€.
diff --git a/docs/ko/docs/how-to/extending-openapi.md b/docs/ko/docs/how-to/extending-openapi.md
index 0589e479bf..992243dbe5 100644
--- a/docs/ko/docs/how-to/extending-openapi.md
+++ b/docs/ko/docs/how-to/extending-openapi.md
@@ -37,7 +37,7 @@
ì ì 볎륌 ë°íìŒë¡, ëìŒí ì ížëŠ¬í° íšì륌 ì¬ì©íŽ OpenAPI ì€í€ë§ë¥Œ ìì±íê³ íìí ê° ë¶ë¶ì ë®ìŽìž ì ììµëë€.
-ì륌 ë€ìŽ, 컀ì€í
ë¡ê³ 륌 í¬íšíêž° ìí ReDocì OpenAPI íì¥ì ì¶ê°íŽ ë³Žê² ìµëë€.
+ì륌 ë€ìŽ, [컀ì€í
ë¡ê³ 륌 í¬íšíêž° ìí ReDocì OpenAPI íì¥](https://github.com/Rebilly/ReDoc/blob/master/docs/redoc-vendor-extensions.md#x-logo)ì ì¶ê°íŽ ë³Žê² ìµëë€.
### ìŒë°ì ìž **FastAPI** { #normal-fastapi }
@@ -75,6 +75,6 @@
### íìžíêž° { #check-it }
-http://127.0.0.1:8000/redocë¡ ìŽëí멎 컀ì€í
ë¡ê³ (ìŽ ììììë **FastAPI** ë¡ê³ )륌 ì¬ì©íë ê²ì íìží ì ììµëë€:
+[http://127.0.0.1:8000/redoc](http://127.0.0.1:8000/redoc)ë¡ ìŽëí멎 컀ì€í
ë¡ê³ (ìŽ ììììë **FastAPI** ë¡ê³ )륌 ì¬ì©íë ê²ì íìží ì ììµëë€:
diff --git a/docs/ko/docs/how-to/general.md b/docs/ko/docs/how-to/general.md
index a18dc68a21..28f9535bc7 100644
--- a/docs/ko/docs/how-to/general.md
+++ b/docs/ko/docs/how-to/general.md
@@ -4,36 +4,40 @@
## ë°ìŽí° íí°ë§ - 볎ì { #filter-data-security }
-ë°íí멎 ì ëë ë°ìŽí°ë¥Œ 곌ëíê² ë°ííì§ ìëë¡ íë €ë©Ž, [íí ëŠ¬ìŒ - ìëµ ëªšëž - ë°í íì
](../tutorial/response-model.md){.internal-link target=_blank} 묞ì륌 ìœìŽë³Žìžì.
+ë°íí멎 ì ëë ë°ìŽí°ë¥Œ 곌ëíê² ë°ííì§ ìëë¡ íë €ë©Ž, [íí ëŠ¬ìŒ - ìëµ ëªšëž - ë°í íì
](../tutorial/response-model.md) 묞ì륌 ìœìŽë³Žìžì.
+
+## ìëµ ì±ë¥ ìµì í - ìëµ ëªšëž - ë°í íì
{ #optimize-response-performance-response-model-return-type }
+
+JSON ë°ìŽí°ë¥Œ ë°íí ë ì±ë¥ì ìµì ííë €ë©Ž ë°í íì
ëë ìëµ ëªšëžì ì¬ì©íìžì. ê·žë¬ë©Ž PydanticìŽ Pythonì ê±°ì¹ì§ ìê³ Rust ìž¡ìì JSON ì§ë ¬í륌 ì²ëЬí©ëë€. ììží ëŽì©ì [íí ëŠ¬ìŒ - ìëµ ëªšëž - ë°í íì
](../tutorial/response-model.md) 묞ì륌 ì°žê³ íìžì.
## 묞ìí íê·ž - OpenAPI { #documentation-tags-openapi }
-*ê²œë¡ ì²ëЬ*ì í귞륌 ì¶ê°íê³ , 묞ì UIìì ìŽë¥Œ 귞룹ííë €ë©Ž [íí ëŠ¬ìŒ - ê²œë¡ ì²ëЬ êµ¬ì± - íê·ž](../tutorial/path-operation-configuration.md#tags){.internal-link target=_blank} 묞ì륌 ìœìŽë³Žìžì.
+*ê²œë¡ ì²ëЬ*ì í귞륌 ì¶ê°íê³ , 묞ì UIìì ìŽë¥Œ 귞룹ííë €ë©Ž [íí ëŠ¬ìŒ - ê²œë¡ ì²ëЬ êµ¬ì± - íê·ž](../tutorial/path-operation-configuration.md#tags) 묞ì륌 ìœìŽë³Žìžì.
## 묞ìí ììœ ë° ì€ëª
- OpenAPI { #documentation-summary-and-description-openapi }
-*ê²œë¡ ì²ëЬ*ì ììœê³Œ ì€ëª
ì ì¶ê°íê³ , 묞ì UIì íìíë €ë©Ž [íí ëŠ¬ìŒ - ê²œë¡ ì²ëЬ êµ¬ì± - ììœ ë° ì€ëª
](../tutorial/path-operation-configuration.md#summary-and-description){.internal-link target=_blank} 묞ì륌 ìœìŽë³Žìžì.
+*ê²œë¡ ì²ëЬ*ì ììœê³Œ ì€ëª
ì ì¶ê°íê³ , 묞ì UIì íìíë €ë©Ž [íí ëŠ¬ìŒ - ê²œë¡ ì²ëЬ êµ¬ì± - ììœ ë° ì€ëª
](../tutorial/path-operation-configuration.md#summary-and-description) 묞ì륌 ìœìŽë³Žìžì.
## 묞ìí ìëµ ì€ëª
- OpenAPI { #documentation-response-description-openapi }
-묞ì UIì íìëë ìëµì ì€ëª
ì ì ìíë €ë©Ž [íí ëŠ¬ìŒ - ê²œë¡ ì²ëЬ êµ¬ì± - ìëµ ì€ëª
](../tutorial/path-operation-configuration.md#response-description){.internal-link target=_blank} 묞ì륌 ìœìŽë³Žìžì.
+묞ì UIì íìëë ìëµì ì€ëª
ì ì ìíë €ë©Ž [íí ëŠ¬ìŒ - ê²œë¡ ì²ëЬ êµ¬ì± - ìëµ ì€ëª
](../tutorial/path-operation-configuration.md#response-description) 묞ì륌 ìœìŽë³Žìžì.
## 묞ìí *ê²œë¡ ì²ëЬ* ì§ì ì€ëšíêž° - OpenAPI { #documentation-deprecate-a-path-operation-openapi }
-*ê²œë¡ ì²ëЬ*륌 ì§ì ì€ëš(deprecate)ìŒë¡ íìíê³ , 묞ì UIì 볎ì¬ì£Œë €ë©Ž [íí ëŠ¬ìŒ - ê²œë¡ ì²ëЬ êµ¬ì± - ì§ì ì€ëš](../tutorial/path-operation-configuration.md#deprecate-a-path-operation){.internal-link target=_blank} 묞ì륌 ìœìŽë³Žìžì.
+*ê²œë¡ ì²ëЬ*륌 ì§ì ì€ëš(deprecate)ìŒë¡ íìíê³ , 묞ì UIì 볎ì¬ì£Œë €ë©Ž [íí ëŠ¬ìŒ - ê²œë¡ ì²ëЬ êµ¬ì± - ì§ì ì€ëš](../tutorial/path-operation-configuration.md#deprecate-a-path-operation) 묞ì륌 ìœìŽë³Žìžì.
## ìŽë€ ë°ìŽí°ë JSON ížíìŒë¡ ë³ííêž° { #convert-any-data-to-json-compatible }
-ìŽë€ ë°ìŽí°ë JSON íží íììŒë¡ ë³ííë €ë©Ž [íí ëŠ¬ìŒ - JSON íží ìžìœë](../tutorial/encoder.md){.internal-link target=_blank} 묞ì륌 ìœìŽë³Žìžì.
+ìŽë€ ë°ìŽí°ë JSON íží íììŒë¡ ë³ííë €ë©Ž [íí ëŠ¬ìŒ - JSON íží ìžìœë](../tutorial/encoder.md) 묞ì륌 ìœìŽë³Žìžì.
## OpenAPI ë©íë°ìŽí° - 묞ì { #openapi-metadata-docs }
-ëŒìŽì ì€, ë²ì , ì°ëœì² ë±ì ì 볎륌 í¬íšíŽ OpenAPI ì€í€ë§ì ë©íë°ìŽí°ë¥Œ ì¶ê°íë €ë©Ž [íí ëŠ¬ìŒ - ë©íë°ìŽí°ì 묞ì URL](../tutorial/metadata.md){.internal-link target=_blank} 묞ì륌 ìœìŽë³Žìžì.
+ëŒìŽì ì€, ë²ì , ì°ëœì² ë±ì ì 볎륌 í¬íšíŽ OpenAPI ì€í€ë§ì ë©íë°ìŽí°ë¥Œ ì¶ê°íë €ë©Ž [íí ëŠ¬ìŒ - ë©íë°ìŽí°ì 묞ì URL](../tutorial/metadata.md) 묞ì륌 ìœìŽë³Žìžì.
## OpenAPI ì¬ì©ì ì ì URL { #openapi-custom-url }
-OpenAPI URLì 컀ì€í°ë§ìŽìŠ(ëë ì ê±°)íë €ë©Ž [íí ëŠ¬ìŒ - ë©íë°ìŽí°ì 묞ì URL](../tutorial/metadata.md#openapi-url){.internal-link target=_blank} 묞ì륌 ìœìŽë³Žìžì.
+OpenAPI URLì 컀ì€í°ë§ìŽìŠ(ëë ì ê±°)íë €ë©Ž [íí ëŠ¬ìŒ - ë©íë°ìŽí°ì 묞ì URL](../tutorial/metadata.md#openapi-url) 묞ì륌 ìœìŽë³Žìžì.
## OpenAPI 묞ì URL { #openapi-docs-urls }
-ìëìŒë¡ ìì±ëë 묞ì ì¬ì©ì ìží°íìŽì€ìì ì¬ì©íë URLì ì
ë°ìŽížíë €ë©Ž [íí ëŠ¬ìŒ - ë©íë°ìŽí°ì 묞ì URL](../tutorial/metadata.md#docs-urls){.internal-link target=_blank} 묞ì륌 ìœìŽë³Žìžì.
+ìëìŒë¡ ìì±ëë 묞ì ì¬ì©ì ìží°íìŽì€ìì ì¬ì©íë URLì ì
ë°ìŽížíë €ë©Ž [íí ëŠ¬ìŒ - ë©íë°ìŽí°ì 묞ì URL](../tutorial/metadata.md#docs-urls) 묞ì륌 ìœìŽë³Žìžì.
diff --git a/docs/ko/docs/how-to/graphql.md b/docs/ko/docs/how-to/graphql.md
index a960e6d8b2..c4353d57d3 100644
--- a/docs/ko/docs/how-to/graphql.md
+++ b/docs/ko/docs/how-to/graphql.md
@@ -18,18 +18,18 @@
ë€ìì **ASGI** ì§ììŽ ìë **GraphQL** ëŒìŽëžë¬ëЬë€ì
ëë€. **FastAPI**ì íšê» ì¬ì©í ì ììµëë€:
-* Strawberry ð
- * FastAPIì© ë¬žì ì ê³µ
-* Ariadne
- * FastAPIì© ë¬žì ì ê³µ
-* Tartiflette
- * ASGI íµí©ì ì ê³µíêž° ìíŽ Tartiflette ASGI ì¬ì©
-* Graphene
- * starlette-graphene3 ì¬ì©
+* [Strawberry](https://strawberry.rocks/) ð
+ * [FastAPIì© ë¬žì](https://strawberry.rocks/docs/integrations/fastapi) ì ê³µ
+* [Ariadne](https://ariadnegraphql.org/)
+ * [FastAPIì© ë¬žì](https://ariadnegraphql.org/docs/fastapi-integration) ì ê³µ
+* [Tartiflette](https://tartiflette.io/)
+ * ASGI íµí©ì ì ê³µíêž° ìíŽ [Tartiflette ASGI](https://tartiflette.github.io/tartiflette-asgi/) ì¬ì©
+* [Graphene](https://graphene-python.org/)
+ * [starlette-graphene3](https://github.com/ciscorn/starlette-graphene3) ì¬ì©
## Strawberryë¡ GraphQL ì¬ì©íêž° { #graphql-with-strawberry }
-**GraphQL**ë¡ ìì
íŽìŒ íê±°ë ìì
íê³ ì¶ë€ë©Ž, **Strawberry**륌 **ê¶ì¥**í©ëë€. **FastAPI**ì ì€ê³ì ê°ì¥ ê°ê¹ê³ , 몚ë ê²ìŽ **type annotations**ì êž°ë°íŽ ìêž° ë묞ì
ëë€.
+**GraphQL**ë¡ ìì
íŽìŒ íê±°ë ìì
íê³ ì¶ë€ë©Ž, [**Strawberry**](https://strawberry.rocks/)륌 **ê¶ì¥**í©ëë€. **FastAPI**ì ì€ê³ì ê°ì¥ ê°ê¹ê³ , 몚ë ê²ìŽ **type annotations**ì êž°ë°íŽ ìêž° ë묞ì
ëë€.
ì¬ì© ì¬ë¡ì ë°ëŒ ë€ë¥ž ëŒìŽëžë¬ëŠ¬ë¥Œ ì íží ìë ìì§ë§, ì ê² ë¬»ëë€ë©Ž ìë§ **Strawberry**륌 뚌ì ìëíŽ ë³ŽëŒê³ ì ìí ê²ì
ëë€.
@@ -37,24 +37,24 @@
{* ../../docs_src/graphql_/tutorial001_py310.py hl[3,22,25] *}
-Strawberry 묞ììì Strawberryì ëíŽ ë ìì볌 ì ììµëë€.
+[Strawberry 묞ì](https://strawberry.rocks/)ìì Strawberryì ëíŽ ë ìì볌 ì ììµëë€.
-ëí FastAPIìì Strawberry ì¬ì©ì ëí 묞ìë íìžíŽ ë³Žìžì.
+ëí [FastAPIìì Strawberry ì¬ì©](https://strawberry.rocks/docs/integrations/fastapi)ì ëí 묞ìë íìžíŽ ë³Žìžì.
## Starletteì ìì `GraphQLApp` { #older-graphqlapp-from-starlette }
-ìŽì ë²ì ì Starletteìë Graphene곌 íµí©íêž° ìí `GraphQLApp` íŽëì€ê° í¬íšëìŽ ìììµëë€.
+ìŽì ë²ì ì Starletteìë [Graphene](https://graphene-python.org/)곌 íµí©íêž° ìí `GraphQLApp` íŽëì€ê° í¬íšëìŽ ìììµëë€.
-ìŽê²ì Starletteìì deprecated ëìì§ë§, ìŽë¥Œ ì¬ì©íë ìœëê° ìë€ë©Ž ê°ì ì¬ì© ì¬ë¡ë¥Œ ë€ë£šê³ **ê±°ì ëìŒí ìží°íìŽì€**륌 ê°ì§ starlette-graphene3ë¡ ìœê² **ë§ìŽê·žë ìŽì
**í ì ììµëë€.
+ìŽê²ì Starletteìì deprecated ëìì§ë§, ìŽë¥Œ ì¬ì©íë ìœëê° ìë€ë©Ž ê°ì ì¬ì© ì¬ë¡ë¥Œ ë€ë£šê³ **ê±°ì ëìŒí ìží°íìŽì€**륌 ê°ì§ [starlette-graphene3](https://github.com/ciscorn/starlette-graphene3)ë¡ ìœê² **ë§ìŽê·žë ìŽì
**í ì ììµëë€.
/// tip | í
-GraphQLìŽ íìíë€ë©Ž, 컀ì€í
íŽëì€ì íì
ëì type annotationsì êž°ë°í Strawberry륌 ì¬ì í íìžíŽ ë³Žìêžž ê¶ì¥í©ëë€.
+GraphQLìŽ íìíë€ë©Ž, 컀ì€í
íŽëì€ì íì
ëì type annotationsì êž°ë°í [Strawberry](https://strawberry.rocks/)륌 ì¬ì í íìžíŽ ë³Žìêžž ê¶ì¥í©ëë€.
///
## ë ìì볎Ʞ { #learn-more }
-ê³µì GraphQL 묞ììì **GraphQL**ì ëíŽ ë ìì볌 ì ììµëë€.
+[ê³µì GraphQL 묞ì](https://graphql.org/)ìì **GraphQL**ì ëíŽ ë ìì볌 ì ììµëë€.
ëí ììì ì€ëª
í ê° ëŒìŽëžë¬ëЬì ëíŽìë íŽë¹ ë§í¬ìì ë ììží ìœìŽë³Œ ì ììµëë€.
diff --git a/docs/ko/docs/how-to/index.md b/docs/ko/docs/how-to/index.md
index 9321c488bd..f80f9f3586 100644
--- a/docs/ko/docs/how-to/index.md
+++ b/docs/ko/docs/how-to/index.md
@@ -8,6 +8,6 @@
/// tip | í
-**FastAPI륌 구조ì ìŒë¡ íìµ**íê³ ì¶ë€ë©Ž(ê¶ì¥), ëì [íí ëŠ¬ìŒ - ì¬ì©ì ê°ìŽë](../tutorial/index.md){.internal-link target=_blank}륌 ì¥ë³ë¡ ìœìŽë³Žìžì.
+**FastAPI륌 구조ì ìŒë¡ íìµ**íê³ ì¶ë€ë©Ž(ê¶ì¥), ëì [íí ëŠ¬ìŒ - ì¬ì©ì ê°ìŽë](../tutorial/index.md)륌 ì¥ë³ë¡ ìœìŽë³Žìžì.
///
diff --git a/docs/ko/docs/how-to/migrate-from-pydantic-v1-to-pydantic-v2.md b/docs/ko/docs/how-to/migrate-from-pydantic-v1-to-pydantic-v2.md
index 5dd40cbdc2..d47f0bc415 100644
--- a/docs/ko/docs/how-to/migrate-from-pydantic-v1-to-pydantic-v2.md
+++ b/docs/ko/docs/how-to/migrate-from-pydantic-v1-to-pydantic-v2.md
@@ -10,7 +10,7 @@ FastAPI 0.126.0 ë²ì ììë Pydantic v1 ì§ìì ì€ëšíì§ë§, `pydantic
/// warning | 겜ê³
-Pydantic íì **Python 3.14**ë¶í° ìµì Python ë²ì ìì Pydantic v1 ì§ìì ì€ëšíìµëë€.
+Pydantic íì ìµì Python ë²ì ìì Pydantic v1 ì§ìì ì€ëšíìŒë©°, ìì ë²ì ì **Python 3.14**ì
ëë€.
ì¬êž°ìë `pydantic.v1`ë í¬íšëë©°, Python 3.14 ìŽìììë ë ìŽì ì§ìëì§ ììµëë€.
@@ -22,7 +22,7 @@ Pydantic v1ì ì¬ì©íë ì€ëë FastAPI ì±ìŽ ìë€ë©Ž, ì¬êž°ìë ìŽ
## ê³µì ê°ìŽë { #official-guide }
-Pydanticìë v1ìì v2ë¡ì ê³µì ë§ìŽê·žë ìŽì
ê°ìŽëê° ììµëë€.
+Pydanticìë v1ìì v2ë¡ì ê³µì [ë§ìŽê·žë ìŽì
ê°ìŽë](https://docs.pydantic.dev/latest/migration/)ê° ììµëë€.
ì¬êž°ìë 묎ììŽ ë°ëìëì§, ê²ìŠìŽ ìŽì ìŽë»ê² ë ì ííê³ ì격íŽì¡ëì§, ê°ë¥í 죌ìì¬í ë±ë í¬íšëìŽ ììµëë€.
@@ -30,7 +30,7 @@ Pydanticìë v1ìì v2ë¡ì ê³µì `bump-pydantic`륌 ì¬ì©í ì ììµëë€.
+ê°ì Pydantic íìŽ ì ê³µíë [`bump-pydantic`](https://github.com/pydantic/bump-pydantic)륌 ì¬ì©í ì ììµëë€.
ìŽ ë구ë ë³ê²œíŽìŒ íë ìœëì ëë¶ë¶ì ìëìŒë¡ ë°êŸžë ë° ëìì ì€ëë€.
diff --git a/docs/ko/docs/how-to/testing-database.md b/docs/ko/docs/how-to/testing-database.md
index 2d7798d707..fe0bec809c 100644
--- a/docs/ko/docs/how-to/testing-database.md
+++ b/docs/ko/docs/how-to/testing-database.md
@@ -1,7 +1,7 @@
# ë°ìŽí°ë² ìŽì€ í
ì€ížíêž° { #testing-a-database }
-ë°ìŽí°ë² ìŽì€, SQL, SQLModelì ëíŽìë SQLModel 묞ììì íìµí ì ììµëë€. ð€
+ë°ìŽí°ë² ìŽì€, SQL, SQLModelì ëíŽìë [SQLModel 묞ì](https://sqlmodel.tiangolo.com/)ìì íìµí ì ììµëë€. ð€
-FastAPIìì SQLModelì ì¬ì©íë ë°©ë²ì ëí 믞ë íí 늬ìŒë ììµëë€. âš
+[FastAPIìì SQLModelì ì¬ì©íë ë°©ë²ì ëí 믞ë íí 늬ìŒ](https://sqlmodel.tiangolo.com/tutorial/fastapi/)ë ììµëë€. âš
-íŽë¹ íí 늬ìŒìë SQL ë°ìŽí°ë² ìŽì€ í
ì€ížì ëí ì¹ì
ë í¬íšëìŽ ììµëë€. ð
+íŽë¹ íí 늬ìŒìë [SQL ë°ìŽí°ë² ìŽì€ í
ì€íž](https://sqlmodel.tiangolo.com/tutorial/fastapi/tests/)ì ëí ì¹ì
ë í¬íšëìŽ ììµëë€. ð
diff --git a/docs/ko/docs/index.md b/docs/ko/docs/index.md
index d2e08be16f..91d27fcee9 100644
--- a/docs/ko/docs/index.md
+++ b/docs/ko/docs/index.md
@@ -11,25 +11,25 @@
FastAPI íë ììí¬, ê³ ì±ë¥, ê°íží íìµ, ë¹ ë¥ž ìœë ìì±, ì€ë¹ë íë¡ëì
-
+
-
+
-
+
-
+
---
-**묞ì**: https://fastapi.tiangolo.com
+**묞ì**: [https://fastapi.tiangolo.com/ko](https://fastapi.tiangolo.com/ko)
-**ìì€ ìœë**: https://github.com/fastapi/fastapi
+**ìì€ ìœë**: [https://github.com/fastapi/fastapi](https://github.com/fastapi/fastapi)
---
@@ -44,7 +44,7 @@ FastAPIë íëì ìŽê³ , ë¹ ë¥Žë©°(ê³ ì±ë¥), íìŽì¬ íì€ íì
ííž
* **ì¬ì**: ìœê² ì¬ì©íê³ ë°°ì°ëë¡ ì€ê³. ì ì 묞ì ìœêž° ìê°.
* **ì§§ì**: ìœë ì€ë³µ ìµìí. ê° ë§€ê°ë³ì ì ìžì ì¬ë¬ êž°ë¥. ì ì ë²ê·ž.
* **ê²¬ê³ íš**: ì€ë¹ë íë¡ëì
ì© ìœë륌 ì»ìŒììì€. ìë ëíí 묞ìì íšê».
-* **íì€ êž°ë°**: APIì ëí (ìì í ížíëë) ê°ë°©í íì€ êž°ë°: OpenAPI (ìŽì ì Swaggerë¡ ìë €ì¡ë) ë° JSON Schema.
+* **íì€ êž°ë°**: APIì ëí (ìì í ížíëë) ê°ë°©í íì€ êž°ë°: [OpenAPI](https://github.com/OAI/OpenAPI-Specification) (ìŽì ì Swaggerë¡ ìë €ì¡ë) ë° [JSON Schema](https://json-schema.org/).
* ëŽë¶ ê°ë°íì íë¡ëì
ì í늬ìŒìŽì
ì ë¹ëí í
ì€ížì 귌거í ìž¡ì
@@ -55,51 +55,51 @@ FastAPIë íëì ìŽê³ , ë¹ ë¥Žë©°(ê³ ì±ë¥), íìŽì¬ íì€ íì
ííž
### í€ì€í€ ì€í°ì { #keystone-sponsor }
{% for sponsor in sponsors.keystone -%}
-
+
{% endfor -%}
### 곚ë ë° ì€ë² ì€í°ì { #gold-and-silver-sponsors }
{% for sponsor in sponsors.gold -%}
-
+
{% endfor -%}
{%- for sponsor in sponsors.silver -%}
-
+
{% endfor %}
-ë€ë¥ž ì€í°ì
+[ë€ë¥ž ì€í°ì](https://fastapi.tiangolo.com/ko/fastapi-people/#sponsors)
## ìê²¬ë€ { #opinions }
"_[...] ì ë ììŠ **FastAPI**륌 ë§ìŽ ì¬ì©íê³ ììµëë€. [...] ì¬ì€ ì°ëЬ íì **ë§ìŽí¬ë¡ìííž ML ìë¹ì€** ì ë¶ë¥Œ ë°ê¿ ê³íì
ëë€. ê·žì€ ìŒë¶ë íµì¬ **Windows**ì ëªëªì **Office** ì íë€ìŽ íµí©ëê³ ììµëë€._"
-Kabir Khan -
ë§ìŽí¬ë¡ìííž (ref)
+Kabir Khan -
ë§ìŽí¬ë¡ìííž (ref)
---
"_**FastAPI** ëŒìŽëžë¬ëŠ¬ë¥Œ ì±ííì¬ **ììž¡**ì ì»êž° ìíŽ ì¿ŒëŠ¬ë¥Œ ì€í í ì ìë **REST** ìë²ë¥Œ ìì±íìµëë€. [Ludwigì ìíŽ]_"
-Piero Molino, Yaroslav Dudin ê·žëŠ¬ê³ Sai Sumanth Miryala -
ì°ë² (ref)
+Piero Molino, Yaroslav Dudin ê·žëŠ¬ê³ Sai Sumanth Miryala -
ì°ë² (ref)
---
"_**Netflix**ë ì°ëЬì ì€í ìì€ ë°°í¬íìž **ìêž° êŽëЬ** ì€ìŒì€ížë ìŽì
íë ììí¬ë¥Œ ë°íí ì ììŽ êž°ì©ëë€: ë°ë¡ **Dispatch**ì
ëë€! [**FastAPI**ë¡ ë¹ë]_"
-Kevin Glisson, Marc Vilanova, Forest Monsen -
ë·íëŠì€ (ref)
+Kevin Glisson, Marc Vilanova, Forest Monsen -
ë·íëŠì€ (ref)
---
"_**FastAPI**ê° ë묎 ì¢ìì êµ¬ëŠ ì륌 ê±·ëë¯ í©ëë€. ì ë§ ìŠê²ìµëë€!_"
-
+Brian Okken -
[Python Bytes](https://pythonbytes.fm/episodes/show/123/time-to-right-the-py-wrongs?time_in_sec=855) podcast host (ref)
---
"_ìì§í, ë¹ì ìŽ ë§ë ê²ì ë§€ì° ê²¬ê³ íê³ ìžë šëìŽ ë³Žì
ëë€. ì¬ë¬ 멎ìì **Hug**ê° ìŽë ê² ëììŒë©Ž í©ëë€ - 귞걞 ë§ë ëêµ°ê°ë¥Œ 볎ë ê²ì ë§ì ìê°ì ì€ëë€._"
-
+Timothy Crosley -
[Hug](https://github.com/hugapi/hug) ì ìì (ref)
---
@@ -107,27 +107,27 @@ FastAPIë íëì ìŽê³ , ë¹ ë¥Žë©°(ê³ ì±ë¥), íìŽì¬ íì€ íì
ííž
"_ì°ëЬ **API**륌 **FastAPI**ë¡ ë°ê¿šìµëë€ [...] ìë§ ì¬ë¬ë¶ë ì¢ìíì€ ê²ì
ëë€ [...]_"
-
+Ines Montani - Matthew Honnibal -
[Explosion AI](https://explosion.ai) ì€ëŠœì - [spaCy](https://spacy.io) ì ìì (ref) -
(ref)
---
"_íë¡ëì
Python API륌 ë§ë€ê³ ì íë€ë©Ž, ì ë **FastAPI**륌 ê°ë ¥í ì¶ì²í©ëë€. **ìëŠëµê² ì€ê³**ëìê³ , **ì¬ì©ìŽ ê°ëš**íë©°, **íì¥ì±ìŽ ë§€ì° ë°ìŽë**ê³ , ì°ëЬì API ì°ì ê°ë° ì ëµìì **íµì¬ êµ¬ì± ìì**ê° ëììŒë©° Virtual TAC Engineer ê°ì ë§ì ìëíì ìë¹ì€ë¥Œ ìŽëê³ ììµëë€._"
-Deon Pillsbury -
Cisco (ref)
+Deon Pillsbury -
Cisco (ref)
---
## FastAPI 믞ë ë€íë©í°ëЬ { #fastapi-mini-documentary }
-2025ë
ë§ì ê³µê°ë FastAPI 믞ë ë€íë©í°ëŠ¬ê° ììµëë€. ìšëŒìžìì ìì²í ì ììµëë€:
+2025ë
ë§ì ê³µê°ë [FastAPI 믞ë ë€íë©í°ëЬ](https://www.youtube.com/watch?v=mpR8ngthqiE)ê° ììµëë€. ìšëŒìžìì ìì²í ì ììµëë€:
-
+
## **Typer**, CLI륌 ìí FastAPI { #typer-the-fastapi-of-clis }
-
+
-ì¹ API ëì í°ë¯žëìì ì¬ì©í CLI ì±ì ë§ë€ê³ ìë€ë©Ž, **Typer**륌 íìžíŽ ë³Žììì€.
+ì¹ API ëì í°ë¯žëìì ì¬ì©í CLI ì±ì ë§ë€ê³ ìë€ë©Ž, [**Typer**](https://typer.tiangolo.com/)륌 íìžíŽ ë³Žììì€.
**Typer**ë FastAPIì ëìì
ëë€. ê·žëŠ¬ê³ **CLI륌 ìí FastAPI**ê° ëêž° ìíŽ ì게ìµëë€. âšïž ð
@@ -135,12 +135,12 @@ FastAPIë íëì ìŽê³ , ë¹ ë¥Žë©°(ê³ ì±ë¥), íìŽì¬ íì€ íì
ííž
FastAPIë ê±°ìžë€ì ìŽê¹š ìì ì ììµëë€:
-* ì¹ ë¶ë¶ì ìí Starlette.
-* ë°ìŽí° ë¶ë¶ì ìí Pydantic.
+* [Starlette](https://www.starlette.dev/) â ì¹ ë¶ë¶ì ëŽë¹í©ëë€.
+* [Pydantic](https://docs.pydantic.dev/) â ë°ìŽí° ë¶ë¶ì ëŽë¹í©ëë€.
## ì€ì¹ { #installation }
-ê°ì í겜ì ìì±íê³ íì±íí ë€ì FastAPI륌 ì€ì¹íìžì:
+[ê°ì í겜](https://fastapi.tiangolo.com/ko/virtual-environments/)ì ìì±íê³ íì±íí ë€ì FastAPI륌 ì€ì¹íìžì:
@@ -199,7 +199,7 @@ async def read_item(item_id: int, q: str | None = None):
**Note**:
-ì ëªšë¥Žê² ë€ë©Ž,
묞ììì `async`ì `await`ì êŽí _"êžíìžì?"_ ì¹ì
ì íìžíŽ ë³Žììì€.
+ì ëªšë¥Žê² ë€ë©Ž, ["êžíìžì?"](https://fastapi.tiangolo.com/ko/async/#in-a-hurry) ì¹ì
ì íìžíŽ ë³Žììì€.
@@ -210,7 +210,7 @@ async def read_item(item_id: int, q: str | None = None):
```console
-$ fastapi dev main.py
+$ fastapi dev
âââââââââââ FastAPI CLI - Development mode ââââââââââââ®
â â
@@ -235,19 +235,19 @@ INFO: Application startup complete.
-fastapi dev main.py ëª
ë ¹ì êŽíì¬...
+fastapi dev ëª
ë ¹ì êŽíì¬...
-`fastapi dev` ëª
ë ¹ì `main.py` íìŒì ìœê³ , ê·ž ìì **FastAPI** ì±ì ê°ì§í ë€ì, Uvicornì ì¬ì©íŽ ìë²ë¥Œ ììí©ëë€.
+`fastapi dev` ëª
ë ¹ì ì¬ë¬ë¶ì `main.py` íìŒì ìëìŒë¡ ìœê³ , ê·ž ìì **FastAPI** ì±ì ê°ì§í ë€ì, [Uvicorn](https://www.uvicorn.dev)ì ì¬ì©íŽ ìë²ë¥Œ ììí©ëë€.
Ʞ볞ì ìŒë¡ `fastapi dev`ë ë¡ì»¬ ê°ë°ì ìíŽ auto-reloadê° íì±íë ìíë¡ ììë©ëë€.
-ììží ëŽì©ì FastAPI CLI 묞ììì íìží ì ììµëë€.
+ììží ëŽì©ì [FastAPI CLI 묞ì](https://fastapi.tiangolo.com/ko/fastapi-cli/)ìì íìží ì ììµëë€.
### íìžíêž° { #check-it }
-ëžëŒì°ì ë¡
http://127.0.0.1:8000/items/5?q=somequery륌 ìŽìŽë³Žììì€.
+ëžëŒì°ì ë¡ [http://127.0.0.1:8000/items/5?q=somequery](http://127.0.0.1:8000/items/5?q=somequery)륌 ìŽìŽë³Žììì€.
ìëì JSON ìëµì 볌 ì ììµëë€:
@@ -264,17 +264,17 @@ INFO: Application startup complete.
### ëíí API 묞ì { #interactive-api-docs }
-ìŽì
http://127.0.0.1:8000/docsë¡ ê°ë³Žììì€.
+ìŽì [http://127.0.0.1:8000/docs](http://127.0.0.1:8000/docs)ë¡ ê°ë³Žììì€.
-ìë ëíí API 묞ì륌 볌 ì ììµëë€ (
Swagger UI ì ê³µ):
+ìë ëíí API 묞ì륌 볌 ì ììµëë€ ([Swagger UI](https://github.com/swagger-api/swagger-ui) ì ê³µ):

### ëì API 묞ì { #alternative-api-docs }
-ê·žëŠ¬ê³ ìŽì
http://127.0.0.1:8000/redocë¡ ê°ëŽ
ìë€.
+ê·žëŠ¬ê³ ìŽì [http://127.0.0.1:8000/redoc](http://127.0.0.1:8000/redoc)ë¡ ê°ëŽ
ìë€.
-ë€ë¥ž ìë 묞ì륌 볌 ì ììµëë€(
ReDoc ì ê³µ):
+ë€ë¥ž ìë 묞ì륌 볌 ì ììµëë€([ReDoc](https://github.com/Rebilly/ReDoc) ì ê³µ):

@@ -316,7 +316,7 @@ def update_item(item_id: int, item: Item):
### ëíí API 묞ì ì
ê·žë ìŽë { #interactive-api-docs-upgrade }
-ìŽì
http://127.0.0.1:8000/docsë¡ ìŽëí©ëë€.
+ìŽì [http://127.0.0.1:8000/docs](http://127.0.0.1:8000/docs)ë¡ ìŽëí©ëë€.
* ëíí API 묞ìë ì 볞묞ì í¬íšíŽ ìëìŒë¡ ì
ë°ìŽížë©ëë€:
@@ -332,7 +332,7 @@ def update_item(item_id: int, item: Item):
### ëì API 묞ì ì
ê·žë ìŽë { #alternative-api-docs-upgrade }
-ê·žëŠ¬ê³ ìŽì ,
http://127.0.0.1:8000/redocë¡ ìŽëí©ëë€.
+ê·žëŠ¬ê³ ìŽì , [http://127.0.0.1:8000/redoc](http://127.0.0.1:8000/redoc)ë¡ ìŽëí©ëë€.
* ëì 묞ì ìì ì 쿌늬 ë§€ê°ë³ìì 볞묞ì ë°ìí©ëë€:
@@ -442,7 +442,7 @@ item: Item
* ê°ë ¥íê³ ì¬ì©íêž° ì¬ìŽ **
ìì¡Žì± ì£Œì
** ìì€í
.
* **OAuth2** ì§ìì í¬íší **JWT tokens** ë° **HTTP Basic**ì ê°ë 볎ì곌 ìžìŠ.
* (Pydantic ëë¶ì) **ê¹ì ì€ì²© JSON 몚ëž**ì ì ìžíëë° ë ì§ë³Ží (íì§ë§ ë§ì°¬ê°ì§ë¡ ì¬ìŽ) êž°ì .
-*
Strawberry ë° êž°í ëŒìŽëžë¬ëЬìì **GraphQL** íµí©.
+* [Strawberry](https://strawberry.rocks) ë° êž°í ëŒìŽëžë¬ëЬìì **GraphQL** íµí©.
* (Starlette ëë¶ì) ë§ì ì¶ê° êž°ë¥:
* **ì¹ ììŒ**
* HTTPX ë° `pytest`ì êž°ë°í ê·¹í ì¬ìŽ í
ì€íž
@@ -452,24 +452,10 @@ item: Item
### ì± ë°°í¬íêž°(ì í ì¬í) { #deploy-your-app-optional }
-ì íì ìŒë¡ FastAPI ì±ì
FastAPI Cloudì ë°°í¬í ì ììµëë€. ìì§ìŽëŒë©Ž ëêž°ì ëª
ëšì ë±ë¡íŽ ë³Žìžì. ð
+ì íì ìŒë¡ FastAPI ì±ì [FastAPI Cloud](https://fastapicloud.com)ì ë°°í¬í ì ììµëë€. ìì§ìŽëŒë©Ž ëêž°ì ëª
ëšì ë±ë¡íŽ ë³Žìžì. ð
ìŽë¯ž **FastAPI Cloud** ê³ì ìŽ ìë€ë©Ž(ëêž°ì ëª
ëšìì ìŽëíŽ ëë žìµëë€ ð), í ë²ì ëª
ë ¹ìŒë¡ ì í늬ìŒìŽì
ì ë°°í¬í ì ììµëë€.
-ë°°í¬íêž° ì ì, ë¡ê·žìžëìŽ ìëì§ íìžíìžì:
-
-
-
-```console
-$ fastapi login
-
-You are logged in to FastAPI Cloud ð
-```
-
-
-
-ê·žë° ë€ì ì±ì ë°°í¬íìžì:
-
```console
@@ -488,7 +474,7 @@ Deploying to FastAPI Cloud...
#### FastAPI Cloud ìê° { #about-fastapi-cloud }
-**
FastAPI Cloud**ë **FastAPI** ë€ì ìë ëìŒí ìì±ìì íìŽ ë§ë€ììµëë€.
+**[FastAPI Cloud](https://fastapicloud.com)**ë **FastAPI** ë€ì ìë ëìŒí ìì±ìì íìŽ ë§ë€ììµëë€.
ìµìíì ë
žë ¥ìŒë¡ API륌 **ë¹ë**, **ë°°í¬**, **ì ê·Œ**íë 곌ì ì ê°ìíí©ëë€.
@@ -504,9 +490,9 @@ FastAPIë ì€í ìì€ìŽë©° íì€ì êž°ë°ìŒë¡ í©ëë€. ì íí ìŽ
## ì±ë¥ { #performance }
-ë
늜ë TechEmpower ë²€ì¹ë§í¬ìì Uvicornìì ìëíë FastAPI ì í늬ìŒìŽì
ìŽ
ì¬ì© ê°ë¥í ê°ì¥ ë¹ ë¥ž Python íë ììí¬ ì€ íëë¡ Starletteì Uvicorn(FastAPIìì ëŽë¶ì ìŒë¡ ì¬ì©)ìë§ ë°ëê³ ììµëë€. (*)
+ë
늜ë TechEmpower ë²€ì¹ë§í¬ìì Uvicornìì ìëíë **FastAPI** ì í늬ìŒìŽì
ìŽ [ì¬ì© ê°ë¥í ê°ì¥ ë¹ ë¥ž Python íë ììí¬ ì€ íë](https://www.techempower.com/benchmarks/#section=test&runid=7464e520-0dc2-473d-bd34-dbdfd7e85911&hw=ph&test=query&l=zijzen-7)ë¡ Starletteì Uvicorn(FastAPIìì ëŽë¶ì ìŒë¡ ì¬ì©)ìë§ ë°ëê³ ììµëë€. (*)
-ììží ëŽì©ì
ë²€ì¹ë§í¬ ì¹ì
ì 볎ììì€.
+ììží ëŽì©ì [ë²€ì¹ë§í¬](https://fastapi.tiangolo.com/ko/benchmarks/) ì¹ì
ì 볎ììì€.
## ìì¡Žì± { #dependencies }
@@ -514,23 +500,23 @@ FastAPIë Pydantic곌 Starletteì ì졎í©ëë€.
### `standard` ìì¡Žì± { #standard-dependencies }
-FastAPI륌 `pip install "fastapi[standard]"`ë¡ ì€ì¹í멎 `standard` 귞룹ì ì íì ì졎ì±ìŽ íšê» ì€ì¹ë©ëë€.
+`pip install "fastapi[standard]"`ë¡ FastAPI륌 ì€ì¹í멎 `standard` 귞룹ì ì íì ì졎ì±ìŽ íšê» ì€ì¹ë©ëë€.
PydanticìŽ ì¬ì©íë:
-*
email-validator - ìŽë©ìŒ ì íšì± ê²ì¬.
+* [`email-validator`](https://github.com/JoshData/python-email-validator) - ìŽë©ìŒ ì íšì± ê²ì¬.
StarletteìŽ ì¬ì©íë:
-*
httpx - `TestClient`륌 ì¬ì©íë €ë©Ž íì.
-*
jinja2 - Ʞ볞 í
í늿 ì€ì ì ì¬ì©íë €ë©Ž íì.
-*
python-multipart - `request.form()`곌 íšê» form
"íì±" ì§ìì ìí멎 íì.
+* [`httpx`](https://www.python-httpx.org) - `TestClient`륌 ì¬ì©íë €ë©Ž íì.
+* [`jinja2`](https://jinja.palletsprojects.com) - Ʞ볞 í
í늿 ì€ì ì ì¬ì©íë €ë©Ž íì.
+* [`python-multipart`](https://github.com/Kludex/python-multipart) - `request.form()`곌 íšê» form
"íì±" ì§ìì ìí멎 íì.
FastAPIê° ì¬ì©íë:
-*
uvicorn - ì í늬ìŒìŽì
ì ë¡ëíê³ ì ê³µíë ìë²ë¥Œ ìí ê²ì
ëë€. ì¬êž°ìë ê³ ì±ë¥ ìë¹ì íìí ìŒë¶ ì졎ì±(ì: `uvloop`)ìŽ í¬íšë `uvicorn[standard]`ê° í¬íšë©ëë€.
+* [`uvicorn`](https://www.uvicorn.dev) - ì í늬ìŒìŽì
ì ë¡ëíê³ ì ê³µíë ìë²ë¥Œ ìí ê²ì
ëë€. ì¬êž°ìë ê³ ì±ë¥ ìë¹ì íìí ìŒë¶ ì졎ì±(ì: `uvloop`)ìŽ í¬íšë `uvicorn[standard]`ê° í¬íšë©ëë€.
* `fastapi-cli[standard]` - `fastapi` ëª
ë ¹ì ì ê³µíêž° ìí ê²ì
ëë€.
- * ì¬êž°ìë FastAPI ì í늬ìŒìŽì
ì
FastAPI Cloudì ë°°í¬í ì ìê² íŽì£Œë `fastapi-cloud-cli`ê° í¬íšë©ëë€.
+ * ì¬êž°ìë [FastAPI Cloud](https://fastapicloud.com)ì FastAPI ì í늬ìŒìŽì
ì ë°°í¬í ì ìê² íŽì£Œë `fastapi-cloud-cli`ê° í¬íšë©ëë€.
### `standard` ìì¡Žì± ììŽ { #without-standard-dependencies }
@@ -546,13 +532,13 @@ FastAPIê° ì¬ì©íë:
ì¶ê° ì íì Pydantic ì졎ì±:
-*
pydantic-settings - ì€ì êŽëŠ¬ë¥Œ ìí ê²ì
ëë€.
-*
pydantic-extra-types - Pydanticìì ì¬ì©í ì¶ê° íì
ì ìí ê²ì
ëë€.
+* [`pydantic-settings`](https://docs.pydantic.dev/latest/usage/pydantic_settings/) - ì€ì êŽëŠ¬ë¥Œ ìí ê²ì
ëë€.
+* [`pydantic-extra-types`](https://docs.pydantic.dev/latest/usage/types/extra_types/extra_types/) - Pydanticìì ì¬ì©í ì¶ê° íì
ì ìí ê²ì
ëë€.
ì¶ê° ì íì FastAPI ì졎ì±:
-*
orjson - `ORJSONResponse`륌 ì¬ì©íë €ë©Ž íì.
-*
ujson - `UJSONResponse`륌 ì¬ì©íë €ë©Ž íì.
+* [`orjson`](https://github.com/ijl/orjson) - `ORJSONResponse`륌 ì¬ì©íë €ë©Ž íì.
+* [`ujson`](https://github.com/esnme/ultrajson) - `UJSONResponse`륌 ì¬ì©íë €ë©Ž íì.
## ëŒìŽìŒì€ { #license }
diff --git a/docs/ko/docs/project-generation.md b/docs/ko/docs/project-generation.md
index e3120e6f80..774b03a190 100644
--- a/docs/ko/docs/project-generation.md
+++ b/docs/ko/docs/project-generation.md
@@ -4,7 +4,7 @@
ë§ì ìŽêž° ì€ì , 볎ì, ë°ìŽí°ë² ìŽì€ ë° ìŒë¶ API ìëí¬ìžížê° ìŽë¯ž ì€ë¹ëìŽ ììŒë¯ë¡, ì¬ë¬ë¶ì ìŽ í
í늿ì ììíë ë° ì¬ì©í ì ììµëë€.
-GitHub ì ì¥ì:
Full Stack FastAPI í
í늿
+GitHub ì ì¥ì: [Full Stack FastAPI í
í늿](https://github.com/tiangolo/full-stack-fastapi-template)
## Full Stack FastAPI í
í늿 - êž°ì ì€í곌 êž°ë¥ë€ { #full-stack-fastapi-template-technology-stack-and-features }
diff --git a/docs/ko/docs/python-types.md b/docs/ko/docs/python-types.md
index d7d9021ed3..12890f2832 100644
--- a/docs/ko/docs/python-types.md
+++ b/docs/ko/docs/python-types.md
@@ -271,7 +271,7 @@ def some_function(data: Any):
## Pydantic ëªšëž { #pydantic-models }
-
Pydanticì ë°ìŽí° ê²ìŠì ìííë íìŽì¬ ëŒìŽëžë¬ëЬì
ëë€.
+[Pydantic](https://docs.pydantic.dev/)ì ë°ìŽí° ê²ìŠì ìííë íìŽì¬ ëŒìŽëžë¬ëЬì
ëë€.
ìì±ì ê°ì§ íŽëì€ ííë¡ ë°ìŽí°ì "몚ì(shape)"ì ì ìží©ëë€.
@@ -287,13 +287,13 @@ Pydantic ê³µì 묞ìì ìì:
/// info | ì 볎
-
Pydanticì ëíŽ ë ììë³Žë €ë©Ž 묞ì륌 íìžíìžì.
+Pydanticì ëíŽ ë ììë³Žë €ë©Ž [묞ì륌 íìžíìžì](https://docs.pydantic.dev/).
///
**FastAPI**ë 몚ë Pydanticì êž°ë°ì ëê³ ììµëë€.
-ìŽ ëªšë ê²ì [ììµì - ì¬ì©ì ìëŽì](tutorial/index.md){.internal-link target=_blank}ìì ì€ì ë¡ ë§ìŽ ë³Žê² ë ê²ì
ëë€.
+ìŽ ëªšë ê²ì [ììµì - ì¬ì©ì ìëŽì](tutorial/index.md)ìì ì€ì ë¡ ë§ìŽ ë³Žê² ë ê²ì
ëë€.
## ë©íë°ìŽí° ì ëí
ìŽì
ìŽ ìë íì
ííž { #type-hints-with-metadata-annotations }
@@ -339,12 +339,12 @@ Pydantic ê³µì 묞ìì ìì:
* OpenAPI륌 ì¬ì©íŽ API륌 **묞ìí**:
* ìë ìížìì© ë¬žì UIìì ì¬ì©ë©ëë€.
-ìŽ ëªšë ê²ìŽ ë€ì ì¶ìì ìŒë¡ ë€ëŠŽ ìë ììµëë€. ê±±ì íì§ ë§ìžì. [ììµì - ì¬ì©ì ìëŽì](tutorial/index.md){.internal-link target=_blank}ìì ì€ì ë¡ íìžíê² ë ê²ì
ëë€.
+ìŽ ëªšë ê²ìŽ ë€ì ì¶ìì ìŒë¡ ë€ëŠŽ ìë ììµëë€. ê±±ì íì§ ë§ìžì. [ììµì - ì¬ì©ì ìëŽì](tutorial/index.md)ìì ì€ì ë¡ íìžíê² ë ê²ì
ëë€.
ê°ì¥ ì€ìí ì ì íì€ íìŽì¬ íì
ì í ê³³ìì ì¬ì©íšìŒë¡ìš(ë ë§ì íŽëì€, ë°ìœë ìŽí° ë±ì ì¶ê°íë ëì ) **FastAPI**ê° ì¬ë¬ë¶ì ìíŽ ë§ì ìŒì íŽì€ë€ë ì¬ì€ì
ëë€.
/// info | ì 볎
-ììµì륌 몚ë ëëŽê³ íì
ì ëíŽ ë ìì볎Ʞ ìíŽ ë€ì ëììë€ë©Ž, ì¢ì ìë£ë¡
`mypy`ì "cheat sheet"ê° ììµëë€.
+ììµì륌 몚ë ëëŽê³ íì
ì ëíŽ ë ìì볎Ʞ ìíŽ ë€ì ëììë€ë©Ž, ì¢ì ìë£ë¡ [`mypy`ì "cheat sheet"](https://mypy.readthedocs.io/en/latest/cheat_sheet_py3.html)ê° ììµëë€.
///
diff --git a/docs/ko/docs/tutorial/background-tasks.md b/docs/ko/docs/tutorial/background-tasks.md
index f23902e11f..1f042829c0 100644
--- a/docs/ko/docs/tutorial/background-tasks.md
+++ b/docs/ko/docs/tutorial/background-tasks.md
@@ -63,7 +63,7 @@ FastAPIììë ìëµì ë°íí *íì* ì€íí 백귞ëŒìŽë ìì
## êž°ì ì ìžë¶ì¬í { #technical-details }
-`BackgroundTasks` íŽëì€ë
`starlette.background`ìì ì§ì ê°ì žìµëë€.
+`BackgroundTasks` íŽëì€ë [`starlette.background`](https://www.starlette.dev/background/)ìì ì§ì ê°ì žìµëë€.
FastAPIì ì§ì ìí¬íž/í¬íšëìŽ ììŒë¯ë¡ `fastapi`ìì ìí¬íží ì ìê³ , ì€ìë¡ `starlette.background`ìì ëììž `BackgroundTask`(ëì `s`ê° ìì)륌 ìí¬ížíë ê²ì íŒí ì ììµëë€.
@@ -71,15 +71,15 @@ FastAPIì ì§ì ìí¬íž/í¬íšëìŽ ììŒë¯ë¡ `fastapi`ìì ìí¬íž
FastAPIìì `BackgroundTask`ë§ ëšë
ìŒë¡ ì¬ì©íë ê²ë ê°ë¥íì§ë§, ìœëìì ê°ì²Žë¥Œ ìì±íê³ ìŽë¥Œ í¬íšíë Starlette `Response`륌 ë°ííŽìŒ í©ëë€.
-ë ììží ëŽì©ì
Starletteì Background Tasks ê³µì 묞ììì íìží ì ììµëë€.
+ë ììží ëŽì©ì [Starletteì Background Tasks ê³µì 묞ì](https://www.starlette.dev/background/)ìì íìží ì ììµëë€.
## 죌ìì¬í { #caveat }
-ë¬Žê±°ìŽ ë°±ê·žëŒìŽë ê³ì°ì ìííŽìŒ íê³ , ë°ëì ëìŒí íë¡ìžì€ìì ì€íí íìê° ìë€ë©Ž(ì: ë©ëªšëЬ, ë³ì ë±ì ê³µì í íìê° ìì)
Celery ê°ì ë í° ë구륌 ì¬ì©íë ê²ìŽ ëììŽ ë ì ììµëë€.
+ë¬Žê±°ìŽ ë°±ê·žëŒìŽë ê³ì°ì ìííŽìŒ íê³ , ë°ëì ëìŒí íë¡ìžì€ìì ì€íí íìê° ìë€ë©Ž(ì: ë©ëªšëЬ, ë³ì ë±ì ê³µì í íìê° ìì) [Celery](https://docs.celeryq.dev) ê°ì ë í° ë구륌 ì¬ì©íë ê²ìŽ ëììŽ ë ì ììµëë€.
ìŽë€ì RabbitMQë Redis ê°ì ë©ìì§/ìì
í êŽëЬì ë± ë ë³µì¡í ì€ì ì íìë¡ íë 겜í¥ìŽ ìì§ë§, ì¬ë¬ íë¡ìžì€ìì, í¹í ì¬ë¬ ìë²ìì 백귞ëŒìŽë ìì
ì ì€íí ì ììµëë€.
-íì§ë§ ëìŒí **FastAPI** ì±ì ë³ìì ê°ì²Žì ì ê·ŒíŽìŒ íê±°ë(ëë ìŽë©ìŒ ì늌 ì ì¡ì²ëŒ) ìì 백귞ëŒìŽë ìì
ì ìííŽìŒ íë€ë©Ž, `BackgroundTasks`륌 ê°ëší ì¬ì©í멎 ë©ëë€.
+íì§ë§ ëìŒí **FastAPI** ì±ì ë³ìì ê°ì²Žì ì ê·ŒíŽìŒ íê±°ë, ìì 백귞ëŒìŽë ìì
(ì: ìŽë©ìŒ ì늌 ì ì¡)ì ìííŽìŒ íë€ë©Ž, `BackgroundTasks`륌 ê°ëší ì¬ì©í멎 ë©ëë€.
## ììœ { #recap }
diff --git a/docs/ko/docs/tutorial/bigger-applications.md b/docs/ko/docs/tutorial/bigger-applications.md
index 1b9d17e49a..5b93dbb20b 100644
--- a/docs/ko/docs/tutorial/bigger-applications.md
+++ b/docs/ko/docs/tutorial/bigger-applications.md
@@ -123,7 +123,7 @@ from app.routers import items
ìŽ ìì륌 ëšìííêž° ìíŽ ììë¡ ë§ë í€ë륌 ì¬ì©íê³ ììµëë€.
-íì§ë§ ì€ì ìí©ììë íµí©ë [Security ì ížëЬí°](security/index.md){.internal-link target=_blank}륌 ì¬ì©íë ê²ìŽ ë ì¢ì 결곌륌 ì»ì ì ììµëë€.
+íì§ë§ ì€ì ìí©ììë íµí©ë [Security ì ížëЬí°](security/index.md)륌 ì¬ì©íë ê²ìŽ ë ì¢ì 결곌륌 ì»ì ì ììµëë€.
///
@@ -169,7 +169,7 @@ async def read_item(item_id: str):
/// tip | í
-[*path operation decoratorì dependencies*](dependencies/dependencies-in-path-operation-decorators.md){.internal-link target=_blank}ì ë§ì°¬ê°ì§ë¡, *path operation function*ì ìŽë€ ê°ë ì ë¬ëì§ ììµëë€.
+[*path operation decoratorì dependencies*](dependencies/dependencies-in-path-operation-decorators.md)ì ë§ì°¬ê°ì§ë¡, *path operation function*ì ìŽë€ ê°ë ì ë¬ëì§ ììµëë€.
///
@@ -185,8 +185,8 @@ async def read_item(item_id: str):
* 몚ë 믞늬 ì ìë `responses`륌 í¬íší©ëë€.
* ìŽ ëªšë *path operations*ë ì€íëêž° ì ì `dependencies` 목ë¡ìŽ íê°/ì€íë©ëë€.
* í¹ì *path operation*ì dependencies륌 ì¶ê°ë¡ ì ìží멎 **ê·žê²ë€ë ì€íë©ëë€**.
- * router dependenciesê° ëšŒì ì€íëê³ , ê·ž ë€ìì [decoratorì `dependencies`](dependencies/dependencies-in-path-operation-decorators.md){.internal-link target=_blank}, ê·žëŠ¬ê³ ìŒë° íëŒë¯ží° dependenciesê° ì€íë©ëë€.
- * [`scopes`ê° ìë `Security` dependencies](../advanced/security/oauth2-scopes.md){.internal-link target=_blank}ë ì¶ê°í ì ììµëë€.
+ * router dependenciesê° ëšŒì ì€íëê³ , ê·ž ë€ìì [decoratorì `dependencies`](dependencies/dependencies-in-path-operation-decorators.md), ê·žëŠ¬ê³ ìŒë° íëŒë¯ží° dependenciesê° ì€íë©ëë€.
+ * [`scopes`ê° ìë `Security` dependencies](../advanced/security/oauth2-scopes.md)ë ì¶ê°í ì ììµëë€.
/// tip | í
@@ -303,7 +303,7 @@ from ...dependencies import get_token_header
íìì²ëŒ `FastAPI` íŽëì€ë¥Œ importíê³ ìì±í©ëë€.
-ëí ê° `APIRouter`ì dependenciesì ê²°í©ë [global dependencies](dependencies/global-dependencies.md){.internal-link target=_blank}ë ì ìží ì ììµëë€:
+ëí ê° `APIRouter`ì dependenciesì ê²°í©ë [global dependencies](dependencies/global-dependencies.md)ë ì ìží ì ììµëë€:
{* ../../docs_src/bigger_applications/app_an_py310/main.py hl[1,3,7] title["app/main.py"] *}
@@ -353,7 +353,7 @@ from .routers import items, users
from app.routers import items, users
```
-Python Packagesì Modulesì ëíŽ ë ììë³Žë €ë©Ž
Modulesì ëí Python ê³µì 묞ì륌 ìœìŽë³Žìžì.
+Python Packagesì Modulesì ëíŽ ë ììë³Žë €ë©Ž [Modulesì ëí Python ê³µì 묞ì](https://docs.python.org/3/tutorial/modules.html)륌 ìœìŽë³Žìžì.
///
@@ -465,6 +465,37 @@ router륌 í¬íš(include)í ë ì±ë¥ì ê±±ì í íìë ììµëë€.
///
+## `pyproject.toml`ìì `entrypoint` 구ì±íêž° { #configure-the-entrypoint-in-pyproject-toml }
+
+FastAPI `app` ê°ì²Žê° `app/main.py`ì ììŒë¯ë¡ `pyproject.toml` íìŒìì `entrypoint`륌 ë€ì곌 ê°ìŽ êµ¬ì±í ì ììµëë€:
+
+```toml
+[tool.fastapi]
+entrypoint = "app.main:app"
+```
+
+ìŽë ë€ì곌 ê°ìŽ importíë ê²ê³Œ ëìŒí©ëë€:
+
+```python
+from app.main import app
+```
+
+ìŽë ê² í멎 `fastapi` ëª
ë ¹ìŽê° ì¬ë¬ë¶ì ì±ìŽ ìŽëì ìëì§ ì ì ììµëë€.
+
+/// Note | ì°žê³
+
+ëª
ë ¹ìŽì 겜ë¡ë¥Œ ì§ì ì ë¬í ìë ììµëë€:
+
+```console
+$ fastapi dev app/main.py
+```
+
+íì§ë§ `fastapi` ëª
ë ¹ìŽë¥Œ ì€íí ëë§ë€ ì¬ë°ë¥ž 겜ë¡ë¥Œ êž°ìµíŽ ì ë¬íŽìŒ í©ëë€.
+
+ëí [VS Code íì¥](../editor-support.md)ìŽë [FastAPI Cloud](https://fastapicloud.com) ê°ì ë€ë¥ž ë구ë€ìŽ ìŽë¥Œ ì°Ÿì§ ëª»í ìë ììŒë¯ë¡, `pyproject.toml`ì `entrypoint`륌 ì¬ì©íë ê²ì ê¶ì¥í©ëë€.
+
+///
+
## ìë API 묞ì íìžíêž° { #check-the-automatic-api-docs }
ìŽì ì±ì ì€ííìžì:
@@ -472,14 +503,14 @@ router륌 í¬íš(include)í ë ì±ë¥ì ê±±ì í íìë ììµëë€.
```console
-$ fastapi dev app/main.py
+$ fastapi dev
INFO: Uvicorn running on http://127.0.0.1:8000 (Press CTRL+C to quit)
```
-귞늬ê³
http://127.0.0.1:8000/docsìì 묞ì륌 ì¬ìžì.
+ê·žëŠ¬ê³ [http://127.0.0.1:8000/docs](http://127.0.0.1:8000/docs)ìì 묞ì륌 ì¬ìžì.
ì¬ë°ë¥ž 겜ë¡(ë° prefix)ì ì¬ë°ë¥ž í귞륌 ì¬ì©íŽ, 몚ë submoduleì 겜ë¡ë¥Œ í¬íší ìë API 묞ì륌 볌 ì ììµëë€:
diff --git a/docs/ko/docs/tutorial/body-nested-models.md b/docs/ko/docs/tutorial/body-nested-models.md
index 33f0f71e95..bbb95cf00b 100644
--- a/docs/ko/docs/tutorial/body-nested-models.md
+++ b/docs/ko/docs/tutorial/body-nested-models.md
@@ -96,7 +96,7 @@ Pydantic 몚ëžì ê° ìŽížëŠ¬ë·°ížë íì
ì ê°ìµëë€.
`str`, `int`, `float` ë±ê³Œ ê°ì ìŒë°ì ìž ëšìŒ íì
곌ë ë³ê°ë¡, `str`ì ììíë ë ë³µì¡í ëšìŒ íì
ì ì¬ì©í ì ììµëë€.
-ì¬ì©í ì ìë 몚ë ìµì
ì ë³Žë €ë©Ž
Pydanticì Type Overview륌 íìžíìžì. ë€ì ì¥ìì ëª ê°ì§ ìì 륌 볌 ì ììµëë€.
+ì¬ì©í ì ìë 몚ë ìµì
ì ë³Žë €ë©Ž [Pydanticì Type Overview](https://docs.pydantic.dev/latest/concepts/types/)륌 íìžíìžì. ë€ì ì¥ìì ëª ê°ì§ ìì 륌 볌 ì ììµëë€.
ì륌 ë€ìŽ `Image` 몚ëžìë `url` íëê° ììŒë¯ë¡, ìŽë¥Œ `str` ëì Pydanticì `HttpUrl` ìžì€íŽì€ë¡ ì ìží ì ììµëë€:
diff --git a/docs/ko/docs/tutorial/body-updates.md b/docs/ko/docs/tutorial/body-updates.md
index 3719e1ffab..f9ea061a6e 100644
--- a/docs/ko/docs/tutorial/body-updates.md
+++ b/docs/ko/docs/tutorial/body-updates.md
@@ -2,7 +2,7 @@
## `PUT`ìŒë¡ êµì²Ž ì
ë°ìŽížíêž° { #update-replacing-with-put }
-í목ì ì
ë°ìŽížíë €ë©Ž
HTTP `PUT` ìì
ì ì¬ì©í ì ììµëë€.
+í목ì ì
ë°ìŽížíë €ë©Ž [HTTP `PUT`](https://developer.mozilla.org/en-US/docs/Web/HTTP/Methods/PUT) ìì
ì ì¬ì©í ì ììµëë€.
`jsonable_encoder`륌 ì¬ì©íŽ ì
ë ¥ ë°ìŽí°ë¥Œ JSONìŒë¡ ì ì¥í ì ìë ë°ìŽí°ë¡ ë³íí ì ììµëë€(ì: NoSQL ë°ìŽí°ë² ìŽì€ ì¬ì© ì). ì륌 ë€ìŽ `datetime`ì `str`ë¡ ë³ííë 겜ì°ì
ëë€.
@@ -28,7 +28,7 @@
## `PATCH`ë¡ ë¶ë¶ ì
ë°ìŽížíêž° { #partial-updates-with-patch }
-
HTTP `PATCH` ìì
ì ì¬ì©íŽ ë°ìŽí°ë¥Œ *ë¶ë¶ì ìŒë¡* ì
ë°ìŽíží ìë ììµëë€.
+[HTTP `PATCH`](https://developer.mozilla.org/en-US/docs/Web/HTTP/Methods/PATCH) ìì
ì ì¬ì©íŽ ë°ìŽí°ë¥Œ *ë¶ë¶ì ìŒë¡* ì
ë°ìŽíží ìë ììµëë€.
ìŽë ì
ë°ìŽížíë €ë ë°ìŽí°ë§ 볎ëŽê³ , ëëšžì§ë ê·žëë¡ ëë ê²ì ì믞í©ëë€.
@@ -95,6 +95,6 @@
ë°ëŒì 몚ë ìì±ì ìëµí ì ìë ë¶ë¶ ì
ë°ìŽížë¥Œ ë°ìŒë €ë©Ž, 몚ë ìì±ìŽ optionalë¡ íìë(Ʞ볞ê°ì ê°ì§ê±°ë `None`ì Ʞ볞ê°ìŒë¡ ê°ì§ë) 몚ëžìŽ íìí©ëë€.
-**ì
ë°ìŽíž**륌 ìí â몚ë ê°ìŽ optionalìžâ 몚ëžê³Œ, **ìì±**ì ìí âíì ê°ìŽ ìëâ 몚ëžì 구ë¶íë €ë©Ž [ì¶ê° 몚ëž](extra-models.md){.internal-link target=_blank}ì ì€ëª
ë ììŽëìŽë¥Œ ì¬ì©í ì ììµëë€.
+**ì
ë°ìŽíž**륌 ìí â몚ë ê°ìŽ optionalìžâ 몚ëžê³Œ, **ìì±**ì ìí âíì ê°ìŽ ìëâ 몚ëžì 구ë¶íë €ë©Ž [ì¶ê° 몚ëž](extra-models.md)ì ì€ëª
ë ììŽëìŽë¥Œ ì¬ì©í ì ììµëë€.
///
diff --git a/docs/ko/docs/tutorial/body.md b/docs/ko/docs/tutorial/body.md
index b282d1cc92..d124b4bef0 100644
--- a/docs/ko/docs/tutorial/body.md
+++ b/docs/ko/docs/tutorial/body.md
@@ -6,7 +6,7 @@
ì¬ë¬ë¶ì APIë ëë¶ë¶ì ê²œì° **ìëµ** 볞묞ì 볎ëŽìŒ í©ëë€. íì§ë§ íŽëŒìŽìžížë íì **ìì² ë³žë¬ž**ì ë³ŽëŒ íìë ìê³ , ëë¡ë (쿌늬 ë§€ê°ë³ìì íšê») ìŽë€ 겜ë¡ë§ ìì²íê³ ë³žë¬žì 볎ëŽì§ ìì ìë ììµëë€.
-**ìì²** 볞묞ì ì ìžíêž° ìíŽì 몚ë ê°ë ¥íšê³Œ ìŽì ì ê°ì¶
Pydantic 몚ëžì ì¬ì©í©ëë€.
+**ìì²** 볞묞ì ì ìžíêž° ìíŽì 몚ë ê°ë ¥íšê³Œ ìŽì ì ê°ì¶ [Pydantic](https://docs.pydantic.dev/) 몚ëžì ì¬ì©í©ëë€.
/// info | ì 볎
@@ -73,7 +73,7 @@
* ë§ìœ ë°ìŽí°ê° ì íšíì§ ìë€ë©Ž, ì íí ìŽë€ ê²ìŽ ê·žëŠ¬ê³ ìŽëìì ë°ìŽí°ê° ì 못 ëìëì§ ì§ìíë ì¹ì íê³ ëª
ë£í ìë¬ë¥Œ ë°íí ê²ì
ëë€.
* ë§€ê°ë³ì `item`ì í¬íšë ìì ë°ìŽí°ë¥Œ ì ê³µí©ëë€.
* íšì ëŽìì ë§€ê°ë³ì륌 `Item` íì
ìŒë¡ ì ìžíêž° ë묞ì, 몚ë ìŽížëŠ¬ë·°ížì ê·žì ëí íì
ì ëí ížì§êž° ì§ì(ìì± ë±)ì ëí ë°ì ì ììµëë€.
-* ì¬ë¬ë¶ì 몚ëžì ìí
JSON Schema ì ì륌 ìì±í©ëë€. ì¬ë¬ë¶ì íë¡ì ížì ì í©íë€ë©Ž ì¬ë¬ë¶ìŽ ì¬ì©íê³ ì¶ì ê³³ ìŽëììë ì¬ì©í ì ììµëë€.
+* ì¬ë¬ë¶ì 몚ëžì ìí [JSON Schema](https://json-schema.org) ì ì륌 ìì±í©ëë€. ì¬ë¬ë¶ì íë¡ì ížì ì í©íë€ë©Ž ì¬ë¬ë¶ìŽ ì¬ì©íê³ ì¶ì ê³³ ìŽëììë ì¬ì©í ì ììµëë€.
* ìŽë¬í ì€í€ë§ë, ìì±ë OpenAPI ì€í€ë§ ìŒë¶ê° ë ê²ìŽë©°, ìë 묞ìí
UIsì ì¬ì©ë©ëë€.
## ìë 묞ìí { #automatic-docs }
@@ -102,15 +102,15 @@
ìŽë¥Œ ì§ìíêž° ìíŽ Pydantic ì첎ìì ëªëª ë³ê²œì ìŽ ìììµëë€.
-ìŽì ì€í¬ëаì·ì
Visual Studio Code륌 ì°ì ê²ì
ëë€.
+ìŽì ì€í¬ëаì·ì [Visual Studio Code](https://code.visualstudio.com)ë¡ ì°ì ê²ì
ëë€.
-íì§ë§ ëê°ì ížì§êž° ì§ìì
PyCharmì ëë¶ë¶ì ë€ë¥ž íìŽì¬ ížì§êž°ììë ë°ì ì ììµëë€:
+íì§ë§ ëê°ì ížì§êž° ì§ìì [PyCharm](https://www.jetbrains.com/pycharm/)ì ëë¶ë¶ì ë€ë¥ž íìŽì¬ ížì§êž°ììë ë°ì ì ììµëë€:

/// tip | í
-ë§ìœ
PyCharm륌 ížì§êž°ë¡ ì¬ì©íë€ë©Ž,
Pydantic PyCharm Pluginì ì¬ì©í ì ììµëë€.
+ë§ìœ [PyCharm](https://www.jetbrains.com/pycharm/)륌 ížì§êž°ë¡ ì¬ì©íë€ë©Ž, [Pydantic PyCharm Plugin](https://github.com/koxudaxi/pydantic-pycharm-plugin/)ì ì¬ì©í ì ììµëë€.
ë€ì ì¬íì í¬íšíŽ Pydantic 몚ëžì ëí ížì§êž° ì§ìì í¥ììíµëë€:
@@ -163,4 +163,4 @@ FastAPIë `q`ì ê°ìŽ íìììì Ʞ볞 ê° `= None` ë묞ì ìê²
## PydanticììŽ { #without-pydantic }
-ë§ìœ Pydantic 몚ëžì ì¬ì©íê³ ì¶ì§ ìë€ë©Ž, **Body** ë§€ê°ë³ì륌 ì¬ì©í ìë ììµëë€. [Body - Multiple Parameters: Singular values in body](body-multiple-params.md#singular-values-in-body){.internal-link target=_blank} 묞ì륌 íìžíìžì.
+ë§ìœ Pydantic 몚ëžì ì¬ì©íê³ ì¶ì§ ìë€ë©Ž, **Body** ë§€ê°ë³ì륌 ì¬ì©í ìë ììµëë€. [Body - Multiple Parameters: Singular values in body](body-multiple-params.md#singular-values-in-body) 묞ì륌 íìžíìžì.
diff --git a/docs/ko/docs/tutorial/cors.md b/docs/ko/docs/tutorial/cors.md
index f78e1c0707..08d0221d3d 100644
--- a/docs/ko/docs/tutorial/cors.md
+++ b/docs/ko/docs/tutorial/cors.md
@@ -1,6 +1,6 @@
# CORS (êµì°š-ì¶ì² 늬ìì€ ê³µì ) { #cors-cross-origin-resource-sharing }
-
CORS ëë "Cross-Origin Resource Sharing"ë, ëžëŒì°ì ìì ì€íëë íë¡ ížìëì ë°±ìëì íµì íë JavaScript ìœëê° ìê³ , ë°±ìëê° íë¡ ížìëì ë€ë¥ž "ì¶ì²(origin)"ì ìë ìí©ì ì믞í©ëë€.
+[CORS ëë "Cross-Origin Resource Sharing"](https://developer.mozilla.org/en-US/docs/Web/HTTP/CORS)ë, ëžëŒì°ì ìì ì€íëë íë¡ ížìëì ë°±ìëì íµì íë JavaScript ìœëê° ìê³ , ë°±ìëê° íë¡ ížìëì ë€ë¥ž "ì¶ì²(origin)"ì ìë ìí©ì ì믞í©ëë€.
## ì¶ì² { #origin }
@@ -56,10 +56,10 @@
* `allow_origins` - êµì°š-ì¶ì² ìì²ì ë³ŽëŒ ì ìëë¡ íì©íŽìŒ íë ì¶ì²ì 늬ì€ížì
ëë€. ì: `['https://example.org', 'https://www.example.org']`. 몚ë ì¶ì²ë¥Œ íì©íë €ë©Ž `['*']`륌 ì¬ì©í ì ììµëë€.
* `allow_origin_regex` - êµì°š-ì¶ì² ìì²ì ë³ŽëŒ ì ìëë¡ íì©íŽìŒ íë ì¶ì²ì ë§€ì¹í ì ê·ííì 묞ììŽì
ëë€. ì: `'https://.*\.example\.org'`.
* `allow_methods` - êµì°š-ì¶ì² ìì²ì íì©ëìŽìŒ íë HTTP ë©ìëì 늬ì€ížì
ëë€. Ʞ볞ê°ì `['GET']`ì
ëë€. 몚ë íì€ ë©ìë륌 íì©íë €ë©Ž `['*']`륌 ì¬ì©í ì ììµëë€.
-* `allow_headers` - êµì°š-ì¶ì² ìì²ì ëíŽ ì§ìëìŽìŒ íë HTTP ìì² í€ëì 늬ì€ížì
ëë€. Ʞ볞ê°ì `[]`ì
ëë€. 몚ë í€ë륌 íì©íë €ë©Ž `['*']`륌 ì¬ì©í ì ììµëë€. `Accept`, `Accept-Language`, `Content-Language`, `Content-Type` í€ëë
ëšì CORS ìì²ì ëíŽ íì íì©ë©ëë€.
+* `allow_headers` - êµì°š-ì¶ì² ìì²ì ëíŽ ì§ìëìŽìŒ íë HTTP ìì² í€ëì 늬ì€ížì
ëë€. Ʞ볞ê°ì `[]`ì
ëë€. 몚ë í€ë륌 íì©íë €ë©Ž `['*']`륌 ì¬ì©í ì ììµëë€. `Accept`, `Accept-Language`, `Content-Language`, `Content-Type` í€ëë [ëšì CORS ìì²](https://developer.mozilla.org/en-US/docs/Web/HTTP/CORS#simple_requests)ì ëíŽ íì íì©ë©ëë€.
* `allow_credentials` - êµì°š-ì¶ì² ìì²ì ëíŽ ì¿ í€ë¥Œ ì§ìíŽìŒ íšì ëíë
ëë€. Ʞ볞ê°ì `False`ì
ëë€.
- `allow_credentials`ê° `True`ë¡ ì€ì ë ê²œì° `allow_origins`, `allow_methods`, `allow_headers` ì€ ìŽë ê²ë `['*']`ë¡ ì€ì í ì ììµëë€. 몚ë
ëª
ìì ìŒë¡ ì§ì ëìŽìŒ í©ëë€.
+ `allow_credentials`ê° `True`ë¡ ì€ì ë ê²œì° `allow_origins`, `allow_methods`, `allow_headers` ì€ ìŽë ê²ë `['*']`ë¡ ì€ì í ì ììµëë€. 몚ë [ëª
ìì ìŒë¡ ì§ì ](https://developer.mozilla.org/en-US/docs/Web/HTTP/CORS#credentialed_requests_and_wildcards)ëìŽìŒ í©ëë€.
* `expose_headers` - ëžëŒì°ì ìì ì ê·Œ ê°ë¥íŽìŒ íë 몚ë ìëµ í€ë륌 ëíë
ëë€. Ʞ볞ê°ì `[]`ì
ëë€.
* `max_age` - ëžëŒì°ì ê° CORS ìëµì ìºìíë ìµë ìê°ì ìŽ ëšìë¡ ì€ì í©ëë€. Ʞ볞ê°ì `600`ì
ëë€.
@@ -78,7 +78,7 @@
## ë ë§ì ì 볎 { #more-info }
-
CORSì ëí ë ë§ì ì 볎ë
Mozilla CORS 묞ì륌 ì°žê³ íìžì.
+
CORSì ëí ë ë§ì ì 볎ë [Mozilla CORS 묞ì](https://developer.mozilla.org/en-US/docs/Web/HTTP/CORS)륌 ì°žê³ íìžì.
/// note | êž°ì ìžë¶ì¬í
diff --git a/docs/ko/docs/tutorial/debugging.md b/docs/ko/docs/tutorial/debugging.md
index c27b68bc1c..145ffb24bc 100644
--- a/docs/ko/docs/tutorial/debugging.md
+++ b/docs/ko/docs/tutorial/debugging.md
@@ -74,7 +74,7 @@ from myapp import app
/// info | ì 볎
-ììží ëŽì©ì
ê³µì Python 묞ì륌 íìžíìžì.
+ììží ëŽì©ì [ê³µì Python 묞ì](https://docs.python.org/3/library/__main__.html)륌 íìžíìžì.
///
diff --git a/docs/ko/docs/tutorial/dependencies/dependencies-in-path-operation-decorators.md b/docs/ko/docs/tutorial/dependencies/dependencies-in-path-operation-decorators.md
index d269e7e774..880a47157f 100644
--- a/docs/ko/docs/tutorial/dependencies/dependencies-in-path-operation-decorators.md
+++ b/docs/ko/docs/tutorial/dependencies/dependencies-in-path-operation-decorators.md
@@ -32,7 +32,7 @@
ìŽ ìììì `X-Key`ì `X-Token`ìŽëŒë 컀ì€í
í€ë륌 ë§ë€ìŽ ì¬ì©íìµëë€.
-ê·žë¬ë ì€ì ë¡ ë³Žìì 구íí ëë íµí©ë [볎ì ì ížëŠ¬í° (ë€ì ì±í°)](../security/index.md){.internal-link target=_blank}륌 ì¬ì©íë ê²ìŽ ë ë§ì ìŽì ì ì»ì ì ììµëë€.
+ê·žë¬ë ì€ì ë¡ ë³Žìì 구íí ëë íµí©ë [볎ì ì ížëŠ¬í° (ë€ì ì±í°)](../security/index.md)륌 ì¬ì©íë ê²ìŽ ë ë§ì ìŽì ì ì»ì ì ììµëë€.
///
@@ -62,7 +62,7 @@
## *ê²œë¡ ì²ëЬ* 몚ìì ëí ìì¡Žì± { #dependencies-for-a-group-of-path-operations }
-ëì€ì ì¬ë¬ íìŒì ê°ì§ê³ ìì ì ìë ë í° ì í늬ìŒìŽì
ì 구조ííë ë²([ë í° ì í늬ìŒìŽì
- ì¬ë¬ íìŒë€](../../tutorial/bigger-applications.md){.internal-link target=_blank})ì ìœì ë, *ê²œë¡ ì²ëЬ* 몚ìì ëí ëšìŒ `dependencies` ë§€ê°ë³ì륌 ì ìžíë ë²ì ëíŽì ë°°ì°ê² ë ê²ì
ëë€.
+ëì€ì ì¬ë¬ íìŒì ê°ì§ê³ ìì ì ìë ë í° ì í늬ìŒìŽì
ì 구조ííë ë²([ë í° ì í늬ìŒìŽì
- ì¬ë¬ íìŒë€](../../tutorial/bigger-applications.md))ì ìœì ë, *ê²œë¡ ì²ëЬ* 몚ìì ëí ëšìŒ `dependencies` ë§€ê°ë³ì륌 ì ìžíë ë²ì ëíŽì ë°°ì°ê² ë ê²ì
ëë€.
## ì ì ìì¡Žì± { #global-dependencies }
diff --git a/docs/ko/docs/tutorial/dependencies/dependencies-with-yield.md b/docs/ko/docs/tutorial/dependencies/dependencies-with-yield.md
index 7b50fd438b..56f690f593 100644
--- a/docs/ko/docs/tutorial/dependencies/dependencies-with-yield.md
+++ b/docs/ko/docs/tutorial/dependencies/dependencies-with-yield.md
@@ -4,7 +4,7 @@ FastAPIë
`@contextlib.contextmanager` ëë
-* `@contextlib.asynccontextmanager`
+* [`@contextlib.contextmanager`](https://docs.python.org/3/library/contextlib.html#contextlib.contextmanager) ëë
+* [`@contextlib.asynccontextmanager`](https://docs.python.org/3/library/contextlib.html#contextlib.asynccontextmanager)
ë **FastAPI**ì ì졎ì±ìŒë¡ ì¬ì©í ì ììµëë€.
@@ -39,7 +39,7 @@ yieldë ê°ì *ê²œë¡ ì²ëЬ* ë° ë€ë¥ž ì졎ì±ë€ì 죌ì
ëë ê° ì
{* ../../docs_src/dependencies/tutorial007_py310.py hl[5:6] *}
-/// tip | í
+/// tip
`async` íšìì ìŒë° íšì 몚ë ì¬ì©í ì ììµëë€.
@@ -87,7 +87,7 @@ yieldë ê°ì *ê²œë¡ ì²ëЬ* ë° ë€ë¥ž ì졎ì±ë€ì 죌ì
ëë ê° ì
/// note | êž°ì ìžë¶ì¬í
-íìŽì¬ì Context Managers ëë¶ì ìŽ êž°ë¥ìŽ ìëí©ëë€.
+íìŽì¬ì [Context Managers](https://docs.python.org/3/library/contextlib.html) ëë¶ì ìŽ êž°ë¥ìŽ ìëí©ëë€.
**FastAPI**ë ìŽë¥Œ ëŽë¶ì ìŒë¡ ì¬ì©íì¬ ìŽë¥Œ ë¬ì±í©ëë€.
@@ -101,7 +101,7 @@ yieldë ê°ì *ê²œë¡ ì²ëЬ* ë° ë€ë¥ž ì졎ì±ë€ì 죌ì
ëë ê° ì
ì륌 ë€ìŽ, `HTTPException` ê°ì ë€ë¥ž ììžë¥Œ ë°ììí¬ ì ììµëë€.
-/// tip | í
+/// tip
ìŽë ë€ì ê³ êž êž°ì ìŽë©°, ëë¶ë¶ì ê²œì° ì€ì ë¡ë íìíì§ ìì ê²ì
ëë€. ì륌 ë€ìŽ, *ê²œë¡ ì²ëЬ íšì* ë± ëëšžì§ ì í늬ìŒìŽì
ìœë ëŽë¶ìì ììž (`HTTPException` í¬íš)륌 ë°ììí¬ ì ìêž° ë묞ì
ëë€.
@@ -111,7 +111,7 @@ yieldë ê°ì *ê²œë¡ ì²ëЬ* ë° ë€ë¥ž ì졎ì±ë€ì 죌ì
ëë ê° ì
{* ../../docs_src/dependencies/tutorial008b_an_py310.py hl[18:22,31] *}
-ììžë¥Œ ì¡ê³ ê·žì êž°ë°íŽ ì¬ì©ì ì ì ìëµì ìì±íë €ë©Ž, [ì¬ì©ì ì ì ììž ì²ëŠ¬êž°](../handling-errors.md#install-custom-exception-handlers){.internal-link target=_blank}륌 ìì±íìžì.
+ììžë¥Œ ì¡ê³ ê·žì êž°ë°íŽ ì¬ì©ì ì ì ìëµì ìì±íë €ë©Ž, [ì¬ì©ì ì ì ììž ì²ëŠ¬êž°](../handling-errors.md#install-custom-exception-handlers)륌 ìì±íìžì.
## `yield`ì `except`륌 ì¬ì©íë ìì¡Žì± { #dependencies-with-yield-and-except }
@@ -170,7 +170,7 @@ participant tasks as Background tasks
end
```
-/// info | ì 볎
+/// info
íŽëŒìŽìžížìë **íëì ìëµ**ë§ ì ì¡ë©ëë€. ìŽë ì€ë¥ ìëµ ì€ íëìŒ ìë ìê³ , *ê²œë¡ ì²ëЬ*ìì ìì±ë ìëµìŒ ìë ììµëë€.
@@ -178,7 +178,7 @@ participant tasks as Background tasks
///
-/// tip | í
+/// tip
*ê²œë¡ ì²ëЬ íšì*ì ìœëìì ìŽë€ ììžë¥Œ ë°ììí€ë©Ž `HTTPException`ì í¬íšíŽ `yield`륌 ì¬ì©íë ì졎ì±ìŒë¡ ì ë¬ë©ëë€. ëë¶ë¶ì ê²œì° íŽë¹ ììž(ëë ì ììž)륌 `yield`륌 ì¬ì©íë ì졎ì±ìì ë€ì ë°ìììŒ, ì ëë¡ ì²ëЬëëë¡ íŽìŒ í©ëë€.
@@ -233,14 +233,14 @@ participant operation as Path Operation
`yield`륌 ì¬ì©íë ì졎ì±ì ìê°ìŽ ì§ë멎ì ìë¡ ë€ë¥ž ì¬ì© ì¬ë¡ë¥Œ ë€ë£šê³ ìŒë¶ 묞ì 륌 ìì íêž° ìíŽ ë°ì íŽ ììµëë€.
-FastAPIì ì¬ë¬ ë²ì ìì 묎ììŽ ë°ëìëì§ ë³Žê³ ì¶ë€ë©Ž, ê³ êž ê°ìŽëì [ê³ êž ìì¡Žì± - `yield`, `HTTPException`, `except` ë° ë°±ê·žëŒìŽë ìì
ì ì¬ì©íë ì졎ì±](../../advanced/advanced-dependencies.md#dependencies-with-yield-httpexception-except-and-background-tasks){.internal-link target=_blank}ìì ë ììží ìœì ì ììµëë€.
+FastAPIì ì¬ë¬ ë²ì ìì 묎ììŽ ë°ëìëì§ ë³Žê³ ì¶ë€ë©Ž, ê³ êž ê°ìŽëì [ê³ êž ìì¡Žì± - `yield`, `HTTPException`, `except` ë° ë°±ê·žëŒìŽë ìì
ì ì¬ì©íë ì졎ì±](../../advanced/advanced-dependencies.md#dependencies-with-yield-httpexception-except-and-background-tasks)ìì ë ììží ìœì ì ììµëë€.
## 컚í
ì€íž êŽëЬì { #context-managers }
### "컚í
ì€íž êŽëЬì"ë { #what-are-context-managers }
"컚í
ì€íž êŽëЬì"ë Pythonìì `with` 묞ìì ì¬ì©í ì ìë 몚ë ê°ì²Žë¥Œ ì믞í©ëë€.
-ì륌 ë€ìŽ, `with`륌 ì¬ì©íì¬ íìŒì ìœì ì ììµëë€:
+ì륌 ë€ìŽ, [with륌 ì¬ì©íŽ íìŒì ìœì ì ììµëë€](https://docs.python.org/3/tutorial/inputoutput.html#reading-and-writing-files):
```Python
with open("./somefile.txt") as f:
@@ -256,7 +256,7 @@ with open("./somefile.txt") as f:
### `yield`륌 ì¬ì©íë ì졎ì±ìì 컚í
ì€íž êŽëЬì ì¬ì©íêž° { #using-context-managers-in-dependencies-with-yield }
-/// warning | 겜ê³
+/// warning
ìŽê²ì ìŽë ì ë "ê³ êž" ê°ë
ì
ëë€.
@@ -264,19 +264,19 @@ with open("./somefile.txt") as f:
///
-Pythonììë ë€ìì íµíŽ ì»ší
ì€íž êŽëЬì륌 ìì±í ì ììµëë€. ë ê°ì§ ë©ìëê° ìë íŽëì€ë¥Œ ìì±í©ëë€: `__enter__()` and `__exit__()`.
+Pythonììë [ë ê°ì§ ë©ìë: `__enter__()`ì `__exit__()`ê° ìë íŽëì€ë¥Œ ìì±íì¬](https://docs.python.org/3/reference/datamodel.html#context-managers) 컚í
ì€íž êŽëЬì륌 ë§ë€ ì ììµëë€.
**FastAPI**ì `yield`ê° ìë ìì¡Žì± ëŽìì
`with` ëë `async with`묞ì ì¬ì©íì¬ ìŽë€ì íì©í ì ììµëë€:
{* ../../docs_src/dependencies/tutorial010_py310.py hl[1:9,13] *}
-/// tip | í
+/// tip
컚í
ì€íž êŽëЬì륌 ìì±íë ë ë€ë¥ž ë°©ë²ì ë€ì곌 ê°ìµëë€:
-* `@contextlib.contextmanager` ëë
-* `@contextlib.asynccontextmanager`
+* [`@contextlib.contextmanager`](https://docs.python.org/3/library/contextlib.html#contextlib.contextmanager) ëë
+* [`@contextlib.asynccontextmanager`](https://docs.python.org/3/library/contextlib.html#contextlib.asynccontextmanager)
ìŽë€ì ëšìŒ `yield`ê° ìë íšì륌 ꟞믞ë ë° ì¬ì©í©ëë€.
diff --git a/docs/ko/docs/tutorial/dependencies/global-dependencies.md b/docs/ko/docs/tutorial/dependencies/global-dependencies.md
index 8b000a3a43..6d4c43eb6c 100644
--- a/docs/ko/docs/tutorial/dependencies/global-dependencies.md
+++ b/docs/ko/docs/tutorial/dependencies/global-dependencies.md
@@ -2,14 +2,14 @@
ëªëª ì íì ì í늬ìŒìŽì
ììë ì í늬ìŒìŽì
ì 첎ì ì졎ì±ì ì¶ê°íê³ ì¶ì ì ììµëë€.
-[*ê²œë¡ ì²ëЬ ë°ìœë ìŽí°*ì `dependencies` ì¶ê°íêž°](dependencies-in-path-operation-decorators.md){.internal-link target=_blank}ì ì ì¬í ë°©ë²ìŒë¡ `FastAPI` ì í늬ìŒìŽì
ì ê·žê²ë€ì ì¶ê°í ì ììµëë€.
+[*ê²œë¡ ì²ëЬ ë°ìœë ìŽí°*ì `dependencies` ì¶ê°íêž°](dependencies-in-path-operation-decorators.md)ì ì ì¬í ë°©ë²ìŒë¡ `FastAPI` ì í늬ìŒìŽì
ì ê·žê²ë€ì ì¶ê°í ì ììµëë€.
ê·žë° ê²œì°ì, ì í늬ìŒìŽì
ì 몚ë *ê²œë¡ ì²ëЬ*ì ì ì©ë ê²ì
ëë€:
{* ../../docs_src/dependencies/tutorial012_an_py310.py hl[17] *}
-ê·žëŠ¬ê³ [*ê²œë¡ ì²ëЬ ë°ìœë ìŽí°*ì `dependencies` ì¶ê°íêž°](dependencies-in-path-operation-decorators.md){.internal-link target=_blank} ì¹ì
ì 몚ë ììŽëìŽë ì¬ì í ì ì©ëì§ë§, ìŽ ê²œì°ìë ì±ì 몚ë *ê²œë¡ ì²ëЬ*ì ì ì©ë©ëë€.
+ê·žëŠ¬ê³ [*ê²œë¡ ì²ëЬ ë°ìœë ìŽí°*ì `dependencies` ì¶ê°íêž°](dependencies-in-path-operation-decorators.md) ì¹ì
ì 몚ë ììŽëìŽë ì¬ì í ì ì©ëì§ë§, ìŽ ê²œì°ìë ì í늬ìŒìŽì
ì 몚ë *ê²œë¡ ì²ëЬ*ì ì ì©ë©ëë€.
## *ê²œë¡ ì²ëЬ* 귞룹ì ëí ìì¡Žì± { #dependencies-for-groups-of-path-operations }
-ëì€ì ì¬ë¬ íìŒì í¬íší ìë ìë ë í° ì í늬ìŒìŽì
ì 구조ííë ë²([ë í° ì í늬ìŒìŽì
- ì¬ë¬ íìŒë€](../../tutorial/bigger-applications.md){.internal-link target=_blank})ì ìœì ë, *ê²œë¡ ì²ëЬ* 귞룹ì ëí ëšìŒ `dependencies` ë§€ê°ë³ì륌 ì ìžíë ë²ì ë°°ì°ê² ë ê²ì
ëë€.
+ëì€ì ì¬ë¬ íìŒì í¬íší ìë ìë ë í° ì í늬ìŒìŽì
ì 구조ííë ë²([ë í° ì í늬ìŒìŽì
- ì¬ë¬ íìŒë€](../../tutorial/bigger-applications.md))ì ìœì ë, *ê²œë¡ ì²ëЬ* 귞룹ì ëí ëšìŒ `dependencies` ë§€ê°ë³ì륌 ì ìžíë ë²ì ë°°ì°ê² ë ê²ì
ëë€.
diff --git a/docs/ko/docs/tutorial/dependencies/index.md b/docs/ko/docs/tutorial/dependencies/index.md
index f7d8d5982c..4b540b779e 100644
--- a/docs/ko/docs/tutorial/dependencies/index.md
+++ b/docs/ko/docs/tutorial/dependencies/index.md
@@ -57,7 +57,7 @@ FastAPIë 0.95.0 ë²ì ë¶í° `Annotated`ì ëí ì§ìì (ê·žëŠ¬ê³ ìŽë¥Œ
ìë ë²ì ì ê°ì§ê³ ìë 겜ì°, `Annotated`륌 ì¬ì©íë € í멎 ìë¬ë¥Œ ë§ìŽíê² ë ê²ì
ëë€.
-`Annotated`륌 ì¬ì©íêž° ì ì ìµì 0.95.1ë¡ [FastAPI ë²ì ì
ê·žë ìŽë](../../deployment/versions.md#upgrading-the-fastapi-versions){.internal-link target=_blank}륌 íì€íê² íìžì.
+`Annotated`륌 ì¬ì©íêž° ì ì ìµì 0.95.1ë¡ [FastAPI ë²ì ì
ê·žë ìŽë](../../deployment/versions.md#upgrading-the-fastapi-versions)륌 íì€íê² íìžì.
///
@@ -152,7 +152,7 @@ commons: Annotated[dict, Depends(common_parameters)]
/// note | ì°žê³
-ì 몚륎ìê² ë€ë©Ž, [Async: *"In a hurry?"*](../../async.md#in-a-hurry){.internal-link target=_blank} 묞ììì `async`ì `await`ì ëíŽ íìží ì ììµëë€.
+ì 몚륎ìê² ë€ë©Ž, [Async: *"In a hurry?"*](../../async.md#in-a-hurry) 묞ììì `async`ì `await`ì ëíŽ íìží ì ììµëë€.
///
diff --git a/docs/ko/docs/tutorial/encoder.md b/docs/ko/docs/tutorial/encoder.md
index d820f6e44d..9ed7a13cd8 100644
--- a/docs/ko/docs/tutorial/encoder.md
+++ b/docs/ko/docs/tutorial/encoder.md
@@ -12,7 +12,7 @@ JSON íží ê°ë¥ ë°ìŽí°ë§ ìì íë `fake_db` ë°ìŽí°ë² ìŽì€ê° 졎
ì륌 ë€ë©Ž, `datetime` ê°ì²Žë JSON곌 ížíëì§ ììŒë¯ë¡ ìŽ ë°ìŽí°ë² ìŽì€ë ìŽë¥Œ ë°ì§ ììµëë€.
-ë°ëŒì `datetime` ê°ì²Žë ISO íìì ë°ìŽí°ë¥Œ í¬íšíë `str`ë¡ ë³íëìŽìŒ í©ëë€.
+ë°ëŒì `datetime` ê°ì²Žë [ISO íì](https://en.wikipedia.org/wiki/ISO_8601)ì ë°ìŽí°ë¥Œ í¬íšíë `str`ë¡ ë³íëìŽìŒ í©ëë€.
ê°ì ë°©ììŒë¡ ìŽ ë°ìŽí°ë² ìŽì€ë Pydantic 몚ëž(ìì±ìŽ ìë ê°ì²Ž)ì ë°ì§ ìê³ , `dict`ë§ì ë°ìµëë€.
@@ -24,7 +24,7 @@ Pydantic ëªšëž ê°ì ê°ì²Žë¥Œ ë°ê³ JSON íží ê°ë¥í ë²ì ì ë°í
ìŽ ììììë Pydantic 몚ëžì `dict`ë¡, `datetime`ì `str`ë¡ ë³íí©ëë€.
-ìŽë ê² ížì¶í 결곌ë íìŽì¬ íì€ìž `json.dumps()`ë¡ ìžìœë©í ì ììµëë€.
+ìŽë ê² ížì¶í 결곌ë íìŽì¬ íì€ìž [`json.dumps()`](https://docs.python.org/3/library/json.html#json.dumps)ë¡ ìžìœë©í ì ììµëë€.
JSON íì(묞ììŽ)ì ë°ìŽí°ê° ë€ìŽìë í° `str`ì ë°ííì§ ììµëë€. JSON곌 몚ë ížíëë ê°ê³Œ íì ê°ìŽ ìë íìŽì¬ íì€ ë°ìŽí° 구조(ì: `dict`)륌 ë°íí©ëë€.
diff --git a/docs/ko/docs/tutorial/extra-data-types.md b/docs/ko/docs/tutorial/extra-data-types.md
index 4a51e92861..da62a39927 100644
--- a/docs/ko/docs/tutorial/extra-data-types.md
+++ b/docs/ko/docs/tutorial/extra-data-types.md
@@ -36,7 +36,7 @@
* `datetime.timedelta`:
* íìŽì¬ì `datetime.timedelta`.
* ìì²ê³Œ ìëµìì ì 첎 ìŽ(seconds)ì `float`ë¡ ííë©ëë€.
- * Pydanticì "ISO 8601 time diff encoding"ìŒë¡ íííë ê² ëí íì©í©ëë€. ë ë§ì ì 볎ë 묞ì륌 íìžíìžì.
+ * Pydanticì "ISO 8601 time diff encoding"ìŒë¡ íííë ê² ëí íì©í©ëë€. [ë ë§ì ì 볎ë 묞ì륌 íìžíìžì](https://docs.pydantic.dev/latest/concepts/serialization/#custom-serializers).
* `frozenset`:
* ìì²ê³Œ ìëµìì `set`ì ëìŒíê² ì·šêžë©ëë€:
* ìì² ì, 늬ì€ížë¥Œ ìœìŽ ì€ë³µì ì ê±°íê³ `set`ë¡ ë³íí©ëë€.
@@ -49,7 +49,7 @@
* `Decimal`:
* íì€ íìŽì¬ì `Decimal`.
* ìì²ê³Œ ìëµìì `float`ì ëìŒíê² ë€ë€ì§ëë€.
-* ì¬êž°ìì 몚ë ì íší Pydantic ë°ìŽí° ìë£íì íìží ì ììµëë€: Pydantic ë°ìŽí° ìë£í.
+* ì¬êž°ìì 몚ë ì íší Pydantic ë°ìŽí° ìë£íì íìží ì ììµëë€: [Pydantic ë°ìŽí° ìë£í](https://docs.pydantic.dev/latest/usage/types/types/).
## ìì { #example }
diff --git a/docs/ko/docs/tutorial/extra-models.md b/docs/ko/docs/tutorial/extra-models.md
index 70d7f8bffc..157549f92f 100644
--- a/docs/ko/docs/tutorial/extra-models.md
+++ b/docs/ko/docs/tutorial/extra-models.md
@@ -12,7 +12,7 @@
ì ë ì¬ì©ìì ë¹ë°ë²ížë¥Œ í묞ìŒë¡ ì ì¥íì§ ë§ìžì. íì ìŽíì ê²ìŠ ê°ë¥í "ìì í íŽì(secure hash)"ë¡ ì ì¥íìžì.
-ë§ìœ ìŽê² 묎ììžì§ ëªšë¥Žê² ë€ë©Ž, [볎ì ì¥](security/simple-oauth2.md#password-hashing){.internal-link target=_blank}ìì "password hash"ê° ë¬Žììžì§ ë°°ìž ì ììµëë€.
+ë§ìœ ìŽê² 묎ììžì§ ëªšë¥Žê² ë€ë©Ž, [볎ì ì¥](security/simple-oauth2.md#password-hashing)ìì "password hash"ê° ë¬Žììžì§ ë°°ìž ì ììµëë€.
///
@@ -162,11 +162,11 @@ UserInDB(
OpenAPIììë ìŽë¥Œ `anyOf`ë¡ ì ìí©ëë€.
-ìŽë¥Œ ìíŽ íì€ Python íì
íížìž `typing.Union`ì ì¬ì©í ì ììµëë€:
+ìŽë¥Œ ìíŽ íì€ Python íì
íížìž [`typing.Union`](https://docs.python.org/3/library/typing.html#typing.Union)ì ì¬ì©í ì ììµëë€:
/// note
-`Union`ì ì ìí ëë ë 구첎ì ìž íì
ì 뚌ì í¬íšíê³ , ë 구첎ì ìž íì
ì ê·ž ë€ì ëìŽíŽìŒ í©ëë€. ìë ìì ììë `Union[PlaneItem, CarItem]`ìì ë 구첎ì ìž `PlaneItem`ìŽ `CarItem`ë³Žë€ ìì ìì¹í©ëë€.
+[`Union`](https://docs.pydantic.dev/latest/concepts/types/#unions)ì ì ìí ëë ë 구첎ì ìž íì
ì 뚌ì í¬íšíê³ , ë 구첎ì ìž íì
ì ê·ž ë€ì ëìŽíŽìŒ í©ëë€. ìë ìì ììë `Union[PlaneItem, CarItem]`ìì ë 구첎ì ìž `PlaneItem`ìŽ `CarItem`ë³Žë€ ìì ìì¹í©ëë€.
///
diff --git a/docs/ko/docs/tutorial/first-steps.md b/docs/ko/docs/tutorial/first-steps.md
index e3d372ba42..cc3d6c6182 100644
--- a/docs/ko/docs/tutorial/first-steps.md
+++ b/docs/ko/docs/tutorial/first-steps.md
@@ -11,7 +11,7 @@
```console
-$
fastapi dev
main.py
+$
fastapi dev
FastAPI Starting development server ð
@@ -58,7 +58,7 @@ INFO: Uvicorn running on http://127.0.0.1:8000 (Press CTRL+C to quit)
### íìžíêž° { #check-it }
-ëžëŒì°ì ë¡
http://127.0.0.1:8000륌 ì¬ìžì.
+ëžëŒì°ì ë¡ [http://127.0.0.1:8000](http://127.0.0.1:8000)륌 ì¬ìžì.
ìëì ê°ì JSON ìëµì 볌 ì ììµëë€:
@@ -68,17 +68,17 @@ INFO: Uvicorn running on http://127.0.0.1:8000 (Press CTRL+C to quit)
### ëíí API 묞ì { #interactive-api-docs }
-ìŽì
http://127.0.0.1:8000/docsë¡ ê°ëŽ
ëë€.
+ìŽì [http://127.0.0.1:8000/docs](http://127.0.0.1:8000/docs)ë¡ ê°ëŽ
ëë€.
-ìë ëíí API 묞ì륌 볌 ì ììµëë€ (
Swagger UI ì ê³µ):
+ìë ëíí API 묞ì륌 볌 ì ììµëë€ ([Swagger UI](https://github.com/swagger-api/swagger-ui) ì ê³µ):

### ëì API 묞ì { #alternative-api-docs }
-ê·žëŠ¬ê³ ìŽì ,
http://127.0.0.1:8000/redocë¡ ê°ëŽ
ëë€.
+ê·žëŠ¬ê³ ìŽì , [http://127.0.0.1:8000/redoc](http://127.0.0.1:8000/redoc)ë¡ ê°ëŽ
ëë€.
-ëì ìë 묞ì륌 볌 ì ììµëë€ (
ReDoc ì ê³µ):
+ëì ìë 묞ì륌 볌 ì ììµëë€ ([ReDoc](https://github.com/Rebilly/ReDoc) ì ê³µ):

@@ -92,7 +92,7 @@ INFO: Uvicorn running on http://127.0.0.1:8000 (Press CTRL+C to quit)
#### API "ì€í€ë§" { #api-schema }
-
OpenAPIë APIì ì€í€ë§ë¥Œ ìŽë»ê² ì ìíëì§ ì§ìíë ê·ê²©ì
ëë€.
+ìŽ ê²œì°, [OpenAPI](https://github.com/OAI/OpenAPI-Specification)ë ì¬ë¬ë¶ì API ì€í€ë§ë¥Œ ìŽë»ê² ì ìíëì§ ì§ìíë ê·ê²©ì
ëë€.
ìŽ ì€í€ë§ ì ìë API 겜ë¡, ê°ë¥í ë§€ê°ë³ì ë±ì í¬íší©ëë€.
@@ -110,7 +110,7 @@ OpenAPIë ì¬ë¬ë¶ì APIì ëí API ì€í€ë§ë¥Œ ì ìí©ëë€. ëí
ê°ê³µëì§ ìì OpenAPI ì€í€ë§ê° ìŽë»ê² ì게ëì§ ê¶êžíë€ë©Ž, FastAPIë ìëìŒë¡ ì¬ë¬ë¶ì 몚ë APIì ëí ì€ëª
곌 íšê» JSON (ì€í€ë§)륌 ìì±í©ëë€.
-ì¬êž°ìì ì§ì 볌 ì ììµëë€:
http://127.0.0.1:8000/openapi.json.
+ì¬êž°ìì ì§ì 볌 ì ììµëë€: [http://127.0.0.1:8000/openapi.json](http://127.0.0.1:8000/openapi.json).
ë€ì곌 ê°ìŽ ììíë JSONì íìží ì ììµëë€:
@@ -143,9 +143,58 @@ OpenAPI ì€í€ë§ë í¬íšë ë ê°ì ëíí 묞ì ìì€í
ì ì ê³µ
APIì íµì íë íŽëŒìŽìžíž(íë¡ ížìë, 몚ë°ìŒ, IoT ì í늬ìŒìŽì
ë±)륌 ìíŽ ìœë륌 ìëìŒë¡ ìì±íë ë°ë ì¬ì©í ì ììµëë€.
+### `pyproject.toml`ì ì± `entrypoint` 구ì±íêž° { #configure-the-app-entrypoint-in-pyproject-toml }
+
+ë€ì곌 ê°ìŽ `pyproject.toml` íìŒìì ì±ìŽ ìì¹í ê³³ì 구ì±í ì ììµëë€:
+
+```toml
+[tool.fastapi]
+entrypoint = "main:app"
+```
+
+íŽë¹ `entrypoint`ë `fastapi` ëª
ë ¹ìŽì ë€ì곌 ê°ìŽ ì±ì ìí¬ížíëŒê³ ìë €ì€ëë€:
+
+```python
+from main import app
+```
+
+ìœë êµ¬ì¡°ê° ë€ì곌 ê°ë€ë©Ž:
+
+```
+.
+âââ backend
+â  âââ main.py
+â  âââ __init__.py
+```
+
+ê·žëŒ `entrypoint`륌 ë€ì곌 ê°ìŽ ì€ì í©ëë€:
+
+```toml
+[tool.fastapi]
+entrypoint = "backend.main:app"
+```
+
+ìŽë ë€ì곌 ëìŒí©ëë€:
+
+```python
+from backend.main import app
+```
+
+### `fastapi dev`ì ê²œë¡ ì§ì íêž° { #fastapi-dev-with-path }
+
+`fastapi dev` ëª
ë ¹ìŽì íìŒ ê²œë¡ë¥Œ ì ë¬í ìë ììŒë©°, ê·žë¬ë©Ž ì¬ì©í FastAPI app ê°ì²Žë¥Œ ì¶ì í©ëë€:
+
+```console
+$ fastapi dev main.py
+```
+
+íì§ë§ ë§€ë² `fastapi` ëª
ë ¹ìŽë¥Œ ížì¶í ëë§ë€ ì¬ë°ë¥ž 겜ë¡ë¥Œ ì ë¬íŽìŒ í©ëë€.
+
+ëí ë€ë¥ž ë구ë€, ì륌 ë€ìŽ [VS Code íì¥](../editor-support.md)ìŽë [FastAPI Cloud](https://fastapicloud.com)ê° ìŽë¥Œ ì°Ÿì§ ëª»í ì ììŒë¯ë¡, `pyproject.toml`ì `entrypoint`륌 ì¬ì©íë ê²ì ê¶ì¥í©ëë€.
+
### ì± ë°°í¬íêž°(ì í ì¬í) { #deploy-your-app-optional }
-ì íì ìŒë¡ FastAPI ì±ì
FastAPI Cloudì ë°°í¬í ì ììµëë€. ìì§ ëêž°ì ëª
ëšì ë±ë¡íì§ ììë€ë©Ž, ë±ë¡íë¬ ê°ìžì. ð
+ì íì ìŒë¡ FastAPI ì±ì [FastAPI Cloud](https://fastapicloud.com)ì ë°°í¬í ì ììµëë€. ìì§ ëêž°ì ëª
ëšì ë±ë¡íì§ ììë€ë©Ž, ë±ë¡íë¬ ê°ìžì. ð
ìŽë¯ž **FastAPI Cloud** ê³ì ìŽ ìë€ë©Ž(ëêž°ì ëª
ëšìì ìŽëíŽ ëë žìµëë€ ð), í ë²ì ëª
ë ¹ìŒë¡ ì í늬ìŒìŽì
ì ë°°í¬í ì ììµëë€.
@@ -191,7 +240,7 @@ Deploying to FastAPI Cloud...
`FastAPI`ë `Starlette`륌 ì§ì ììíë íŽëì€ì
ëë€.
-`FastAPI`ë¡
Starletteì 몚ë êž°ë¥ì ì¬ì©í ì ììµëë€.
+`FastAPI`ë¡ [Starlette](https://www.starlette.dev/)ì 몚ë êž°ë¥ì ì¬ì©í ì ììµëë€.
///
@@ -336,7 +385,7 @@ URL "`/`"ì ëí `GET` ìëì ì¬ì©íë ìì²ì ë°ì ëë§ë€ **Fa
/// note | ì°žê³
-ì°šìŽì ì ëªšë¥Žê² ë€ë©Ž [Async: *"ë°ìì 겜ì°"*](../async.md#in-a-hurry){.internal-link target=_blank}륌 íìžíìžì.
+ì°šìŽì ì ëªšë¥Žê² ë€ë©Ž [Async: *"ë°ìì 겜ì°"*](../async.md#in-a-hurry)륌 íìžíìžì.
///
@@ -352,11 +401,11 @@ JSONìŒë¡ ìë ë³íëë ê°ì²Žë€ê³Œ 몚ëžë€(ORM ë±ì í¬íšíŽì)
### 6 ëšê³: ë°°í¬íêž° { #step-6-deploy-it }
-í ë²ì ëª
ë ¹ìŒë¡ **
FastAPI Cloud**ì ì±ì ë°°í¬í©ëë€: `fastapi deploy`. ð
+í ë²ì ëª
ë ¹ìŒë¡ **[FastAPI Cloud](https://fastapicloud.com)**ì ì±ì ë°°í¬í©ëë€: `fastapi deploy`. ð
#### FastAPI Cloud ìê° { #about-fastapi-cloud }
-**
FastAPI Cloud**ë **FastAPI** ë€ì ìë ëìŒí ìì±ìì íìŽ ë§ë€ììµëë€.
+**[FastAPI Cloud](https://fastapicloud.com)**ë **FastAPI** ë€ì ìë ëìŒí ìì±ìì íìŽ ë§ë€ììµëë€.
ìµìíì ë
žë ¥ìŒë¡ API륌 **ë¹ë**, **ë°°í¬**, **ì ê·Œ**íë 곌ì ì ê°ìíí©ëë€.
diff --git a/docs/ko/docs/tutorial/handling-errors.md b/docs/ko/docs/tutorial/handling-errors.md
index 115c322363..efee108ef1 100644
--- a/docs/ko/docs/tutorial/handling-errors.md
+++ b/docs/ko/docs/tutorial/handling-errors.md
@@ -81,7 +81,7 @@ HTTP ì€ë¥ì 컀ì€í
í€ë륌 ì¶ê°í ì ììŒë©Ž ì ì©í ìí©ìŽ
## 컀ì€í
ììž ížë€ë¬ ì€ì¹íêž° { #install-custom-exception-handlers }
-
Starletteì ëìŒí ììž ì ížëЬí°ë¥Œ ì¬ì©íŽ ì»€ì€í
ììž ížë€ë¬ë¥Œ ì¶ê°í ì ììµëë€.
+[Starletteì ëìŒí ììž ì ížëЬí°](https://www.starlette.dev/exceptions/)륌 ì¬ì©íŽ ì»€ì€í
ììž ížë€ë¬ë¥Œ ì¶ê°í ì ììµëë€.
ì¬ë¬ë¶(ëë ì¬ì©íë ëŒìŽëžë¬ëЬ)ìŽ `raise`í ì ìë 컀ì€í
ììž `UnicornException`ìŽ ìë€ê³ ê°ì íŽ ëŽ
ìë€.
diff --git a/docs/ko/docs/tutorial/index.md b/docs/ko/docs/tutorial/index.md
index c44aac2d4d..7f8c374725 100644
--- a/docs/ko/docs/tutorial/index.md
+++ b/docs/ko/docs/tutorial/index.md
@@ -15,7 +15,7 @@
```console
-$
fastapi dev
main.py
+$
fastapi dev
FastAPI Starting development server ð
@@ -62,7 +62,7 @@ $
fastapi dev
@@ -76,7 +76,7 @@ $ pip install "fastapi[standard]"
/// note | ì°žê³
-`pip install "fastapi[standard]"`ë¡ ì€ì¹í멎 `fastapi-cloud-cli`륌 í¬íší ëª ê°ì§ Ʞ볞 ì íì standard ì졎ì±ìŽ íšê» ì€ì¹ëë©°, ìŽë¥Œ ì¬ì©íŽ FastAPI Cloudì ë°°í¬í ì ììµëë€.
+`pip install "fastapi[standard]"`ë¡ ì€ì¹í멎 `fastapi-cloud-cli`륌 í¬íší ëª ê°ì§ Ʞ볞 ì íì standard ì졎ì±ìŽ íšê» ì€ì¹ëë©°, ìŽë¥Œ ì¬ì©íŽ [FastAPI Cloud](https://fastapicloud.com)ì ë°°í¬í ì ììµëë€.
ìŽë¬í ì íì ì졎ì±ìŽ íì ìë€ë©Ž `pip install fastapi`ë¡ ëì ì€ì¹í ì ììµëë€.
@@ -84,6 +84,12 @@ standard ì졎ì±ì ì€ì¹íë `fastapi-cloud-cli` ììŽ ì€ì¹íë €ë©Ž `p
///
+/// tip | í
+
+FastAPIë VS Code(ë° Cursor)ì© [ê³µì íì¥ íë¡ê·žëš](https://marketplace.visualstudio.com/items?itemName=FastAPILabs.fastapi-vscode)ìŽ ììµëë€. ê²œë¡ ì²ëЬ íìêž°, ê²œë¡ ì²ëЬ ê²ì, í
ì€ížììì CodeLens íì(í
ì€ížìì ì ìë¡ ë°ë¡ ìŽë), FastAPI Cloud ë°°í¬ì ë¡ê·ž ë± ë§ì êž°ë¥ì ìëí°ìì ë°ë¡ ì ê³µí©ëë€.
+
+///
+
## ê³ êž ì¬ì©ì ìëŽì { #advanced-user-guide }
ìŽ **ììµì - ì¬ì©ì ìëŽì**륌 ìœì ë€ì ëì€ì ìœì ì ìë **ê³ êž ì¬ì©ì ìëŽì**ë ììµëë€.
diff --git a/docs/ko/docs/tutorial/metadata.md b/docs/ko/docs/tutorial/metadata.md
index 2107ea90a7..9220dc2b47 100644
--- a/docs/ko/docs/tutorial/metadata.md
+++ b/docs/ko/docs/tutorial/metadata.md
@@ -14,7 +14,7 @@ OpenAPI ëª
ìž ë° ìëíë API 묞ì UIì ì¬ì©ëë ë€ì íë륌
| `version` | `string` | APIì ë²ì ì
ëë€. OpenAPIì ë²ì ìŽ ìë, ì¬ë¬ë¶ì ì í늬ìŒìŽì
ì ë²ì ì ëíë
ëë€. ì: `2.5.0`. |
| `terms_of_service` | `str` | API ìŽì© ìœêŽì URLì
ëë€. ì ê³µíë ê²œì° URL íììŽìŽìŒ í©ëë€. |
| `contact` | `dict` | ë
žì¶ë APIì ëí ì°ëœì² ì 볎ì
ëë€. ì¬ë¬ íë륌 í¬íší ì ììµëë€. contact íë
| ë§€ê°ë³ì | íì
| ì€ëª
|
|---|
name | str | ì°ëœì² ìžë¬Œ/ì¡°ì§ì ìë³ëª
ì
ëë€. |
url | str | ì°ëœì² ì ë³Žê° ëŽêžŽ URLì
ëë€. URL íììŽìŽìŒ í©ëë€. |
email | str | ì°ëœì² ìžë¬Œ/ì¡°ì§ì ìŽë©ìŒ 죌ìì
ëë€. ìŽë©ìŒ 죌ì íììŽìŽìŒ í©ëë€. |
|
-| `license_info` | `dict` | ë
žì¶ë APIì ëŒìŽì ì€ ì 볎ì
ëë€. ì¬ë¬ íë륌 í¬íší ì ììµëë€. license_info íë
| ë§€ê°ë³ì | íì
| ì€ëª
|
|---|
name | str | íì (license_infoê° ì€ì ë 겜ì°). APIì ì¬ì©ë ëŒìŽì ì€ ìŽëŠì
ëë€. |
identifier | str | APIì ëí SPDX ëŒìŽì ì€ ííì
ëë€. identifier íëë url íëì ìíž ë°°íì ì
ëë€. OpenAPI 3.1.0, FastAPI 0.99.0ë¶í° ì¬ì© ê°ë¥. |
url | str | APIì ì¬ì©ë ëŒìŽì ì€ì URLì
ëë€. URL íììŽìŽìŒ í©ëë€. |
|
+| `license_info` | `dict` | ë
žì¶ë APIì ëŒìŽì ì€ ì 볎ì
ëë€. ì¬ë¬ íë륌 í¬íší ì ììµëë€. license_info íë
| ë§€ê°ë³ì | íì
| ì€ëª
|
|---|
name | str | íì (license_infoê° ì€ì ë 겜ì°). APIì ì¬ì©ë ëŒìŽì ì€ ìŽëŠì
ëë€. |
identifier | str | APIì ëí [SPDX](https://spdx.org/licenses/) ëŒìŽì ì€ ííì
ëë€. identifier íëë url íëì ìíž ë°°íì ì
ëë€. OpenAPI 3.1.0, FastAPI 0.99.0ë¶í° ì¬ì© ê°ë¥. |
url | str | APIì ì¬ì©ë ëŒìŽì ì€ì URLì
ëë€. URL íììŽìŽìŒ í©ëë€. |
|
ë€ì곌 ê°ìŽ ì€ì í ì ììµëë€:
@@ -40,7 +40,7 @@ OpenAPI 3.1.0 ë° FastAPI 0.99.0ë¶í° `license_info`ì `url` ëì `identifie
## íê·žì ëí ë©íë°ìŽí° { #metadata-for-tags }
-`openapi_tags` ë§€ê°ë³ì륌 ì¬ì©íì¬ ê²œë¡ ì²ëЬì 귞룹ííë ë° ì¬ì©ëë ì¬ë¬ íê·žì ì¶ê° ë©íë°ìŽí°ë¥Œ ì¶ê°í ìë ììµëë€.
+`openapi_tags` ë§€ê°ë³ì륌 ì¬ì©íì¬ ê²œë¡ ì²ëŠ¬ë¥Œ 귞룹ííë ë° ì¬ì©ëë ì¬ë¬ íê·žì ì¶ê° ë©íë°ìŽí°ë¥Œ ì¶ê°í ìë ììµëë€.
늬ì€ížë ê° íê·žì ëíŽ íëì ëì
ë늬륌 í¬íší©ëë€.
@@ -76,7 +76,7 @@ OpenAPI 3.1.0 ë° FastAPI 0.99.0ë¶í° `license_info`ì `url` ëì `identifie
/// info | ì 볎
-íê·žì ëí ììží ëŽì©ì [ê²œë¡ ì²ëЬ 구ì±](path-operation-configuration.md#tags){.internal-link target=_blank}ìì ìœìŽë³Žìžì.
+íê·žì ëí ììží ëŽì©ì [ê²œë¡ ì²ëЬ 구ì±](path-operation-configuration.md#tags)ìì ìœìŽë³Žìžì.
///
diff --git a/docs/ko/docs/tutorial/middleware.md b/docs/ko/docs/tutorial/middleware.md
index 6c4f33fd98..b459f6434e 100644
--- a/docs/ko/docs/tutorial/middleware.md
+++ b/docs/ko/docs/tutorial/middleware.md
@@ -1,10 +1,10 @@
# 믞ë€ìšìŽ { #middleware }
-믞ë€ìšìŽë¥Œ **FastAPI** ìì© íë¡ê·žëšì ì¶ê°í ì ììµëë€.
+믞ë€ìšìŽë¥Œ **FastAPI** ì í늬ìŒìŽì
ì ì¶ê°í ì ììµëë€.
"믞ë€ìšìŽ"ë í¹ì *ê²œë¡ ì²ëЬ*ì ìíŽ ì²ëЬëêž° ì , 몚ë **ìì²**ì ëíŽì ëìíë íšìì
ëë€. ëí 몚ë **ìëµ**ìŽ ë°íëêž° ì ìë ëìŒíê² ëìí©ëë€.
-* 믞ë€ìšìŽë ìì© íë¡ê·žëšìŒë¡ ì€ë ê° **ìì²**ì ê°ì žìµëë€.
+* 믞ë€ìšìŽë ì í늬ìŒìŽì
ìŒë¡ ì€ë ê° **ìì²**ì ê°ì žìµëë€.
* ê·žë° ë€ì íŽë¹ **ìì²**ì ëíŽ ë¬Žìžê°ë¥Œ íê±°ë íìí ìœë륌 ì€íí ì ììµëë€.
* ê·žë° ë€ì **ìì²**ì ëëšžì§ ì í늬ìŒìŽì
(ìŽë€ *ê²œë¡ ì²ëЬ*ê°)ì íµíŽ ì²ëЬëëë¡ ì ë¬í©ëë€.
* ê·žë° ë€ì ì í늬ìŒìŽì
(ìŽë€ *ê²œë¡ ì²ëЬ*ê°)ìŽ ìì±í **ìëµ**ì ê°ì žìµëë€.
@@ -15,7 +15,7 @@
`yield`륌 ì¬ì©íë ì졎ì±ìŽ ìë€ë©Ž, exit ìœëë 믞ë€ìšìŽ *íì* ì€íë©ëë€.
-백귞ëŒìŽë ìì
(ë€ìì ë³Žê² ë [백귞ëŒìŽë ìì
](background-tasks.md){.internal-link target=_blank} ì¹ì
ìì ë€ë£¹ëë€)ìŽ ìë€ë©Ž, 몚ë 믞ë€ìšìŽ *íì* ì€íë©ëë€.
+백귞ëŒìŽë ìì
(ë€ìì ë³Žê² ë [백귞ëŒìŽë ìì
](background-tasks.md) ì¹ì
ìì ë€ë£¹ëë€)ìŽ ìë€ë©Ž, 몚ë 믞ë€ìšìŽ *íì* ì€íë©ëë€.
///
@@ -35,9 +35,9 @@
/// tip | í
-ì¬ì©ì ì ì ë
ì í€ëë `X-` ì ëì¬ë¥Œ ì¬ì©íì¬ ì¶ê°í ì ìë€ë ì ì êž°ìµíìžì.
+ì¬ì©ì ì ì ë
ì í€ëë [`X-` ì ëì¬ë¥Œ ì¬ì©](https://developer.mozilla.org/en-US/docs/Web/HTTP/Headers)íì¬ ì¶ê°í ì ìë€ë ì ì êž°ìµíìžì.
-íì§ë§ ëžëŒì°ì ìì íŽëŒìŽìžížê° 볌 ì ìê² íë €ë ì¬ì©ì ì ì í€ëê° ìë€ë©Ž, Starletteì CORS 묞ìì 묞ìíë `expose_headers` ë§€ê°ë³ì륌 ì¬ì©íŽ CORS ì€ì ([CORS (Cross-Origin Resource Sharing)](cors.md){.internal-link target=_blank})ì ì¶ê°íŽìŒ í©ëë€.
+íì§ë§ ëžëŒì°ì ìì íŽëŒìŽìžížê° 볌 ì ìê² íë €ë ì¬ì©ì ì ì í€ëê° ìë€ë©Ž, [CORS (Cross-Origin Resource Sharing)](cors.md) ì€ì ì [Starletteì CORS 묞ì](https://www.starlette.dev/middleware/#corsmiddleware)ì 묞ìíë `expose_headers` ë§€ê°ë³ì륌 ì¬ì©íŽ ì¶ê°íŽìŒ í©ëë€.
///
@@ -61,7 +61,7 @@
/// tip | í
-ì¬êž°ìë ìŽë¬í ì¬ì© ì¬ë¡ìì ë ì íí ì ìêž° ë묞ì `time.time()` ëì `time.perf_counter()`륌 ì¬ì©í©ëë€. ð€
+ì¬êž°ìë ìŽë¬í ì¬ì© ì¬ë¡ìì ë ì íí ì ìêž° ë묞ì `time.time()` ëì [`time.perf_counter()`](https://docs.python.org/3/library/time.html#time.perf_counter)륌 ì¬ì©í©ëë€. ð€
///
@@ -90,6 +90,6 @@ app.add_middleware(MiddlewareB)
## ë€ë¥ž 믞ë€ìšìŽ { #other-middlewares }
-ë€ë¥ž 믞ë€ìšìŽì ëí ë ë§ì ì 볎ë ëì€ì [ìë šë ì¬ì©ì ìëŽì: í¥ìë 믞ë€ìšìŽ](../advanced/middleware.md){.internal-link target=_blank}ìì íìží ì ììµëë€.
+ë€ë¥ž 믞ë€ìšìŽì ëí ë ë§ì ì 볎ë ëì€ì [ìë šë ì¬ì©ì ìëŽì: í¥ìë 믞ë€ìšìŽ](../advanced/middleware.md)ìì íìží ì ììµëë€.
ë€ì ì¹ì
ìì 믞ë€ìšìŽë¡ CORS륌 ì²ëЬíë ë°©ë²ì ë³Žê² ë ê²ì
ëë€.
diff --git a/docs/ko/docs/tutorial/path-operation-configuration.md b/docs/ko/docs/tutorial/path-operation-configuration.md
index 0d6a0d4229..ebdf6f918f 100644
--- a/docs/ko/docs/tutorial/path-operation-configuration.md
+++ b/docs/ko/docs/tutorial/path-operation-configuration.md
@@ -58,7 +58,7 @@
ì€ëª
ì ë³Žíµ êžžìŽì§ê³ ì¬ë¬ ì€ì 걞ì³ìêž° ë묞ì, *ê²œë¡ ì²ëЬ* ì€ëª
ì íšì ë
ì€ížë§ì ì ìží ì ììŒë©°, **FastAPI**ë ê·žê³³ìì ìŽë¥Œ ìœìµëë€.
-ë
ì€ížë§ìë Markdownì ìì±í ì ììŒë©°, (ë
ì€ížë§ì ë€ì¬ì°êž°ë¥Œ ê³ ë €íì¬) ì¬ë°ë¥Žê² íŽìëê³ íìë©ëë€.
+ë
ì€ížë§ìë [Markdown](https://en.wikipedia.org/wiki/Markdown)ì ìì±í ì ììŒë©°, (ë
ì€ížë§ì ë€ì¬ì°êž°ë¥Œ ê³ ë €íì¬) ì¬ë°ë¥Žê² íŽìëê³ íìë©ëë€.
{* ../../docs_src/path_operation_configuration/tutorial004_py310.py hl[17:25] *}
diff --git a/docs/ko/docs/tutorial/path-params-numeric-validations.md b/docs/ko/docs/tutorial/path-params-numeric-validations.md
index 51f9fe2c14..2ff56c46e7 100644
--- a/docs/ko/docs/tutorial/path-params-numeric-validations.md
+++ b/docs/ko/docs/tutorial/path-params-numeric-validations.md
@@ -14,7 +14,7 @@ FastAPIë 0.95.0 ë²ì ìì `Annotated` ì§ìì ì¶ê°íê³ (ê·žëŠ¬ê³ ìŽ
ë ì€ëë ë²ì ìŽ ìë€ë©Ž `Annotated`륌 ì¬ì©íë €ê³ í ë ì€ë¥ê° ë°ìí©ëë€.
-`Annotated`륌 ì¬ì©íêž° ì ì ìµì 0.95.1ê¹ì§ [FastAPI ë²ì ì
ê·žë ìŽë](../deployment/versions.md#upgrading-the-fastapi-versions){.internal-link target=_blank}륌 êŒ íìžì.
+`Annotated`륌 ì¬ì©íêž° ì ì ìµì 0.95.1ê¹ì§ [FastAPI ë²ì ì
ê·žë ìŽë](../deployment/versions.md#upgrading-the-fastapi-versions)륌 êŒ íìžì.
///
@@ -81,7 +81,7 @@ FastAPIë 0.95.0 ë²ì ìì `Annotated` ì§ìì ì¶ê°íê³ (ê·žëŠ¬ê³ ìŽ
íšìì 첫 ë²ì§ž ë§€ê°ë³ìë¡ `*`륌 ì ë¬íìžì.
-íìŽì¬ì `*`ìŒë¡ ì묎ê²ë íì§ ìì§ë§, ë€ë°ë¥Žë 몚ë ë§€ê°ë³ìë í€ìë ìžì(í€-ê° ì)ë¡ ížì¶ëìŽìŒ íšì ìê² ë©ëë€. ìŽë kwargsë¡ë ìë €ì ž ììµëë€. Ʞ볞ê°ìŽ ìëëŒë ë§ì°¬ê°ì§ì
ëë€.
+íìŽì¬ì `*`ìŒë¡ ì묎ê²ë íì§ ìì§ë§, ë€ë°ë¥Žë 몚ë ë§€ê°ë³ìë í€ìë ìžì(í€-ê° ì)ë¡ ížì¶ëìŽìŒ íšì ìê² ë©ëë€. ìŽë kwargsë¡ë ìë €ì ž ììµëë€. Ʞ볞ê°ìŽ ìëëŒë ë§ì°¬ê°ì§ì
ëë€.
{* ../../docs_src/path_params_numeric_validations/tutorial003_py310.py hl[7] *}
@@ -112,17 +112,17 @@ FastAPIë 0.95.0 ë²ì ìì `Annotated` ì§ìì ì¶ê°íê³ (ê·žëŠ¬ê³ ìŽ
ì«ì ê²ìŠì `float` ê°ìë ëìí©ëë€.
-ì¬êž°ìì gt륌, geë¿ë§ ìëëŒ ì ìží ì ìë€ë ì ìŽ ì€ìíŽì§ëë€. ì륌 ë€ìŽ ê°ìŽ `1`ë³Žë€ ìëëŒë, ë°ëì `0`ë³Žë€ ì»€ìŒ íë€ê³ ì구í ì ììµëë€.
+ì¬êž°ìì gt륌, geë¿ë§ ìëëŒ ì ìží ì ìë€ë ì ìŽ ì€ìíŽì§ëë€. ì륌 ë€ìŽ ê°ìŽ `1`ë³Žë€ ìëëŒë, ë°ëì `0`ë³Žë€ ì»€ìŒ íë€ê³ ì구í ì ììµëë€.
ìŠ, `0.5`ë ì íší ê°ì
ëë€. ê·žë¬ë `0.0` ëë `0`ì ê·žë ì§ ììµëë€.
-lt ìì ë§ì°¬ê°ì§ì
ëë€.
+lt ìì ë§ì°¬ê°ì§ì
ëë€.
{* ../../docs_src/path_params_numeric_validations/tutorial006_an_py310.py hl[13] *}
## ììœ { #recap }
-`Query`, `Path`(ìì§ ë³Žì§ ëª»í ë€ë¥ž ê²ë€ë)륌 ì¬ì©í멎 [쿌늬 ë§€ê°ë³ìì 묞ììŽ ê²ìŠ](query-params-str-validations.md){.internal-link target=_blank}ììì ë§ì°¬ê°ì§ë¡ ë©íë°ìŽí°ì 묞ììŽ ê²ìŠì ì ìží ì ììµëë€.
+`Query`, `Path`(ìì§ ë³Žì§ ëª»í ë€ë¥ž ê²ë€ë)륌 ì¬ì©í멎 [쿌늬 ë§€ê°ë³ìì 묞ììŽ ê²ìŠ](query-params-str-validations.md)ììì ë§ì°¬ê°ì§ë¡ ë©íë°ìŽí°ì 묞ììŽ ê²ìŠì ì ìží ì ììµëë€.
ê·žëŠ¬ê³ ì«ì ê²ìŠ ëí ì ìží ì ììµëë€:
diff --git a/docs/ko/docs/tutorial/path-params.md b/docs/ko/docs/tutorial/path-params.md
index c6e973709a..c6ea6b7c16 100644
--- a/docs/ko/docs/tutorial/path-params.md
+++ b/docs/ko/docs/tutorial/path-params.md
@@ -6,7 +6,7 @@
ê²œë¡ ë§€ê°ë³ì `item_id`ì ê°ì íšìì `item_id` ìžìë¡ ì ë¬ë©ëë€.
-ê·žëì ìŽ ìì 륌 ì€ííê³ http://127.0.0.1:8000/items/fooë¡ ìŽëí멎, ë€ì ìëµì 볌 ì ììµëë€:
+ê·žëì ìŽ ìì 륌 ì€ííê³ [http://127.0.0.1:8000/items/foo](http://127.0.0.1:8000/items/foo)ë¡ ìŽëí멎, ë€ì ìëµì 볌 ì ììµëë€:
```JSON
{"item_id":"foo"}
@@ -28,7 +28,7 @@
## ë°ìŽí° ë³í { #data-conversion }
-ìŽ ìì 륌 ì€ííê³ http://127.0.0.1:8000/items/3ì ìŽë©Ž, ë€ì ìëµì 볌 ì ììµëë€:
+ìŽ ìì 륌 ì€ííê³ [http://127.0.0.1:8000/items/3](http://127.0.0.1:8000/items/3)ì ìŽë©Ž, ë€ì ìëµì 볌 ì ììµëë€:
```JSON
{"item_id":3}
@@ -44,7 +44,7 @@
## ë°ìŽí° ê²ìŠ { #data-validation }
-íì§ë§ ëžëŒì°ì ìì http://127.0.0.1:8000/items/fooë¡ ìŽëí멎, ë€ì곌 ê°ì HTTP ì€ë¥ë¥Œ 볌 ì ììµëë€:
+íì§ë§ ëžëŒì°ì ìì [http://127.0.0.1:8000/items/foo](http://127.0.0.1:8000/items/foo)ë¡ ìŽëí멎, ë€ì곌 ê°ì HTTP ì€ë¥ë¥Œ 볌 ì ììµëë€:
```JSON
{
@@ -64,7 +64,7 @@
ê²œë¡ ë§€ê°ë³ì `item_id`ê° `int`ê° ìë `"foo"` ê°ì ê°ì¡êž° ë묞ì
ëë€.
-`int` ëì `float`ì ì ê³µí멎(ì: http://127.0.0.1:8000/items/4.2) ëìŒí ì€ë¥ê° ëíë©ëë€.
+`int` ëì `float`ì ì ê³µí멎(ì: [http://127.0.0.1:8000/items/4.2](http://127.0.0.1:8000/items/4.2)) ëìŒí ì€ë¥ê° ëíë©ëë€.
/// check | íìž
@@ -78,7 +78,7 @@
## 묞ìí { #documentation }
-ê·žëŠ¬ê³ ëžëŒì°ì ìì http://127.0.0.1:8000/docs륌 ìŽë©Ž, ë€ì곌 ê°ìŽ ìë ëíì API 묞ì륌 볌 ì ììµëë€:
+ê·žëŠ¬ê³ ëžëŒì°ì ìì [http://127.0.0.1:8000/docs](http://127.0.0.1:8000/docs)륌 ìŽë©Ž, ë€ì곌 ê°ìŽ ìë ëíì API 묞ì륌 볌 ì ììµëë€:
@@ -92,9 +92,9 @@
## íì€ êž°ë°ì ìŽì , ë첎 묞ì { #standards-based-benefits-alternative-documentation }
-ê·žëŠ¬ê³ ìì±ë ì€í€ë§ë OpenAPI íì€ìì ëìš ê²ìŽêž° ë묞ì ížíëë ëêµ¬ê° ë§ìŽ ììµëë€.
+ê·žëŠ¬ê³ ìì±ë ì€í€ë§ë [OpenAPI](https://github.com/OAI/OpenAPI-Specification/blob/master/versions/3.1.0.md) íì€ìì ëìš ê²ìŽêž° ë묞ì ížíëë ëêµ¬ê° ë§ìŽ ììµëë€.
-ìŽ ëë¶ì **FastAPI** ì첎ìì http://127.0.0.1:8000/redocë¡ ì ìí ì ìë (ReDocì ì¬ì©íë) ë첎 API 묞ì륌 ì ê³µí©ëë€:
+ìŽ ëë¶ì **FastAPI** ì첎ìì [http://127.0.0.1:8000/redoc](http://127.0.0.1:8000/redoc)ë¡ ì ìí ì ìë (ReDocì ì¬ì©íë) ë첎 API 묞ì륌 ì ê³µí©ëë€:
@@ -102,7 +102,7 @@
## Pydantic { #pydantic }
-몚ë ë°ìŽí° ê²ìŠì Pydanticì ìíŽ ëŽë¶ì ìŒë¡ ìíëë¯ë¡ ìŽë¡ ìží ìŽì ì 몚ë ì»ì ì ììµëë€. ì¬ë¬ë¶ì êŽëŠ¬ë¥Œ ì ë°ê³ ììì ëë ì ììµëë€.
+몚ë ë°ìŽí° ê²ìŠì [Pydantic](https://docs.pydantic.dev/)ì ìíŽ ëŽë¶ì ìŒë¡ ìíëë¯ë¡ ìŽë¡ ìží ìŽì ì 몚ë ì»ì ì ììµëë€. ì¬ë¬ë¶ì êŽëŠ¬ë¥Œ ì ë°ê³ ììì ëë ì ììµëë€.
`str`, `float`, `bool`, ê·žëŠ¬ê³ ë€ë¥ž ì¬ë¬ ë³µì¡í ë°ìŽí° íì
ì ìžì í ì ììµëë€.
@@ -130,7 +130,7 @@
## ì¬ì ì ì ê° { #predefined-values }
-ë§ìœ *ê²œë¡ ë§€ê°ë³ì*륌 ë°ë *ê²œë¡ ì²ëЬ*ê° ìì§ë§, ê°ë¥í ì íší *ê²œë¡ ë§€ê°ë³ì* ê°ë€ì 믞늬 ì ìíê³ ì¶ë€ë©Ž íìŽì¬ íì€ `Enum`ì ì¬ì©í ì ììµëë€.
+ë§ìœ *ê²œë¡ ë§€ê°ë³ì*륌 ë°ë *ê²œë¡ ì²ëЬ*ê° ìì§ë§, ê°ë¥í ì íší *ê²œë¡ ë§€ê°ë³ì* ê°ë€ì 믞늬 ì ìíê³ ì¶ë€ë©Ž íìŽì¬ íì€ `Enum`ì ì¬ì©í ì ììµëë€.
### `Enum` íŽëì€ ìì± { #create-an-enum-class }
@@ -150,7 +150,7 @@
### *ê²œë¡ ë§€ê°ë³ì* ì ìž { #declare-a-path-parameter }
-ìì±í ìŽê±°í íŽëì€(`ModelName`)륌 ì¬ì©íë íì
ìŽë
ží
ìŽì
ìŒë¡ *ê²œë¡ ë§€ê°ë³ì*륌 ë§ëëë€:
+ìì±í ìŽê±°í íŽëì€(`ModelName`)륌 ì¬ì©íë íì
ìŽë
ží
ìŽì
ìŒë¡ *ê²œë¡ ë§€ê°ë³ì륌* ë§ëëë€:
{* ../../docs_src/path_params/tutorial005_py310.py hl[16] *}
diff --git a/docs/ko/docs/tutorial/query-params-str-validations.md b/docs/ko/docs/tutorial/query-params-str-validations.md
index 2b608fd1d5..d4acff151d 100644
--- a/docs/ko/docs/tutorial/query-params-str-validations.md
+++ b/docs/ko/docs/tutorial/query-params-str-validations.md
@@ -35,13 +35,13 @@ FastAPIë 0.95.0 ë²ì ìì `Annotated` ì§ìì ì¶ê°íê³ (ê·žëŠ¬ê³ ìŽ
ìŽì ë²ì ì ì¬ì©í멎 `Annotated`륌 ì¬ì©íë €ê³ í ë ì€ë¥ê° ë°ìí©ëë€.
-`Annotated`륌 ì¬ì©íêž° ì ì ìµì 0.95.1 ë²ì ìŒë¡ [FastAPI ë²ì ì
ê·žë ìŽë](../deployment/versions.md#upgrading-the-fastapi-versions){.internal-link target=_blank}륌 ì§ííìžì.
+`Annotated`륌 ì¬ì©íêž° ì ì ìµì 0.95.1 ë²ì ìŒë¡ [FastAPI ë²ì ì
ê·žë ìŽë](../deployment/versions.md#upgrading-the-fastapi-versions)륌 ì§ííìžì.
///
## `q` ë§€ê°ë³ìì íì
ì `Annotated` ì¬ì©íêž° { #use-annotated-in-the-type-for-the-q-parameter }
-ìŽì ì [Python íì
ìê°](../python-types.md#type-hints-with-metadata-annotations){.internal-link target=_blank}ìì `Annotated`륌 ì¬ì©íŽ ë§€ê°ë³ìì ë©íë°ìŽí°ë¥Œ ì¶ê°í ì ìë€ê³ ë§ìë늰 ê²ì êž°ìµíìëì?
+ìŽì ì [Python íì
ìê°](../python-types.md#type-hints-with-metadata-annotations)ìì `Annotated`륌 ì¬ì©íŽ ë§€ê°ë³ìì ë©íë°ìŽí°ë¥Œ ì¶ê°í ì ìë€ê³ ë§ìë늰 ê²ì êž°ìµíìëì?
ìŽì FastAPIìì ì¬ì©í ì°šë¡ì
ëë€. ð
@@ -158,7 +158,7 @@ FastAPI ììŽë **ë€ë¥ž ê³³ìì** ê°ì íšì륌 **ížì¶**í ì ìê³
`Annotated`륌 ì¬ì©íì§ ìê³ **(ìŽì ) êž°ë³žê° ì€íìŒ**ì ì¬ì©í멎, FastAPI ììŽ **ë€ë¥ž ê³³ìì** íšì륌 ížì¶í ëë ì ëë¡ ëìíëë¡ íšìì ìžì륌 ì ë¬íŽìŒ íë€ë ê²ì **êž°ìµ**íŽìŒ í©ëë€. ê·žë ì§ ììŒë©Ž ê°ìŽ êž°ëì ë€ë¥Žê² ë©ëë€(ì: `str` ëì `QueryInfo` ê°ì ê²). ê·žëŠ¬ê³ ížì§êž°ë ê²œê³ íì§ ìê³ Pythonë ê·ž íšì륌 ì€íí ëë ë¶ííì§ ììŒë©°, ì€ì§ ëŽë¶ ëììì ì€ë¥ê° ë°ìí ëë§ ë¬žì ê° ëë¬ë©ëë€.
-`Annotated`ë íë ìŽìì ë©íë°ìŽí° ìŽë
ží
ìŽì
ì ê°ì§ ì ìêž° ë묞ì, ìŽì Typer ê°ì ë€ë¥ž ë구ììë ê°ì íšì륌 ì¬ì©í ì ììµëë€. ð
+`Annotated`ë íë ìŽìì ë©íë°ìŽí° ìŽë
ží
ìŽì
ì ê°ì§ ì ìêž° ë묞ì, ìŽì [Typer](https://typer.tiangolo.com/) ê°ì ë€ë¥ž ë구ììë ê°ì íšì륌 ì¬ì©í ì ììµëë€. ð
## ê²ìŠ ë ì¶ê°íêž° { #add-more-validations }
@@ -370,11 +370,11 @@ http://127.0.0.1:8000/items/?item-query=foobaritems
ê·žë° ê²œì°ìë ìŒë°ì ìž ê²ìŠ(ì: ê°ìŽ `str`ìžì§ ê²ìŠí ë€) ìŽíì ì ì©ëë **컀ì€í
ê²ìŠ íšì**륌 ì¬ì©í ì ììµëë€.
-`Annotated` ììì Pydanticì `AfterValidator`륌 ì¬ì©í멎 ìŽë¥Œ 구íí ì ììµëë€.
+`Annotated` ììì [Pydanticì `AfterValidator`](https://docs.pydantic.dev/latest/concepts/validators/#field-after-validator)륌 ì¬ì©í멎 ìŽë¥Œ 구íí ì ììµëë€.
/// tip | í
-Pydanticìë `BeforeValidator`ì ê°ì ë€ë¥ž ê²ë€ë ììµëë€. ð€
+Pydanticìë [BeforeValidator](https://docs.pydantic.dev/latest/concepts/validators/#field-before-validator)ì ê°ì ë€ë¥ž ê²ë€ë ììµëë€. ð€
///
diff --git a/docs/ko/docs/tutorial/query-params.md b/docs/ko/docs/tutorial/query-params.md
index 0a6b1f922c..4dffc90570 100644
--- a/docs/ko/docs/tutorial/query-params.md
+++ b/docs/ko/docs/tutorial/query-params.md
@@ -183,6 +183,6 @@ http://127.0.0.1:8000/items/foo-item?needy=sooooneedy
/// tip
-[ê²œë¡ ë§€ê°ë³ì](path-params.md#predefined-values){.internal-link target=_blank}ì ë§ì°¬ê°ì§ë¡ `Enum`ì ì¬ì©í ì ììµëë€.
+[ê²œë¡ ë§€ê°ë³ì](path-params.md#predefined-values)ì ë§ì°¬ê°ì§ë¡ `Enum`ì ì¬ì©í ì ììµëë€.
///
diff --git a/docs/ko/docs/tutorial/request-files.md b/docs/ko/docs/tutorial/request-files.md
index 3ee0fa74c3..49522ac252 100644
--- a/docs/ko/docs/tutorial/request-files.md
+++ b/docs/ko/docs/tutorial/request-files.md
@@ -4,9 +4,9 @@
/// info | ì 볎
-ì
ë¡ëë íìŒì ì ë¬ë°êž° ìíŽ ëšŒì `python-multipart`륌 ì€ì¹íŽìŒí©ëë€.
+ì
ë¡ëë íìŒì ì ë¬ë°êž° ìíŽ ëšŒì [`python-multipart`](https://github.com/Kludex/python-multipart)륌 ì€ì¹íŽìŒí©ëë€.
-[ê°ì í겜](../virtual-environments.md){.internal-link target=_blank}ì ìì±íê³ , íì±íí ë€ì, ì륌 ë€ìŽ ë€ì곌 ê°ìŽ ì€ì¹íìžì:
+[ê°ì í겜](../virtual-environments.md)ì ìì±íê³ , íì±íí ë€ì, ì륌 ë€ìŽ ë€ì곌 ê°ìŽ ì€ì¹íìžì:
```console
$ pip install python-multipart
@@ -63,8 +63,8 @@ Fileì 볞묞ì ì ìží ë, ë§€ê°ë³ìê° ì¿ŒëŠ¬ ë§€ê°ë³ì ëë 볞
* ìµë í¬êž° ì íê¹ì§ë§ ë©ëªšëЬì ì ì¥ëë©°, ìŽë¥Œ ìŽê³Œíë ê²œì° ëì€í¬ì ì ì¥ë©ëë€.
* ë°ëŒì ìŽë¯žì§, ëìì, í° ìŽì§ìœëì ê°ì ëì©ë íìŒë€ì ë§ì ë©ëªšëŠ¬ë¥Œ ì몚íì§ ìê³ ì²ëЬíêž°ì ì í©í©ëë€.
* ì
ë¡ë ë íìŒì ë©íë°ìŽí°ë¥Œ ì»ì ì ììµëë€.
-* file-like `async` ìží°íìŽì€ë¥Œ ê°ê³ ììµëë€.
-* file-like object륌 íìë¡íë ë€ë¥ž ëŒìŽëžë¬ëЬì ì§ì ì ìŒë¡ ì ë¬í ì ìë íìŽì¬ `SpooledTemporaryFile` ê°ì²Žë¥Œ ë°íí©ëë€.
+* [file-like](https://docs.python.org/3/glossary.html#term-file-like-object) `async` ìží°íìŽì€ë¥Œ ê°ê³ ììµëë€.
+* file-like object륌 íìë¡íë ë€ë¥ž ëŒìŽëžë¬ëЬì ì§ì ì ìŒë¡ ì ë¬í ì ìë íìŽì¬ [`SpooledTemporaryFile`](https://docs.python.org/3/library/tempfile.html#tempfile.SpooledTemporaryFile) ê°ì²Žë¥Œ ë°íí©ëë€.
### `UploadFile` { #uploadfile }
@@ -72,7 +72,7 @@ Fileì 볞묞ì ì ìží ë, ë§€ê°ë³ìê° ì¿ŒëŠ¬ ë§€ê°ë³ì ëë 볞
* `filename` : 묞ììŽ(`str`)ë¡ ë ì
ë¡ëë íìŒì íìŒëª
ì
ëë€ (ì: `myimage.jpg`).
* `content_type` : 묞ììŽ(`str`)ë¡ ë íìŒ íì(MIME type / media type)ì
ëë€ (ì: `image/jpeg`).
-* `file` : `SpooledTemporaryFile` (a file-like object)ì
ëë€. ìŽê²ì "file-like" ê°ì²Žë¥Œ íìë¡íë ë€ë¥ž íšìë ëŒìŽëžë¬ëЬì ì§ì ì ìŒë¡ ì ë¬í ì ìë ì€ì§ì ìž íìŽì¬ íìŒ ê°ì²Žì
ëë€.
+* `file` : [`SpooledTemporaryFile`](https://docs.python.org/3/library/tempfile.html#tempfile.SpooledTemporaryFile) (a [file-like](https://docs.python.org/3/glossary.html#term-file-like-object) object)ì
ëë€. ìŽê²ì "file-like" ê°ì²Žë¥Œ íìë¡íë ë€ë¥ž íšìë ëŒìŽëžë¬ëЬì ì§ì ì ìŒë¡ ì ë¬í ì ìë ì€ì§ì ìž íìŽì¬ íìŒ ê°ì²Žì
ëë€.
`UploadFile` ìë ë€ìì `async` ë©ìëë€ìŽ ììµëë€. ìŽë€ì ëŽë¶ì ìž `SpooledTemporaryFile` ì ì¬ì©íì¬ íŽë¹íë íìŒ ë©ìë륌 ížì¶í©ëë€.
@@ -121,7 +121,7 @@ HTMLì íŒë€(``)ìŽ ìë²ì ë°ìŽí°ë¥Œ ì ì¡íë ë°©ìì
íì§ë§ íìŒìŽ í¬íšë 겜ì°, `multipart/form-data`ë¡ ìžìœë©ë©ëë€. `File`ì ì¬ì©íìë€ë©Ž, **FastAPI**ë 볞묞ì ì í©í ë¶ë¶ìì íìŒì ê°ì žììŒ íë€ë ê²ì ìžì§í©ëë€.
-ìžìœë©ê³Œ íŒ íëì ëíŽ ë ìê³ ì¶ë€ë©Ž, MDN web docs for POST륌 ì°žê³ íêž° ë°ëëë€.
+ìžìœë©ê³Œ íŒ íëì ëíŽ ë ìê³ ì¶ë€ë©Ž, [MDN ì¹ ë¬žìì `POST`](https://developer.mozilla.org/en-US/docs/Web/HTTP/Methods/POST)륌 ì°žê³ íêž° ë°ëëë€.
///
diff --git a/docs/ko/docs/tutorial/request-form-models.md b/docs/ko/docs/tutorial/request-form-models.md
index 20a2e95972..4a5c3e1a75 100644
--- a/docs/ko/docs/tutorial/request-form-models.md
+++ b/docs/ko/docs/tutorial/request-form-models.md
@@ -4,9 +4,9 @@ FastAPIìì **Pydantic 몚ëž**ì ìŽì©íì¬ **íŒ íë**륌 ì ìží
/// info | ì 볎
-íŒì ì¬ì©íë €ë©Ž, 뚌ì `python-multipart`륌 ì€ì¹íìžì.
+íŒì ì¬ì©íë €ë©Ž, 뚌ì [`python-multipart`](https://github.com/Kludex/python-multipart)륌 ì€ì¹íìžì.
-[ê°ì í겜](../virtual-environments.md){.internal-link target=_blank}ì ìì±íê³ íì±íí ë€ì, ì륌 ë€ìŽ ìëì ê°ìŽ ì€ì¹íìžì:
+[ê°ì í겜](../virtual-environments.md)ì ìì±íê³ íì±íí ë€ì, ì륌 ë€ìŽ ìëì ê°ìŽ ì€ì¹íìžì:
```console
$ pip install python-multipart
diff --git a/docs/ko/docs/tutorial/request-forms-and-files.md b/docs/ko/docs/tutorial/request-forms-and-files.md
index 4c2d12bc06..fa8fdae7e8 100644
--- a/docs/ko/docs/tutorial/request-forms-and-files.md
+++ b/docs/ko/docs/tutorial/request-forms-and-files.md
@@ -2,11 +2,11 @@
`File` 곌 `Form` ì ì¬ì©íì¬ íìŒê³Œ íŒ íë륌 ëìì ì ìí ì ììµëë€.
-/// info | ì 볎
+/// info
-ì
ë¡ëë íìŒ ë°/ëë íŒ ë°ìŽí°ë¥Œ ë°ìŒë €ë©Ž 뚌ì `python-multipart`륌 ì€ì¹íŽìŒ í©ëë€.
+ì
ë¡ëë íìŒ ë°/ëë íŒ ë°ìŽí°ë¥Œ ë°ìŒë €ë©Ž 뚌ì [`python-multipart`](https://github.com/Kludex/python-multipart)륌 ì€ì¹íŽìŒ í©ëë€.
-[ê°ì í겜](../virtual-environments.md){.internal-link target=_blank}ì ìì±íê³ , íì±íí ë€ì ì€ì¹íŽìŒ í©ëë€. ì:
+[ê°ì í겜](../virtual-environments.md)ì ìì±íê³ , íì±íí ë€ì ì€ì¹íŽìŒ í©ëë€. ì:
```console
$ pip install python-multipart
@@ -28,7 +28,7 @@ $ pip install python-multipart
ëí ìŒë¶ íìŒì `bytes`ë¡, ìŒë¶ íìŒì `UploadFile`ë¡ ì ìží ì ììµëë€.
-/// warning | 겜ê³
+/// warning
ë€ìì `File`곌 `Form` ë§€ê°ë³ì륌 í *ê²œë¡ ì²ëЬ*ì ì ìžíë ê²ìŽ ê°ë¥íì§ë§, ìì²ì ë³žë¬žìŽ `application/json`ê° ìë `multipart/form-data`ë¡ ìžìœë©ëêž° ë묞ì JSONìŒë¡ ë°êž°ë¥Œ êž°ëíë `Body` íë륌 íšê» ì ìží ìë ììµëë€.
diff --git a/docs/ko/docs/tutorial/request-forms.md b/docs/ko/docs/tutorial/request-forms.md
index a830bc5f8a..4a618f5873 100644
--- a/docs/ko/docs/tutorial/request-forms.md
+++ b/docs/ko/docs/tutorial/request-forms.md
@@ -4,9 +4,9 @@ JSON ëì íŒ íë륌 ë°ììŒ íë ê²œì° `Form`ì ì¬ì©í ì ììµ
/// info | ì 볎
-íŒì ì¬ì©íë €ë©Ž, 뚌ì `python-multipart`륌 ì€ì¹íìžì.
+íŒì ì¬ì©íë €ë©Ž, 뚌ì [`python-multipart`](https://github.com/Kludex/python-multipart)륌 ì€ì¹íìžì.
-[ê°ì í겜](../virtual-environments.md){.internal-link target=_blank}ì ìì±íê³ íì±íí ë€ì, ìëì ê°ìŽ ì€ì¹í ì ììµëë€:
+[ê°ì í겜](../virtual-environments.md)ì ìì±íê³ íì±íí ë€ì, ì륌 ë€ìŽ ë€ì곌 ê°ìŽ ì€ì¹íìžì:
```console
$ pip install python-multipart
@@ -40,7 +40,7 @@ $ pip install python-multipart
/// tip | í
-íŒ ë³žë¬žì ì ìží ë, íŒìŽ ììŒë©Ž ë§€ê°ë³ìê° ì¿ŒëŠ¬ ë§€ê°ë³ìë 볞묞(JSON) ë§€ê°ë³ìë¡ íŽì(interpret)ëêž° ë묞ì `Form`ì ëª
ìì ìŒë¡ ì¬ì©íŽìŒ í©ëë€.
+íŒ ë³žë¬žì ì ìží ëë `Form`ì ëª
ìì ìŒë¡ ì¬ì©íŽìŒ í©ëë€. ê·žë ì§ ììŒë©Ž ë§€ê°ë³ìê° ì¿ŒëŠ¬ ë§€ê°ë³ìë 볞묞(JSON) ë§€ê°ë³ìë¡ íŽìë©ëë€.
///
@@ -56,7 +56,7 @@ HTML íŒ(``)ìŽ ë°ìŽí°ë¥Œ ìë²ë¡ 볎ëŽë ë°©ìì ìŒë°
ê·žë¬ë íŒì íìŒìŽ í¬íšë 겜ì°, `multipart/form-data`ë¡ ìžìœë©í©ëë€. ë€ì ì¥ìì íìŒ ì²ëЬì ëíŽ ìœì ê²ëë€.
-ìŽë¬í ìžìœë© ë° íŒ íëì ëíŽ ë ìœê³ ì¶ë€ë©Ž, MDN ì¹ ë¬žì륌 ì°žì¡°íìžì POSTì ëí.
+ìŽë¬í ìžìœë© ë° íŒ íëì ëíŽ ë ìœê³ ì¶ë€ë©Ž, [`POST`ì ëí MDN ì¹ ë¬žì륌 ì°žì¡°íìžì](https://developer.mozilla.org/en-US/docs/Web/HTTP/Methods/POST).
///
diff --git a/docs/ko/docs/tutorial/response-model.md b/docs/ko/docs/tutorial/response-model.md
index 942901e7cc..f3d1046267 100644
--- a/docs/ko/docs/tutorial/response-model.md
+++ b/docs/ko/docs/tutorial/response-model.md
@@ -13,6 +13,7 @@ FastAPIë ìŽ ë°í íì
ì ì¬ì©íì¬:
* OpenAPI *ê²œë¡ ì²ëЬ*ì ìëµì **JSON Schema**륌 ì¶ê°í©ëë€.
* ìŽë **ìë 묞ì**ìì ì¬ì©ë©ëë€.
* ëí ìë íŽëŒìŽìžíž ìœë ìì± ë구ììë ì¬ì©ë©ëë€.
+* ë°íë ë°ìŽí°ë¥Œ Pydanticì ì¬ì©íŽ JSONìŒë¡ **ì§ë ¬í**í©ëë€. Pydanticì **Rust**ë¡ ìì±ëìŽ ììŽ **íšì¬ ë ë¹ ëŠ
ëë€**.
íì§ë§ ê°ì¥ ì€ìí ê²ì:
@@ -73,9 +74,9 @@ FastAPIë ìŽ `response_model`ì ì¬ì©íŽ ë°ìŽí° 묞ìí, ê²ìŠ ë±ì
/// info | ì 볎
-`EmailStr`ì ì¬ì©íë €ë©Ž 뚌ì `email-validator`륌 ì€ì¹íìžì.
+`EmailStr`ì ì¬ì©íë €ë©Ž 뚌ì [`email-validator`](https://github.com/JoshData/python-email-validator)륌 ì€ì¹íìžì.
-[ê°ì í겜](../virtual-environments.md){.internal-link target=_blank}ì ìì±íê³ , íì±íí ë€ì ì€ì¹íŽìŒ í©ëë€. ì륌 ë€ìŽ:
+[ê°ì í겜](../virtual-environments.md)ì ìì±íê³ , íì±íí ë€ì ì€ì¹íŽìŒ í©ëë€. ì륌 ë€ìŽ:
```console
$ pip install email-validator
@@ -181,7 +182,7 @@ FastAPIë Pydanticì ëŽë¶ì ìŒë¡ ì¬ë¬ ë°©ììŒë¡ ì¬ì©íì¬, íŽë
### ìëµì ì§ì ë°ííêž° { #return-a-response-directly }
-ê°ì¥ íí 겜ì°ë [ê³ êž ë¬žììì ëì€ì ì€ëª
íë ëë¡ Response륌 ì§ì ë°ííë ê²](../advanced/response-directly.md){.internal-link target=_blank}ì
ëë€.
+ê°ì¥ íí 겜ì°ë [ê³ êž ë¬žììì ëì€ì ì€ëª
íë ëë¡ Response륌 ì§ì ë°ííë ê²](../advanced/response-directly.md)ì
ëë€.
{* ../../docs_src/response_model/tutorial003_02_py310.py hl[8,10:11] *}
@@ -257,7 +258,7 @@ FastAPIë Pydanticì ëŽë¶ì ìŒë¡ ì¬ë¬ ë°©ììŒë¡ ì¬ì©íì¬, íŽë
* `response_model_exclude_defaults=True`
* `response_model_exclude_none=True`
-`exclude_defaults` ë° `exclude_none`ì ëíŽ Pydantic 묞ìì ì€ëª
ë ëë¡ ì¬ì©í ì ììµëë€.
+`exclude_defaults` ë° `exclude_none`ì ëíŽ [Pydantic 묞ì](https://docs.pydantic.dev/1.10/usage/exporting_models/#modeldict)ì ì€ëª
ë ëë¡ ì¬ì©í ì ììµëë€.
///
diff --git a/docs/ko/docs/tutorial/response-status-code.md b/docs/ko/docs/tutorial/response-status-code.md
index c81132dfb9..68db66e338 100644
--- a/docs/ko/docs/tutorial/response-status-code.md
+++ b/docs/ko/docs/tutorial/response-status-code.md
@@ -20,7 +20,7 @@
/// info | ì 볎
-`status_code` ë íìŽì¬ì `http.HTTPStatus` ì ê°ì `IntEnum` ì ì
ë ¥ë°ì ìë ììµëë€.
+`status_code` ë íìŽì¬ì [`http.HTTPStatus`](https://docs.python.org/3/library/http.html#http.HTTPStatus) ì ê°ì `IntEnum` ì ì
ë ¥ë°ì ìë ììµëë€.
///
@@ -43,7 +43,7 @@ FastAPIë ìŽë¥Œ ìê³ ììŒë©°, ìëµ ë³žë¬žìŽ ìë€ê³ ëª
ìíë Open
/// note | ì°žê³
-ë§ìœ HTTP ìí ìœëê° ë¬Žììžì§ ìŽë¯ž ìê³ ìë€ë©Ž, ë€ì ì¡ì
ìŒë¡ ëìŽê°ìžì.
+ë§ìœ HTTP ìí ìœëê° ë¬Žììžì§ ìŽë¯ž ìê³ ìë€ë©Ž, ë€ì ì¹ì
ìŒë¡ ëìŽê°ìžì.
///
@@ -66,7 +66,7 @@ HTTPììë ìëµì ìŒë¶ë¡ 3ì늬 ì«ì ìí ìœë륌 볎ë
ëë€.
/// tip | í
-ê° ìí ìœëì ìŽë€ ìœëê° ìŽë€ ì©ëìžì§ ë ìê³ ì¶ë€ë©Ž MDNì HTTP ìí ìœëì êŽí 묞ì륌 íìžíìžì.
+ê° ìí ìœëì ìŽë€ ìœëê° ìŽë€ ì©ëìžì§ ë ìê³ ì¶ë€ë©Ž [MDNì HTTP ìí ìœëì êŽí 묞ì](https://developer.mozilla.org/en-US/docs/Web/HTTP/Status)륌 íìžíìžì.
///
@@ -98,4 +98,4 @@ HTTPììë ìëµì ìŒë¶ë¡ 3ì늬 ì«ì ìí ìœë륌 볎ë
ëë€.
## êž°ë³žê° ë³ê²œ { #changing-the-default }
-ëì€ì [ê³ êž ì¬ì©ì ì§ì¹šì](../advanced/response-change-status-code.md){.internal-link target=_blank}ìì, ì¬êž°ì ì ìžíë Ʞ볞ê°ê³Œ ë€ë¥ž ìí ìœë륌 ë°ííë ë°©ë²ì íìží ì ììµëë€.
+ëì€ì [ê³ êž ì¬ì©ì ì§ì¹šì](../advanced/response-change-status-code.md)ìì, ì¬êž°ì ì ìžíë Ʞ볞ê°ê³Œ ë€ë¥ž ìí ìœë륌 ë°ííë ë°©ë²ì íìží ì ììµëë€.
diff --git a/docs/ko/docs/tutorial/schema-extra-example.md b/docs/ko/docs/tutorial/schema-extra-example.md
index a1d0c84689..ffa97375df 100644
--- a/docs/ko/docs/tutorial/schema-extra-example.md
+++ b/docs/ko/docs/tutorial/schema-extra-example.md
@@ -2,7 +2,7 @@
ì¬ë¬ë¶ì ì±ìŽ ë°ì ì ìë ë°ìŽí° ìì 륌 ì ìží ì ììµëë€.
-ì¬êž° ìŽë¥Œ ìí ëªê°ì§ ë°©ììŽ ììµëë€.
+ì¬êž° ìŽë¥Œ ìí ëª ê°ì§ ë°©ììŽ ììµëë€.
## Pydantic ëªšëž ì ì¶ê° JSON ì€í€ë§ ë°ìŽí° { #extra-json-schema-data-in-pydantic-models }
@@ -12,7 +12,7 @@
ì¶ê° ì 볎ë ìë ê·žëë¡ íŽë¹ 몚ëžì **JSON ì€í€ë§** 결곌ì ì¶ê°ëê³ , API 묞ììì ì¬ì©í©ëë€.
-Pydantic 묞ì: Configurationì ì€ëª
ë ê²ì²ëŒ `dict`륌 ë°ë `model_config` ìŽížëŠ¬ë·°ížë¥Œ ì¬ì©í ì ììµëë€.
+[Pydantic 묞ì: Configuration](https://docs.pydantic.dev/latest/api/config/)ì ì€ëª
ë ê²ì²ëŒ `dict`륌 ë°ë `model_config` ìŽížëŠ¬ë·°ížë¥Œ ì¬ì©í ì ììµëë€.
`"json_schema_extra"`륌 ìì±ë JSON ì€í€ë§ìì 볎ì¬ì£Œê³ ì¶ì ë³ëì ë°ìŽí°ì `examples`륌 í¬íšíë `dict`ìŒë¡ ì€ì í ì ììµëë€.
@@ -145,12 +145,12 @@ JSON ì€í€ë§ë `examples`륌 ê°ì§ê³ ìì§ ììê³ , ë°ëŒì OpenAPIë
OpenAPIë ëí `example`곌 `examples` íë륌 ëª
ìžìì ë€ë¥ž ë¶ë¶ì ì¶ê°íìµëë€:
-* `Parameter Object` (ëª
ìžìì ìë)ë FastAPIì ë€ì êž°ë¥ìì ì°ììµëë€:
+* [`Parameter Object` (ëª
ìžìì ìë)](https://github.com/OAI/OpenAPI-Specification/blob/main/versions/3.1.0.md#parameter-object)ë FastAPIì ë€ì êž°ë¥ìì ì°ììµëë€:
* `Path()`
* `Query()`
* `Header()`
* `Cookie()`
-* `Request Body Object`, `Media Type Object` (ëª
ìžìì ìë)ì `content` íëì ìëë FastAPIì ë€ì êž°ë¥ìì ì°ììµëë€:
+* [`Request Body Object`, `Media Type Object` (ëª
ìžìì ìë)ì `content` íëì ìë](https://github.com/OAI/OpenAPI-Specification/blob/main/versions/3.1.0.md#media-type-object)ë FastAPIì ë€ì êž°ë¥ìì ì°ììµëë€:
* `Body()`
* `File()`
* `Form()`
@@ -163,7 +163,7 @@ OpenAPIë ëí `example`곌 `examples` íë륌 ëª
ìžìì ë€ë¥ž ë¶ë¶
### JSON ì€í€ë§ì `examples` íë { #json-schemas-examples-field }
-íì§ë§, íì JSON ì€í€ë§ë `examples` íë륌 ëª
ìžìì ì ë²ì ì ì¶ê°íìµëë€.
+íì§ë§, íì JSON ì€í€ë§ë [`examples`](https://json-schema.org/draft/2019-09/json-schema-validation.html#rfc.section.9.5) íë륌 ëª
ìžìì ì ë²ì ì ì¶ê°íìµëë€.
ê·žëŠ¬ê³ ìë¡ìŽ OpenAPI 3.1.0ì ìŽ ìë¡ìŽ `examples` íëê° í¬íšë ìµì ë²ì (JSON ì€í€ë§ 2020-12)ì êž°ë°ìŒë¡ íìµëë€.
diff --git a/docs/ko/docs/tutorial/security/first-steps.md b/docs/ko/docs/tutorial/security/first-steps.md
index 57b336d52d..8b7563ec3e 100644
--- a/docs/ko/docs/tutorial/security/first-steps.md
+++ b/docs/ko/docs/tutorial/security/first-steps.md
@@ -26,11 +26,11 @@
/// info | ì 볎
-`python-multipart` íší€ì§ë `pip install "fastapi[standard]"` ëª
ë ¹ì ì€íí멎 **FastAPI**ì íšê» ìëìŒë¡ ì€ì¹ë©ëë€.
+[`python-multipart`](https://github.com/Kludex/python-multipart) íší€ì§ë `pip install "fastapi[standard]"` ëª
ë ¹ì ì€íí멎 **FastAPI**ì íšê» ìëìŒë¡ ì€ì¹ë©ëë€.
íì§ë§ `pip install fastapi` ëª
ë ¹ì ì¬ì©í멎 `python-multipart` íší€ì§ê° Ʞ볞ìŒë¡ í¬íšëì§ ììµëë€.
-ìëìŒë¡ ì€ì¹íë €ë©Ž, [ê°ì í겜](../../virtual-environments.md){.internal-link target=_blank}ì ë§ë€ê³ íì±íí ë€ì, ìëë¡ ì€ì¹íìžì:
+ìëìŒë¡ ì€ì¹íë €ë©Ž, [ê°ì í겜](../../virtual-environments.md)ì ë§ë€ê³ íì±íí ë€ì, ìëë¡ ì€ì¹íìžì:
```console
$ pip install python-multipart
@@ -45,7 +45,7 @@ $ pip install python-multipart
```console
-$ fastapi dev main.py
+$ fastapi dev
INFO: Uvicorn running on http://127.0.0.1:8000 (Press CTRL+C to quit)
```
@@ -54,7 +54,7 @@ $ fastapi dev main.py
## íìžíêž° { #check-it }
-ëíí 묞ìë¡ ìŽëíìžì:
http://127.0.0.1:8000/docs.
+ëíí 묞ìë¡ ìŽëíìžì: [http://127.0.0.1:8000/docs](http://127.0.0.1:8000/docs).
ë€ì곌 ë¹ì·í íë©ŽìŽ ë³ŽìŒ ê²ì
ëë€:
@@ -140,7 +140,7 @@ OAuth2ë backend ëë APIê° ì¬ì©ì륌 ìžìŠíë ìë²ì ë
늜ì ìŒ
ìë URLì ì¬ì©íë¯ë¡, ì륌 ë€ìŽ APIê° `https://example.com/`ì ìë€ë©Ž `https://example.com/token`ì ê°ëЬíµëë€. íì§ë§ APIê° `https://example.com/api/v1/`ì ìë€ë©Ž `https://example.com/api/v1/token`ì ê°ëЬíµëë€.
-ìë URLì ì¬ì©íë ê²ì [íë¡ì ë€ìì](../../advanced/behind-a-proxy.md){.internal-link target=_blank} ê°ì ê³ êž ì¬ì© ì¬ë¡ììë ì í늬ìŒìŽì
ìŽ ê³ì ëìíëë¡ ë³Žì¥íë ë° ì€ìí©ëë€.
+ìë URLì ì¬ì©íë ê²ì [íë¡ì ë€ìì](../../advanced/behind-a-proxy.md) ê°ì ê³ êž ì¬ì© ì¬ë¡ììë ì í늬ìŒìŽì
ìŽ ê³ì ëìíëë¡ ë³Žì¥íë ë° ì€ìí©ëë€.
///
diff --git a/docs/ko/docs/tutorial/security/oauth2-jwt.md b/docs/ko/docs/tutorial/security/oauth2-jwt.md
index f9c4cc2ff3..3c3b93e3a6 100644
--- a/docs/ko/docs/tutorial/security/oauth2-jwt.md
+++ b/docs/ko/docs/tutorial/security/oauth2-jwt.md
@@ -24,13 +24,13 @@ eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJzdWIiOiIxMjM0NTY3ODkwIiwibmFtZSI6IkpvaG4
1ì£ŒìŒ ë€ìë í í°ìŽ ë§ë£ëê³ ì¬ì©ìë ìžê°ëì§ ììŒë¯ë¡ ì í í°ì ë°êž° ìíŽ ë€ì ë¡ê·žìžíŽìŒ í©ëë€. ê·žëŠ¬ê³ ì¬ì©ì(ëë ì 3ì)ê° ë§ë£ ìê°ì ë°êŸžêž° ìíŽ í í°ì ìì íë €ê³ í멎, ìëª
ìŽ ìŒì¹íì§ ìêž° ë묞ì ìŽë¥Œ ììì± ì ììµëë€.
-JWT í í°ì ì§ì ë€ë€ë³Žê³ ëì ë°©ìì íìžíŽë³Žê³ ì¶ë€ë©Ž
https://jwt.io륌 íìžíììì€.
+JWT í í°ì ì§ì ë€ë€ë³Žê³ ëì ë°©ìì íìžíŽë³Žê³ ì¶ë€ë©Ž [https://jwt.io](https://jwt.io/)륌 íìžíììì€.
## `PyJWT` ì€ì¹ { #install-pyjwt }
Pythonìì JWT í í°ì ìì±íê³ ê²ìŠíë €ë©Ž `PyJWT`륌 ì€ì¹íŽìŒ í©ëë€.
-[ê°ìí겜](../../virtual-environments.md){.internal-link target=_blank}ì ë§ë€ê³ íì±íí ë€ì `pyjwt`륌 ì€ì¹íììì€:
+[ê°ìí겜](../../virtual-environments.md)ì ë§ë€ê³ íì±íí ë€ì `pyjwt`륌 ì€ì¹íììì€:
@@ -46,7 +46,7 @@ $ pip install pyjwt
RSAë ECDSA ê°ì ì ì ìëª
ìê³ ëŠ¬ìŠì ì¬ì©í ê³íìŽëŒë©Ž, cryptography ëŒìŽëžë¬ëЬ ì졎ì±ìž `pyjwt[crypto]`륌 ì€ì¹íŽìŒ í©ëë€.
-ììží ëŽì©ì
PyJWT Installation docsìì íìží ì ììµëë€.
+ììží ëŽì©ì [PyJWT ì€ì¹ 묞ì](https://pyjwt.readthedocs.io/en/latest/installation.html)ìì íìží ì ììµëë€.
///
@@ -72,7 +72,7 @@ pwdlibë íšì€ìë íŽì륌 ë€ë£šêž° ìí íë¥í Python íší€ì§ì
ì¶ì² ìê³ ëŠ¬ìŠì "Argon2"ì
ëë€.
-[ê°ìí겜](../../virtual-environments.md){.internal-link target=_blank}ì ë§ë€ê³ íì±íí ë€ì Argon2ì íšê» pwdlib륌 ì€ì¹íììì€:
+[ê°ìí겜](../../virtual-environments.md)ì ë§ë€ê³ íì±íí ë€ì Argon2ì íšê» pwdlib륌 ì€ì¹íììì€:
@@ -200,7 +200,7 @@ JWTë ì¬ì©ì륌 ìë³íê³ ì¬ì©ìê° APIìì ì§ì ìì
ì ìí
## íìžíêž° { #check-it }
-ìë²ë¥Œ ì€ííê³ ë¬žìë¡ ìŽëíììì€:
http://127.0.0.1:8000/docs.
+ìë²ë¥Œ ì€ííê³ ë¬žìë¡ ìŽëíììì€: [http://127.0.0.1:8000/docs](http://127.0.0.1:8000/docs).
ë€ì곌 ê°ì ì¬ì©ì ìží°íìŽì€ê° ë³ŽìŒ ê²ì
ëë€:
diff --git a/docs/ko/docs/tutorial/security/simple-oauth2.md b/docs/ko/docs/tutorial/security/simple-oauth2.md
index 918c94b25f..48361de83d 100644
--- a/docs/ko/docs/tutorial/security/simple-oauth2.md
+++ b/docs/ko/docs/tutorial/security/simple-oauth2.md
@@ -146,7 +146,7 @@ UserInDB(
/// info | ì 볎
-`**user_dict`ì ëí ììží ì€ëª
ì [**ì¶ê° 몚ëž** 묞ì](../extra-models.md#about-user-in-dict){.internal-link target=_blank}륌 ë€ì íìžíŽë³Žìžì.
+`**user_dict`ì ëí ììží ì€ëª
ì [**ì¶ê° 몚ëž** 묞ì](../extra-models.md#about-user-in-dict)륌 ë€ì íìžíŽë³Žìžì.
///
@@ -216,7 +216,7 @@ UserInDB(
## íìžíêž° { #see-it-in-action }
-ëíí 묞ì ìŽêž°:
http://127.0.0.1:8000/docs.
+ëíí 묞ì ìŽêž°: [http://127.0.0.1:8000/docs](http://127.0.0.1:8000/docs).
### ìžìŠíêž° { #authenticate }
diff --git a/docs/ko/docs/tutorial/sql-databases.md b/docs/ko/docs/tutorial/sql-databases.md
index 20c1367164..b046d14b53 100644
--- a/docs/ko/docs/tutorial/sql-databases.md
+++ b/docs/ko/docs/tutorial/sql-databases.md
@@ -2,9 +2,9 @@
**FastAPI**ìì SQL(êŽê³í) ë°ìŽí°ë² ìŽì€ ì¬ì©ì íìê° ìëëë€. íì§ë§ ì¬ë¬ë¶ìŽ ìíë **ìŽë€ ë°ìŽí°ë² ìŽì€ë ** ì¬ì©í ì ììµëë€.
-ì¬êž°ìë
SQLModelì ì¬ì©íë ìì 륌 ìŽíŽë³Žê² ìµëë€.
+ì¬êž°ìë [SQLModel](https://sqlmodel.tiangolo.com/)ì ì¬ì©íë ìì 륌 ìŽíŽë³Žê² ìµëë€.
-**SQLModel**ì
SQLAlchemyì Pydanticì êž°ë°ìŒë¡ 구ì¶ëììµëë€. **SQL ë°ìŽí°ë² ìŽì€**륌 ì¬ì©íŽìŒ íë FastAPI ì í늬ìŒìŽì
ì ì벜í ìŽìžëЬëë¡ **FastAPI**ì ê°ì ì ììê° ë§ë ë구ì
ëë€.
+**SQLModel**ì [SQLAlchemy](https://www.sqlalchemy.org/)ì Pydanticì êž°ë°ìŒë¡ 구ì¶ëììµëë€. **SQL ë°ìŽí°ë² ìŽì€**륌 ì¬ì©íŽìŒ íë FastAPI ì í늬ìŒìŽì
ì ì벜í ìŽìžëЬëë¡ **FastAPI**ì ê°ì ì ììê° ë§ë ë구ì
ëë€.
/// tip | í
@@ -26,15 +26,15 @@ SQLModelì SQLAlchemy륌 êž°ë°ìŒë¡ íë¯ë¡, SQLAlchemyìì **ì§ìí
/// tip | í
-íë¡ ížìëì ë ë§ì ë구륌 í¬íšíì¬ **FastAPI**ì **PostgreSQL**ì í¬íší ê³µì íë¡ì íž ìì±êž°ê° ììµëë€:
https://github.com/fastapi/full-stack-fastapi-template
+íë¡ ížìëì ë ë§ì ë구륌 í¬íšíì¬ **FastAPI**ì **PostgreSQL**ì í¬íší ê³µì íë¡ì íž ìì±êž°ê° ììµëë€: [https://github.com/fastapi/full-stack-fastapi-template](https://github.com/fastapi/full-stack-fastapi-template)
///
-ìŽ íí 늬ìŒì ë§€ì° ê°ëšíê³ ì§§ìµëë€. ë°ìŽí°ë² ìŽì€ Ʞ볞 ê°ë
, SQL, ëë ë ê³ êž êž°ë¥ì ëíŽ ë°°ì°ê³ ì¶ë€ë©Ž,
SQLModel 묞ì륌 ì°žê³ íìžì.
+ìŽ íí 늬ìŒì ë§€ì° ê°ëšíê³ ì§§ìµëë€. ë°ìŽí°ë² ìŽì€ Ʞ볞 ê°ë
, SQL, ëë ë ê³ êž êž°ë¥ì ëíŽ ë°°ì°ê³ ì¶ë€ë©Ž, [SQLModel 묞ì](https://sqlmodel.tiangolo.com/)륌 ì°žê³ íìžì.
## `SQLModel` ì€ì¹íêž° { #install-sqlmodel }
-뚌ì , [ê°ì í겜](../virtual-environments.md){.internal-link target=_blank}ì ìì±íê³ íì±íí ë€ì, `sqlmodel`ì ì€ì¹íìžì:
+뚌ì , [ê°ì í겜](../virtual-environments.md)ì ìì±íê³ íì±íí ë€ì, `sqlmodel`ì ì€ì¹íìžì:
@@ -65,7 +65,7 @@ $ pip install sqlmodel
* `Field(primary_key=True)`ë SQLModelì `id`ê° SQL ë°ìŽí°ë² ìŽì€ì **Ʞ볞 í€**ìì ìë €ì€ëë€ (SQL Ʞ볞 í€ì ëí ììží ëŽì©ì SQLModel 묞ì륌 ì°žê³ íìžì).
- **ì°žê³ :** Ʞ볞 í€ íëì `int | None`ì ì¬ì©íë ìŽì ë, Python ìœëìì *`id` ììŽ ê°ì²Žë¥Œ ìì±*í ì ìê² íêž° ìíŽìì
ëë€(`id=None`). ë°ìŽí°ë² ìŽì€ê° *ì ì¥í ë ìì±íŽ ì€ ê²*ìŽëŒê³ ê°ì í©ëë€. SQLModelì ë°ìŽí°ë² ìŽì€ê° `id`륌 ì ê³µíë€ë ê²ì ìŽíŽíê³ , ë°ìŽí°ë² ìŽì€ ì€í€ë§ìì *íŽë¹ ìŽì nullìŽ ìë `INTEGER`*ë¡ ì ìí©ëë€. ììží ëŽì©ì
Ʞ볞 í€ì ëí SQLModel 묞ì륌 ì°žê³ íìžì.
+ **ì°žê³ :** Ʞ볞 í€ íëì `int | None`ì ì¬ì©íë ìŽì ë, Python ìœëìì *`id` ììŽ ê°ì²Žë¥Œ ìì±*í ì ìê² íêž° ìíŽìì
ëë€(`id=None`). ë°ìŽí°ë² ìŽì€ê° *ì ì¥í ë ìì±íŽ ì€ ê²*ìŽëŒê³ ê°ì í©ëë€. SQLModelì ë°ìŽí°ë² ìŽì€ê° `id`륌 ì ê³µíë€ë ê²ì ìŽíŽíê³ , ë°ìŽí°ë² ìŽì€ ì€í€ë§ìì *íŽë¹ ìŽì nullìŽ ìë `INTEGER`*ë¡ ì ìí©ëë€. ììží ëŽì©ì [Ʞ볞 í€ì ëí SQLModel 묞ì](https://sqlmodel.tiangolo.com/tutorial/create-db-and-table/#primary-key-id)륌 ì°žê³ íìžì.
* `Field(index=True)`ë SQLModelì íŽë¹ ìŽì ëíŽ **SQL ìžë±ì€**륌 ìì±íëë¡ ì§ìí©ëë€. ìŽë¥Œ íµíŽ ë°ìŽí°ë² ìŽì€ìì ìŽ ìŽë¡ íí°ë§ë ë°ìŽí°ë¥Œ ìœì ë ë ë¹ ë¥Žê² ì¡°íí ì ììµëë€.
@@ -111,7 +111,7 @@ SQLModelì `engine` (ëŽë¶ì ìŒë¡ë SQLAlchemy `engine`)ì ë°ìŽí°ë² ìŽ
/// tip | í
-SQLModelì Alembicì ê°ìžë ë§ìŽê·žë ìŽì
ì ížëЬí°ë¥Œ ì ê³µí ìì ì
ëë€. íì§ë§ íì¬
Alembicì ì§ì ì¬ì©í ì ììµëë€.
+SQLModelì Alembicì ê°ìžë ë§ìŽê·žë ìŽì
ì ížëЬí°ë¥Œ ì ê³µí ìì ì
ëë€. íì§ë§ íì¬ [Alembic](https://alembic.sqlalchemy.org/en/latest/)ì ì§ì ì¬ì©í ì ììµëë€.
///
@@ -152,7 +152,7 @@ SQLModelì Alembicì ê°ìžë ë§ìŽê·žë ìŽì
ì ížëЬí°ë¥Œ ì ê³µí
```console
-$ fastapi dev main.py
+$ fastapi dev
INFO: Uvicorn running on http://127.0.0.1:8000 (Press CTRL+C to quit)
```
@@ -337,7 +337,7 @@ hero **ìì **ë ìŽì 곌 ê±°ì ëìŒí©ëë€.
```console
-$ fastapi dev main.py
+$ fastapi dev
INFO: Uvicorn running on http://127.0.0.1:8000 (Press CTRL+C to quit)
```
@@ -352,6 +352,6 @@ $ fastapi dev main.py
## ììœ { #recap }
-
**SQLModel**ì ì¬ì©íì¬ SQL ë°ìŽí°ë² ìŽì€ì ìížìì©íê³ , *ë°ìŽí° 몚ëž* ë° *í
ìŽëž 몚ëž*ë¡ ìœë륌 ê°ìíí ì ììµëë€.
+[**SQLModel**](https://sqlmodel.tiangolo.com/)ì ì¬ì©íì¬ SQL ë°ìŽí°ë² ìŽì€ì ìížìì©íê³ , *ë°ìŽí° 몚ëž* ë° *í
ìŽëž 몚ëž*ë¡ ìœë륌 ê°ìíí ì ììµëë€.
-ë ë§ì ëŽì©ì ë°°ì°ë €ë©Ž **SQLModel** 묞ì륌 ì°žê³ íìžì. **FastAPI**ì íšê» SQLModelì ì¬ì©íë ë ꞎ 믞ë
íí 늬ìŒë ììµëë€. ð
+ë ë§ì ëŽì©ì ë°°ì°ë €ë©Ž **SQLModel** 묞ì륌 ì°žê³ íìžì. **FastAPI**ì íšê» SQLModelì ì¬ì©íë ë ꞎ 믞ë [íí 늬ìŒ](https://sqlmodel.tiangolo.com/tutorial/fastapi/)ë ììµëë€. ð
diff --git a/docs/ko/docs/tutorial/static-files.md b/docs/ko/docs/tutorial/static-files.md
index 0235d83c7f..d4c6f6c2d4 100644
--- a/docs/ko/docs/tutorial/static-files.md
+++ b/docs/ko/docs/tutorial/static-files.md
@@ -23,7 +23,7 @@
ë§ìŽížë ì í늬ìŒìŽì
ì ìì í ë
늜ì ìŽë¯ë¡ `APIRouter`륌 ì¬ì©íë ê²ê³Œë ë€ëŠ
ëë€. ë©ìž ì í늬ìŒìŽì
ì OpenAPI ë° ë¬žììë ë§ìŽížë ì í늬ìŒìŽì
ì ëŽì© ë±ìŽ í¬íšëì§ ììµëë€.
-ììží ëŽì©ì [ê³ êž ì¬ì©ì ê°ìŽë](../advanced/index.md){.internal-link target=_blank}ìì íìží ì ììµëë€.
+ììží ëŽì©ì [ê³ êž ì¬ì©ì ê°ìŽë](../advanced/index.md)ìì íìží ì ììµëë€.
## ìžë¶ì¬í { #details }
@@ -37,4 +37,4 @@
## ì¶ê° ì 볎 { #more-info }
-ììží ëŽì©ê³Œ ìµì
ì
Starletteì ì ì íìŒ ë¬žì륌 íìžíìžì.
+ììží ëŽì©ê³Œ ìµì
ì [Starletteì ì ì íìŒ ë¬žì](https://www.starlette.dev/staticfiles/)륌 íìžíìžì.
diff --git a/docs/ko/docs/tutorial/testing.md b/docs/ko/docs/tutorial/testing.md
index 57ab811515..aab85580bb 100644
--- a/docs/ko/docs/tutorial/testing.md
+++ b/docs/ko/docs/tutorial/testing.md
@@ -1,18 +1,18 @@
# í
ì€í
{ #testing }
-
Starlette ëë¶ì **FastAPI** ì í늬ìŒìŽì
ì í
ì€ížíë ìŒì ìœê³ ìŠê±°ìŽ ìŒìŽ ëììµëë€.
+[Starlette](https://www.starlette.dev/testclient/) ëë¶ì **FastAPI** ì í늬ìŒìŽì
ì í
ì€ížíë ìŒì ìœê³ ìŠê±°ìŽ ìŒìŽ ëììµëë€.
-ìŽë
HTTPX륌 êž°ë°ìŒë¡ íë©°, ìŽë Requests륌 êž°ë°ìŒë¡ ì€ê³ëìêž° ë묞ì ë§€ì° ì¹ìíê³ ì§êŽì ì
ëë€.
+ìŽë [HTTPX](https://www.python-httpx.org)륌 êž°ë°ìŒë¡ íë©°, ìŽë Requests륌 êž°ë°ìŒë¡ ì€ê³ëìêž° ë묞ì ë§€ì° ì¹ìíê³ ì§êŽì ì
ëë€.
-ìŽë¥Œ ì¬ì©í멎 **FastAPI**ìì
pytest륌 ì§ì ì¬ì©í ì ììµëë€.
+ìŽë¥Œ ì¬ì©í멎 **FastAPI**ìì [pytest](https://docs.pytest.org/)륌 ì§ì ì¬ì©í ì ììµëë€.
## `TestClient` ì¬ì©íêž° { #using-testclient }
/// info | ì 볎
-`TestClient` ì¬ì©íë €ë©Ž, ì°ì
`httpx`륌 ì€ì¹íŽìŒ í©ëë€.
+`TestClient` ì¬ì©íë €ë©Ž, ì°ì [`httpx`](https://www.python-httpx.org)륌 ì€ì¹íŽìŒ í©ëë€.
-[virtual environment](../virtual-environments.md){.internal-link target=_blank}륌 ë§ë€ê³ , íì±í ìíš ë€ì ì€ì¹íìžì. ìì:
+[ê°ì í겜](../virtual-environments.md)ì ë§ë€ê³ , íì±íí ë€ ì€ì¹íìžì. ìì:
```console
$ pip install httpx
@@ -52,7 +52,7 @@ $ pip install httpx
/// tip | í
-FastAPI ì í늬ìŒìŽì
ì ìì²ì 볎ëŽë ê² ìžìë í
ì€ížìì `async` íšì륌 ížì¶íê³ ì¶ë€ë©Ž (ì: ë¹ëêž° ë°ìŽí°ë² ìŽì€ íšì), ì¬í íí 늬ìŒì [Async Tests](../advanced/async-tests.md){.internal-link target=_blank}륌 ì°žì¡°íìžì.
+FastAPI ì í늬ìŒìŽì
ì ìì²ì 볎ëŽë ê² ìžìë í
ì€ížìì `async` íšì륌 ížì¶íê³ ì¶ë€ë©Ž (ì: ë¹ëêž° ë°ìŽí°ë² ìŽì€ íšì), ì¬í íí 늬ìŒì [ë¹ëêž° í
ì€íž](../advanced/async-tests.md)륌 ì°žì¡°íìžì.
///
@@ -64,7 +64,7 @@ FastAPI ì í늬ìŒìŽì
ì ìì²ì 볎ëŽë ê² ìžìë í
ì€ížìì
### **FastAPI** app íìŒ { #fastapi-app-file }
-[Bigger Applications](bigger-applications.md){.internal-link target=_blank}ì ë¬ì¬ë íìŒ êµ¬ì¡°ë¥Œ ê°ì§ê³ ìë ê²ìŒë¡ ê°ì íŽëŽ
ìë€.
+[ë í° ì í늬ìŒìŽì
](bigger-applications.md)ì ë¬ì¬ë íìŒ êµ¬ì¡°ë¥Œ ê°ì§ê³ ìë ê²ìŒë¡ ê°ì íŽëŽ
ìë€.
```
.
@@ -142,13 +142,13 @@ FastAPI ì í늬ìŒìŽì
ì ìì²ì 볎ëŽë ê² ìžìë í
ì€ížìì
* *í€ë*륌 ì ë¬íë €ë©Ž, `headers` íëŒë¯ží°ì `dict`륌 ì ë¬íë€.
* *ì¿ í€*륌 ì ë¬íë €ë©Ž, `cookies` íëŒë¯ží°ì `dict`륌 ì ë¬íë€.
-ë°±ìëë¡ ë°ìŽí°ë¥Œ ìŽë»ê² 볎ëŽëì§ ì 볎륌 ë ì»ìŒë €ë©Ž (`httpx` í¹ì `TestClient`륌 ìŽì©íŽì)
HTTPX documentation륌 íìžíìžì.
+ë°±ìëë¡ ë°ìŽí°ë¥Œ ìŽë»ê² 볎ëŽëì§ ì 볎륌 ë ì»ìŒë €ë©Ž (`httpx` í¹ì `TestClient`륌 ìŽì©íŽì) [HTTPX 묞ì](https://www.python-httpx.org)륌 íìžíìžì.
/// info | ì 볎
`TestClient`ë Pydantic 몚ëžìŽ ìëëŒ JSONìŒë¡ ë³íë ì ìë ë°ìŽí°ë¥Œ ë°ìµëë€.
-ë§ìœ í
ì€íž ì€ Pydantic 몚ëžì ê°ì§ê³ ìê³ í
ì€íž ì€ì ì í늬ìŒìŽì
ìŒë¡ íŽë¹ ë°ìŽí°ë¥Œ 볎ëŽê³ ì¶ë€ë©Ž, [JSON Compatible Encoder](encoder.md){.internal-link target=_blank}ì ì€ëª
ëìŽ ìë `jsonable_encoder`륌 ì¬ì©í ì ììµëë€.
+ë§ìœ í
ì€íž ì€ Pydantic 몚ëžì ê°ì§ê³ ìê³ í
ì€íž ì€ì ì í늬ìŒìŽì
ìŒë¡ íŽë¹ ë°ìŽí°ë¥Œ 볎ëŽê³ ì¶ë€ë©Ž, [JSON íží ìžìœë](encoder.md)ì ì€ëª
ëìŽ ìë `jsonable_encoder`륌 ì¬ì©í ì ììµëë€.
///
@@ -156,7 +156,7 @@ FastAPI ì í늬ìŒìŽì
ì ìì²ì 볎ëŽë ê² ìžìë í
ì€ížìì
ê·ž íìë `pytest`륌 ì€ì¹íêž°ë§ í멎 ë©ëë€.
-[virtual environment](../virtual-environments.md){.internal-link target=_blank}륌 ë§ë€ê³ , íì±í ìíš ë€ì ì€ì¹íìžì. ìì:
+[ê°ì í겜](../virtual-environments.md)ì ë§ë€ê³ , íì±í ìíš ë€ì ì€ì¹íìžì. ìì:
diff --git a/docs/ko/docs/virtual-environments.md b/docs/ko/docs/virtual-environments.md
index e6baef73b4..7c2a59f81c 100644
--- a/docs/ko/docs/virtual-environments.md
+++ b/docs/ko/docs/virtual-environments.md
@@ -22,7 +22,7 @@ Python íë¡ì ížë¥Œ ìì
í ëë **ê°ì í겜**(ëë ìŽì ì ì¬
ìŽ íìŽì§ììë **ê°ì í겜**ì ì¬ì©íë ë°©ë²ê³Œ ìë ë°©ìì ìë €ë늜ëë€.
-Python ì€ì¹ê¹ì§ í¬íšíŽ **몚ë ê²ì êŽëЬíŽì£Œë ë구**륌 ëì
í ì€ë¹ê° ëìë€ë©Ž
uv륌 ì¬ì©íŽ ë³Žìžì.
+Python ì€ì¹ê¹ì§ í¬íšíŽ **몚ë ê²ì êŽëЬíŽì£Œë ë구**륌 ëì
í ì€ë¹ê° ëìë€ë©Ž [uv](https://github.com/astral-sh/uv)륌 ì¬ì©íŽ ë³Žìžì.
///
@@ -86,7 +86,7 @@ $ python -m venv .venv
//// tab | `uv`
-
`uv`ê° ì€ì¹ëìŽ ìë€ë©Ž, ìŽë¥Œ ì¬ì©íŽ ê°ì í겜ì ìì±í ì ììµëë€.
+[`uv`](https://github.com/astral-sh/uv)ê° ì€ì¹ëìŽ ìë€ë©Ž, ìŽë¥Œ ì¬ì©íŽ ê°ì í겜ì ìì±í ì ììµëë€.
@@ -150,7 +150,7 @@ $ .venv\Scripts\Activate.ps1
//// tab | Windows Bash
-ëë Windowsìì Bash(ì:
Git Bash)륌 ì¬ì©íë 겜ì°:
+ëë Windowsìì Bash(ì: [Git Bash](https://gitforwindows.org/))륌 ì¬ì©íë 겜ì°:
@@ -216,7 +216,7 @@ C:\Users\user\code\awesome-project\.venv\Scripts\python
/// tip
-
`uv`륌 ì¬ì©íë€ë©Ž, `pip` ëì `uv`ë¡ ì€ì¹íê² ëë¯ë¡ `pip`ì ì
ê·žë ìŽëí íìê° ììµëë€. ð
+[`uv`](https://github.com/astral-sh/uv)륌 ì¬ì©íë€ë©Ž, `pip` ëì `uv`ë¡ ì€ì¹íê² ëë¯ë¡ `pip`ì ì
ê·žë ìŽëí íìê° ììµëë€. ð
///
@@ -268,7 +268,7 @@ $ python -m ensurepip --upgrade
/// tip
-
`uv`ë¡ ê°ì í겜ì ë§ë€ìë€ë©Ž, ìŽë¯ž ìëìŒë¡ ì²ëЬëìŽ ììŒë¯ë¡ ìŽ ëšê³ë 걎ëë°ìŽë ë©ëë€. ð
+[`uv`](https://github.com/astral-sh/uv)ë¡ ê°ì í겜ì ë§ë€ìë€ë©Ž, ìŽë¯ž ìëìŒë¡ ì²ëЬëìŽ ììŒë¯ë¡ ìŽ ëšê³ë 걎ëë°ìŽë ë©ëë€. ð
///
@@ -340,7 +340,7 @@ $ pip install "fastapi[standard]"
//// tab | `uv`
-
`uv`ê° ìë€ë©Ž:
+[`uv`](https://github.com/astral-sh/uv)ê° ìë€ë©Ž:
@@ -372,7 +372,7 @@ $ pip install -r requirements.txt
//// tab | `uv`
-
`uv`ê° ìë€ë©Ž:
+[`uv`](https://github.com/astral-sh/uv)ê° ìë€ë©Ž:
@@ -416,8 +416,8 @@ Hello World
ì륌 ë€ë©Ž:
-*
VS Code
-*
PyCharm
+* [VS Code](https://code.visualstudio.com/docs/python/environments#_select-and-activate-an-environment)
+* [PyCharm](https://www.jetbrains.com/help/pycharm/creating-virtual-environment.html)
/// tip
@@ -455,7 +455,7 @@ $ deactivate
## ê°ì í겜ì ì ì¬ì©íëì { #why-virtual-environments }
-FastAPIë¡ ìì
íë €ë©Ž
Pythonì ì€ì¹íŽìŒ í©ëë€.
+FastAPIë¡ ìì
íë €ë©Ž [Python](https://www.python.org/)ì ì€ì¹íŽìŒ í©ëë€.
ê·ž ë€ì FastAPIì ì¬ì©íë €ë ë€ë¥ž **íší€ì§**륌 **ì€ì¹**íŽìŒ í©ëë€.
@@ -564,7 +564,7 @@ $ pip install "fastapi[standard]"
-FastAPI ìœë륌 ëŽì ìì¶ íìŒì ë€ìŽë¡ëí©ëë€. 볎íµ
PyPIìì ë°ìµëë€.
+FastAPI ìœë륌 ëŽì ìì¶ íìŒì ë€ìŽë¡ëí©ëë€. ë³Žíµ [PyPI](https://pypi.org/project/fastapi/)ìì ë°ìµëë€.
ëí FastAPIê° ì졎íë ë€ë¥ž íší€ì§ë€ì íìŒë **ë€ìŽë¡ë**í©ëë€.
@@ -627,7 +627,7 @@ $ .venv\Scripts\Activate.ps1
//// tab | Windows Bash
-ëë Windowsìì Bash(ì:
Git Bash)륌 ì¬ì©íë 겜ì°:
+ëë Windowsìì Bash(ì: [Git Bash](https://gitforwindows.org/))륌 ì¬ì©íë 겜ì°:
@@ -639,13 +639,13 @@ $ source .venv/Scripts/activate
////
-ë€ì ëª
ë ¹ìŽë€ìì ì¬ì©í ì ìë ëªëª [í겜 ë³ì](environment-variables.md){.internal-link target=_blank}륌 ìì±íê±°ë ìì íë ê²ì ì믞í©ëë€.
+ë€ì ëª
ë ¹ìŽë€ìì ì¬ì©í ì ìë ëªëª [í겜 ë³ì](environment-variables.md)륌 ìì±íê±°ë ìì íë ê²ì ì믞í©ëë€.
ê·ž ë³ì ì€ íëê° `PATH` ë³ìì
ëë€.
/// tip
-`PATH` í겜 ë³ìì ëíŽ ë ììë³Žë €ë©Ž [í겜 ë³ì](environment-variables.md#path-environment-variable){.internal-link target=_blank} ì¹ì
ì ì°žê³ íìžì.
+`PATH` í겜 ë³ìì ëíŽ ë ììë³Žë €ë©Ž [í겜 ë³ì](environment-variables.md#path-environment-variable) ì¹ì
ì ì°žê³ íìžì.
///
@@ -846,7 +846,7 @@ I solemnly swear ðº
ê°ì í겜, íší€ì§ ì졎ì±(requirements), íë¡ì ížë¥Œ êŽëЬíë ë°©ë²ìë ë§ì **ëì**ìŽ ììµëë€.
-ì€ë¹ê° ëìê³ **íë¡ì íž ì 첎**, íší€ì§ ì졎ì±, ê°ì í겜 ë±ì **êŽëЬ**íë ë구륌 ì¬ì©íê³ ì¶ë€ë©Ž
uv륌 ì¬ì©íŽ ë³Žìêžž ê¶í©ëë€.
+ì€ë¹ê° ëìê³ **íë¡ì íž ì 첎**, íší€ì§ ì졎ì±, ê°ì í겜 ë±ì **êŽëЬ**íë ë구륌 ì¬ì©íê³ ì¶ë€ë©Ž [uv](https://github.com/astral-sh/uv)륌 ì¬ì©íŽ ë³Žìêžž ê¶í©ëë€.
`uv`ë ë§ì ìŒì í ì ììµëë€. ì륌 ë€ìŽ:
diff --git a/docs/zh-hant/docs/_llm-test.md b/docs/zh-hant/docs/_llm-test.md
index 85cfd22991..f4c1efca82 100644
--- a/docs/zh-hant/docs/_llm-test.md
+++ b/docs/zh-hant/docs/_llm-test.md
@@ -11,7 +11,7 @@
* 檢æ¥ç¿»è¯æ¯åŠæ£ç¢ºã
* åŠæéèŠïŒæ¹é²äœ çèªèšç¹å®æç€ºãéçšæç€ºïŒæè±æåæã
* ç¶åŸæåä¿®æ£ç¿»è¯äžå©äžçåé¡ïŒè®å®æçºäžå奜çè¯æã
-* éæ°ç¿»è¯ïŒäžŠä¿çé仜奜çè¯æãçæ³çµææ¯ LLM äžåå°è©²è¯æåä»»äœè®æŽãé代衚éçšæç€ºèäœ çèªèšç¹å®æç€ºå·²ç¶ç¡å¯èœå®åïŒææå®ä»å¯èœååºå¹ŸåçäŒŒéšæ©çè®æŽïŒåå æ¯
LLMs äžŠéæ±ºå®æ§æŒç®æ³ïŒã
+* éæ°ç¿»è¯ïŒäžŠä¿çé仜奜çè¯æãçæ³çµææ¯ LLM äžåå°è©²è¯æåä»»äœè®æŽãé代衚éçšæç€ºèäœ çèªèšç¹å®æç€ºå·²ç¶ç¡å¯èœå®åïŒææå®ä»å¯èœååºå¹ŸåçäŒŒéšæ©çè®æŽïŒåå æ¯[LLMs äžŠéæ±ºå®æ§æŒç®æ³](https://doublespeak.chat/#/handbook#deterministic-output)ïŒã
枬詊ïŒ
@@ -95,7 +95,7 @@ $
fastapi run
å€éšé£çµ
-* é£çµå°æš£åŒ
-* é£çµå°è
³æ¬
-* é£çµå°åç
+* [å
§éšé£çµ](index.md#installation)
+* [å€éšé£çµ](https://sqlmodel.tiangolo.com/)
+* [é£çµå°æš£åŒ](https://fastapi.tiangolo.com/css/styles.css)
+* [é£çµå°è
³æ¬](https://fastapi.tiangolo.com/js/logic.js)
+* [é£çµå°åç](https://fastapi.tiangolo.com/img/foo.jpg)
é£çµæåæè¢«ç¿»è¯ïŒé£çµäœåææåå°æçç¿»è¯çæ¬ïŒ
-* FastAPI é£çµ
+* [FastAPI é£çµ](https://fastapi.tiangolo.com/zh-hant/)
////
@@ -291,7 +291,7 @@ Hello again.
* 峿
* æšæº
* é èš
-* åå倧å°å¯«
+* åºå倧å°å¯«
* äžåå倧å°å¯«
* æäŸæçšçšåŒæå
diff --git a/docs/zh-hant/docs/advanced/additional-responses.md b/docs/zh-hant/docs/advanced/additional-responses.md
index bb2bf259bd..118c65e044 100644
--- a/docs/zh-hant/docs/advanced/additional-responses.md
+++ b/docs/zh-hant/docs/advanced/additional-responses.md
@@ -243,5 +243,5 @@ new_dict = {**old_dict, "new key": "new value"}
è¥èŠæ¥çåæäžç©¶ç«å¯ä»¥å
å«åªäºå
§å®¹ïŒäœ å¯ä»¥åè OpenAPI èŠç¯äžçéäºç« ç¯ïŒ
-* OpenAPI Responses ç©ä»¶ïŒå
¶äžå
å« `Response Object`ã
-* OpenAPI Response ç©ä»¶ïŒäœ å¯ä»¥æé裡çä»»äœå
§å®¹çŽæ¥æŸå° `responses` åæžå
§åååæäžãå
å« `description`ã`headers`ã`content`ïŒåšå
¶äžå®£åäžåçåªé«åå¥è JSON SchemasïŒã以å `links`ã
+* [OpenAPI Responses ç©ä»¶](https://github.com/OAI/OpenAPI-Specification/blob/master/versions/3.1.0.md#responses-object)ïŒå
¶äžå
å« `Response Object`ã
+* [OpenAPI Response ç©ä»¶](https://github.com/OAI/OpenAPI-Specification/blob/master/versions/3.1.0.md#response-object)ïŒäœ å¯ä»¥æé裡çä»»äœå
§å®¹çŽæ¥æŸå° `responses` åæžå
§åååæäžãå
å« `description`ã`headers`ã`content`ïŒåšå
¶äžå®£åäžåçåªé«åå¥è JSON SchemasïŒã以å `links`ã
diff --git a/docs/zh-hant/docs/advanced/additional-status-codes.md b/docs/zh-hant/docs/advanced/additional-status-codes.md
index 450a4705aa..0e5941a8d6 100644
--- a/docs/zh-hant/docs/advanced/additional-status-codes.md
+++ b/docs/zh-hant/docs/advanced/additional-status-codes.md
@@ -26,7 +26,7 @@
///
-/// note | 泚æ
+/// note | æè¡çްç¯
äœ ä¹å¯ä»¥äœ¿çš `from starlette.responses import JSONResponse`ã
@@ -38,4 +38,4 @@
åŠæäœ çŽæ¥åå³é¡å€ççæ
碌èåæïŒå®åäžæè¢«å
å«é² OpenAPI ç¶±èŠïŒAPI æä»¶ïŒäžïŒå çº FastAPI ç¡æ³äºå
ç¥éäœ æåå³ä»éºŒã
-äœäœ å¯ä»¥åšçšåŒç¢Œäžè£å
æä»¶ïŒäœ¿çšïŒ[é¡å€çåæ](additional-responses.md){.internal-link target=_blank}ã
+äœäœ å¯ä»¥åšçšåŒç¢Œäžè£å
æä»¶ïŒäœ¿çšïŒ[é¡å€çåæ](additional-responses.md)ã
diff --git a/docs/zh-hant/docs/advanced/advanced-dependencies.md b/docs/zh-hant/docs/advanced/advanced-dependencies.md
index 472cf470b1..559ca245fa 100644
--- a/docs/zh-hant/docs/advanced/advanced-dependencies.md
+++ b/docs/zh-hant/docs/advanced/advanced-dependencies.md
@@ -132,7 +132,7 @@ checker(q="somequery")
åŠæ€äžäŸïŒè©² session å°±æéæŸè³æåº«é£ç·ïŒè®å
¶ä»è«æ±å¯ä»¥äœ¿çšã
-åŠæäœ æäžåçæ
å¢ïŒéèŠåŸå«æ `yield` ççžäŸäžææ©çµæïŒè«å»ºç«äžå GitHub èšè«åé¡ïŒæè¿°äœ çå
·é«æ
å¢ïŒä»¥åçºäœææ©éé嫿 `yield` ççžäŸå°äœ æå¹«å©ã
+åŠæäœ æäžåçæ
å¢ïŒéèŠåŸå«æ `yield` ççžäŸäžææ©çµæïŒè«å»ºç«äžå [GitHub èšè«åé¡](https://github.com/fastapi/fastapi/discussions/new?category=questions)ïŒæè¿°äœ çå
·é«æ
å¢ïŒä»¥åçºäœææ©éé嫿 `yield` ççžäŸå°äœ æå¹«å©ã
åŠææä»€äººä¿¡æçæ¡äŸéèŠåšå«æ `yield` ççžäŸäžæåééïŒææèæ
®å å
¥äžç𮿰çéžé
ïŒè®äœ å¯ä»¥éžææ§åçšæåééã
@@ -144,7 +144,7 @@ checker(q="somequery")
### èæ¯ä»»åè嫿 `yield` ççžäŸïŒæè¡çŽ°ç¯ { #background-tasks-and-dependencies-with-yield-technical-details }
-åš FastAPI 0.106.0 ä¹åïŒäžå¯èœåš `yield` ä¹åŸæåºäŸå€ïŒå«æ `yield` ççžäŸççµæçšåŒç¢Œæåšåæéåºä¹åŸæå·è¡ïŒå æ€[äŸå€èçåš](../tutorial/handling-errors.md#install-custom-exception-handlers){.internal-link target=_blank} æ©å°±å·²ç¶è·å®äºã
+åš FastAPI 0.106.0 ä¹åïŒäžå¯èœåš `yield` ä¹åŸæåºäŸå€ïŒå«æ `yield` ççžäŸççµæçšåŒç¢Œæåšåæéåºä¹åŸæå·è¡ïŒå æ€[äŸå€èçåš](../tutorial/handling-errors.md#install-custom-exception-handlers) æ©å°±å·²ç¶è·å®äºã
ç¶åéæš£èšèšäž»èŠæ¯çºäºå
èš±åšèæ¯ä»»åäžäœ¿çšç±çžäŸãyieldãåºäŸçåäžçµç©ä»¶ïŒå çºçµæçšåŒç¢Œæåšèæ¯ä»»åçµæåŸæå·è¡ã
diff --git a/docs/zh-hant/docs/advanced/async-tests.md b/docs/zh-hant/docs/advanced/async-tests.md
index cb7430bf6e..639c42b7db 100644
--- a/docs/zh-hant/docs/advanced/async-tests.md
+++ b/docs/zh-hant/docs/advanced/async-tests.md
@@ -16,11 +16,11 @@
`TestClient` åšå
§éšåäºäžäºéæ³ïŒè®æåèœåšäžè¬ç `def` 枬詊åœåŒäžïŒäœ¿çšæšæº pytest äŸåŒå«é忥ç FastAPI æçšãäœç¶æååšé忥åœåŒäžäœ¿çšå®æïŒéå鿳就äžå奿äºãä¹å°±æ¯èªªïŒç¶ä»¥é忥æ¹åŒå·è¡æž¬è©ŠæïŒå°±äžèœåšæž¬è©ŠåœåŒå
§äœ¿çš `TestClient`ã
-`TestClient` æ¯å»ºç«åš HTTPX ä¹äžïŒæå¹žæåå¯ä»¥çŽæ¥äœ¿çšå®äŸæž¬è©Š APIã
+`TestClient` æ¯å»ºç«åš [HTTPX](https://www.python-httpx.org) ä¹äžïŒæå¹žæåå¯ä»¥çŽæ¥äœ¿çšå®äŸæž¬è©Š APIã
## ç¯äŸ { #example }
-äœçºç°¡å®ç¯äŸïŒè®æåèæ
®è[æŽå€§åçæçš](../tutorial/bigger-applications.md){.internal-link target=_blank}è[枬詊](../tutorial/testing.md){.internal-link target=_blank}äžæè¿°çé¡äŒŒæªæ¡çµæ§ïŒ
+äœçºç°¡å®ç¯äŸïŒè®æåèæ
®è[æŽå€§åçæçš](../tutorial/bigger-applications.md)è[枬詊](../tutorial/testing.md)äžæè¿°çé¡äŒŒæªæ¡çµæ§ïŒ
```
.
@@ -84,7 +84,7 @@ response = client.get('/')
/// warning
-åŠæäœ çæçšä»°è³Ž lifespan äºä»¶ïŒ`AsyncClient` äžæè§žçŒéäºäºä»¶ãè¥èŠç¢ºä¿å®å被觞çŒïŒè«äœ¿çš florimondmanca/asgi-lifespan ç `LifespanManager`ã
+åŠæäœ çæçšä»°è³Ž lifespan äºä»¶ïŒ`AsyncClient` äžæè§žçŒéäºäºä»¶ãè¥èŠç¢ºä¿å®å被觞çŒïŒè«äœ¿çš [florimondmanca/asgi-lifespan](https://github.com/florimondmanca/asgi-lifespan#usage) ç `LifespanManager`ã
///
@@ -94,6 +94,6 @@ response = client.get('/')
/// tip
-åŠæåšå°é忥åŒå«æŽå鲿ž¬è©Šæéå° `RuntimeError: Task attached to a different loop`ïŒäŸåŠäœ¿çš MongoDB ç MotorClient æïŒïŒè«èšåŸïŒéèŠäºä»¶è¿Žåçç©ä»¶åªæåšé忥åœåŒå
§å¯ŠäŸåïŒäŸåŠåš `@app.on_event("startup")` ååŒäžã
+åŠæåšå°é忥åŒå«æŽå鲿ž¬è©Šæéå° `RuntimeError: Task attached to a different loop`ïŒäŸåŠäœ¿çš [MongoDB ç MotorClient](https://stackoverflow.com/questions/41584243/runtimeerror-task-attached-to-a-different-loop) æïŒïŒè«èšåŸïŒéèŠäºä»¶è¿Žåçç©ä»¶åªæåšé忥åœåŒå
§å¯ŠäŸåïŒäŸåŠåš `@app.on_event("startup")` ååŒäžã
///
diff --git a/docs/zh-hant/docs/advanced/behind-a-proxy.md b/docs/zh-hant/docs/advanced/behind-a-proxy.md
index 71a0557afd..a7f4b83b33 100644
--- a/docs/zh-hant/docs/advanced/behind-a-proxy.md
+++ b/docs/zh-hant/docs/advanced/behind-a-proxy.md
@@ -16,9 +16,9 @@
代ççžéçæšé æïŒ
-* X-Forwarded-For
-* X-Forwarded-Proto
-* X-Forwarded-Host
+* [X-Forwarded-For](https://developer.mozilla.org/en-US/docs/Web/HTTP/Reference/Headers/X-Forwarded-For)
+* [X-Forwarded-Proto](https://developer.mozilla.org/en-US/docs/Web/HTTP/Reference/Headers/X-Forwarded-Proto)
+* [X-Forwarded-Host](https://developer.mozilla.org/en-US/docs/Web/HTTP/Reference/Headers/X-Forwarded-Host)
///
@@ -60,7 +60,7 @@ https://mysuperapp.com/items/
/// tip
-åŠæäœ æ³äºè§£æŽå€ HTTPS çå
§å®¹ïŒè«åèæå[éæŒ HTTPS](../deployment/https.md){.internal-link target=_blank}ã
+åŠæäœ æ³äºè§£æŽå€ HTTPS çå
§å®¹ïŒè«åèæå[éæŒ HTTPS](../deployment/https.md)ã
///
@@ -228,7 +228,7 @@ $ fastapi run main.py --forwarded-allow-ips="*" --root-path /api/v1
è«èšäœïŒäŒºæåšïŒUvicornïŒé€äºæ `root_path` å³çµŠæçšä¹å€ïŒäžææ¿å®åå
¶ä»çšéã
-äœåŠæäœ çšç芜åšååŸ http://127.0.0.1:8000/appïŒäœ æçå°äžè¬çåæïŒ
+äœåŠæäœ çšç芜åšååŸ [http://127.0.0.1:8000/app](http://127.0.0.1:8000/app) ïŒäœ æçå°äžè¬çåæïŒ
```JSON
{
@@ -251,9 +251,9 @@ Uvicorn æé æä»£ç以 `http://127.0.0.1:8000/app` äŸåå UvicornïŒè
## åšæ¬æ©äœ¿çš Traefik 枬詊 { #testing-locally-with-traefik }
-äœ å¯ä»¥åŸå®¹æå°çš Traefik åšæ¬æ©è·äžåãç§»é€è·¯åŸåç¶Žãçæž¬è©Šã
+äœ å¯ä»¥åŸå®¹æå°çš [Traefik](https://docs.traefik.io/) åšæ¬æ©è·äžåãç§»é€è·¯åŸåç¶Žãçæž¬è©Šã
-äžèŒ TraefikïŒå®æ¯äžåå®äžçå·è¡æªïŒäœ å¯ä»¥è§£å£çž®åŸçŽæ¥åšçµç«¯æ©å·è¡ã
+[äžèŒ Traefik](https://github.com/containous/traefik/releases)ïŒå®æ¯äžåå®äžçå·è¡æªïŒäœ å¯ä»¥è§£å£çž®åŸçŽæ¥åšçµç«¯æ©å·è¡ã
ç¶åŸå»ºç«äžå `traefik.toml` æªæ¡ïŒå
§å®¹åŠäžïŒ
@@ -330,7 +330,7 @@ $ fastapi run main.py --forwarded-allow-ips="*" --root-path /api/v1
### 檢æ¥åæ { #check-the-responses }
-çŸåšïŒåŠæäœ ååŸ Uvicorn çå ïŒhttp://127.0.0.1:8000/appïŒäœ æçå°äžè¬çåæïŒ
+çŸåšïŒåŠæäœ ååŸ Uvicorn çå ïŒ[http://127.0.0.1:8000/app](http://127.0.0.1:8000/app)ïŒäœ æçå°äžè¬çåæïŒ
```JSON
{
@@ -345,7 +345,7 @@ $ fastapi run main.py --forwarded-allow-ips="*" --root-path /api/v1
///
-æ¥èæéäœ¿çš Traefik å äžå
å«è·¯åŸåç¶Žç URLïŒhttp://127.0.0.1:9999/api/v1/appã
+æ¥èæéäœ¿çš Traefik å äžå
å«è·¯åŸåç¶Žç URLïŒ[http://127.0.0.1:9999/api/v1/app](http://127.0.0.1:9999/api/v1/app)ã
æåæåŸå°çžåçåæïŒ
@@ -370,13 +370,13 @@ $ fastapi run main.py --forwarded-allow-ips="*" --root-path /api/v1
ãæ£åŒãçååæ¹åŒæè©²æ¯ééæåå®çŸ©äºè·¯åŸåç¶Žç代çãå æ€ïŒåŠæåé æïŒåŠæäœ çŽæ¥éé Uvicorn äŸæçæä»¶ UIãè URL äžæ²æè©²è·¯åŸåç¶ŽïŒé£å®äžæéäœïŒå çºå®é æèŠéé代çäŸååã
-äœ å¯ä»¥åš http://127.0.0.1:8000/docs 檢æ¥ïŒ
+äœ å¯ä»¥åš [http://127.0.0.1:8000/docs](http://127.0.0.1:8000/docs) 檢æ¥ïŒ
äœåŠææåæ¹çšãæ£åŒãç URLïŒä¹å°±æ¯äœ¿çšå è `9999` ç代çãäžŠåš `/api/v1/docs`ïŒå®å°±èœæ£ç¢ºéäœäºïŒð
-äœ å¯ä»¥åš http://127.0.0.1:9999/api/v1/docs 檢æ¥ïŒ
+äœ å¯ä»¥åš [http://127.0.0.1:9999/api/v1/docs](http://127.0.0.1:9999/api/v1/docs) 檢æ¥ïŒ
@@ -433,7 +433,7 @@ $ fastapi run main.py --forwarded-allow-ips="*" --root-path /api/v1
///
-åšäœæŒ http://127.0.0.1:9999/api/v1/docs çæä»¶ UI äžçèµ·äŸæåéæš£ïŒ
+åšäœæŒ [http://127.0.0.1:9999/api/v1/docs](http://127.0.0.1:9999/api/v1/docs) çæä»¶ UI äžçèµ·äŸæåéæš£ïŒ
@@ -461,6 +461,6 @@ OpenAPI èŠæ Œäžç `servers` å±¬æ§æ¯å¯éžçã
## æèŒåæçš { #mounting-a-sub-application }
-åŠæäœ éèŠåšåæäœ¿çšå
·æ `root_path` ç代çæïŒæèŒäžååæçšïŒåŠïŒ»[åæçš - æèŒ](sub-applications.md){.internal-link target=_blank}ïŒœäžæè¿°ïŒïŒå¯ä»¥åå¹³åžžäžæš£æäœïŒæ£åŠäœ æé æç飿š£ã
+åŠæäœ éèŠåšåæäœ¿çšå
·æ `root_path` ç代çæïŒæèŒäžååæçšïŒåŠïŒ»[åæçš - æèŒ](sub-applications.md)ïŒœäžæè¿°ïŒïŒå¯ä»¥åå¹³åžžäžæš£æäœïŒæ£åŠäœ æé æç飿š£ã
FastAPI æåšå
§éšæºæ
§å°äœ¿çš `root_path`ïŒæä»¥äžåéœèœé å©éäœãâš
diff --git a/docs/zh-hant/docs/advanced/custom-response.md b/docs/zh-hant/docs/advanced/custom-response.md
index b723aa82f6..c8355937c8 100644
--- a/docs/zh-hant/docs/advanced/custom-response.md
+++ b/docs/zh-hant/docs/advanced/custom-response.md
@@ -1,52 +1,36 @@
# èªèšåæââHTMLãäž²æµãæªæ¡èå
¶ä» { #custom-response-html-stream-file-others }
-é èšæ
æ³äžïŒ**FastAPI** æäœ¿çš `JSONResponse` å³ååæã
+é èšæ
æ³äžïŒ**FastAPI** æåå³ JSON åæã
-äœ å¯ä»¥ååš[çŽæ¥åå³ Response](response-directly.md){.internal-link target=_blank} äžæç€ºïŒçŽæ¥åå³äžå `Response` äŸèŠå¯«å®ã
+äœ å¯ä»¥ååš[çŽæ¥åå³ Response](response-directly.md)äžæç€ºïŒçŽæ¥åå³äžå `Response` äŸèŠå¯«å®ã
-äœåŠæäœ çŽæ¥åå³äžå `Response`ïŒæå
¶åé¡å¥ïŒåŠ `JSONResponse`ïŒïŒè³æå°äžæè¢«èªåèœæïŒå³äœ¿äœ 宣åäº `response_model`ïŒïŒèäžæä»¶ä¹äžæèªåç¢çïŒäŸåŠïŒåšç¢çç OpenAPI äžå
å« HTTP æšé `Content-Type` çç¹å®ãmedia typeãïŒã
+äœåŠæäœ çŽæ¥åå³äžå `Response`ïŒæå
¶åé¡å¥ïŒäŸåŠ `JSONResponse`ïŒïŒè³æå°äžæè¢«èªåèœæïŒå³äœ¿äœ 宣åäº `response_model`ïŒïŒèäžæä»¶ä¹äžæèªåç¢çïŒäŸåŠïŒåšç¢çç OpenAPI äžå
å« HTTP æšé `Content-Type` çç¹å®ãmedia typeãïŒã
äœ ä¹å¯ä»¥åšãè·¯åŸæäœè£é£Ÿåšãäžäœ¿çš `response_class` åæžïŒå®£åèŠäœ¿çšç `Response`ïŒäŸåŠä»»æ `Response` åé¡å¥ïŒã
äœ åŸãè·¯åŸæäœåœåŒãåå³çå
§å®¹ïŒæè¢«æŸé²è©² `Response` äžã
-è¥è©² `Response` ç media type æ¯ JSONïŒ`application/json`ïŒïŒå `JSONResponse` è `UJSONResponse`ïŒåäœ åå³çè³ææèªåä»¥äœ åšãè·¯åŸæäœè£é£Ÿåšãäžå®£åç Pydantic `response_model` é²è¡èœæïŒèéæ¿ŸïŒã
-
/// note
è¥äœ 䜿çšçåæé¡å¥æ²æ media typeïŒFastAPI æåèšäœ çåææ²æå
§å®¹ïŒå æ€äžæåšç¢çç OpenAPI æä»¶äžèšéåææ ŒåŒã
///
-## äœ¿çš `ORJSONResponse` { #use-orjsonresponse }
-
-äŸåŠïŒè¥äœ åšè¿œæ±æèœïŒäœ å¯ä»¥å®è£äžŠäœ¿çš `orjson`ïŒäžŠå°åæèšçº `ORJSONResponse`ã
-
-å¯å
¥äœ æ³äœ¿çšç `Response` é¡å¥ïŒåé¡ïŒïŒäžŠåšãè·¯åŸæäœè£é£Ÿåšãäžå®£åå®ã
-
-å°æŒå€§ååæïŒçŽæ¥åå³ `Response` ææ¯åå³ `dict` å¿«åŸå€ã
-
-鿝å çºé èšæ
æ³äžïŒFastAPI ææª¢æ¥æ¯åé
ç®äžŠç¢ºèªå®èœè¢«åºååçº JSONïŒäœ¿çšèæåžäžèªªæççžå[JSON çžå®¹ç·šç¢Œåš](../tutorial/encoder.md){.internal-link target=_blank}ãéäœ¿äœ å¯ä»¥åå³ãä»»æç©ä»¶ãïŒäŸåŠè³æåº«æš¡åã
-
-äœåŠæäœ ç¢ºå®äœ åå³çå
§å®¹ãå¯ä»¥çš JSON åºååãïŒäœ å¯ä»¥çŽæ¥å°å®å³çµŠåæé¡å¥ïŒé¿å
FastAPI åšæäœ çåå³å
§å®¹äº€çµŠåæé¡å¥ä¹åïŒå
ç¶é `jsonable_encoder` æåž¶äŸçé¡å€éé·ã
+## JSON åæ { #json-responses }
-{* ../../docs_src/custom_response/tutorial001b_py310.py hl[2,7] *}
+FastAPI é èšåå³ JSON åæã
-/// info
-
-åæž `response_class` 乿çšäŸå®çŸ©åæçãmedia typeãã
+åŠæäœ å®£åäº[åææš¡å](../tutorial/response-model.md)ïŒFastAPI æäœ¿çš Pydantic å°è³æåºååçº JSONã
-åšæ€æ
æ³äžïŒHTTP æšé `Content-Type` æè¢«èšçº `application/json`ã
+åŠæäœ æ²æå®£ååææš¡åïŒFastAPI æäœ¿çšåš[JSON çžå®¹ç·šç¢Œåš](../tutorial/encoder.md)äžè§£éç `jsonable_encoder`ïŒäžŠå°çµææŸé² `JSONResponse`ã
-èäžå®æä»¥æ€åœ¢åŒè¢«èšéå° OpenAPI äžã
+åŠæäœ å®£åç `response_class` å
·æ JSON ç media typeïŒ`application/json`ïŒïŒå `JSONResponse`ïŒäœ åå³çè³ææèªåä»¥äœ åšãè·¯åŸæäœè£é£Ÿåšãäžå®£åçä»»äœ Pydantic `response_model` é²è¡èœæïŒèéæ¿ŸïŒãäœè³æäžæç± Pydantic çŽæ¥åºååæ JSON äœå
çµïŒåè代ä¹ïŒæå
ç¶ç± `jsonable_encoder` èœæïŒç¶åŸäº€çµŠ `JSONResponse` é¡å¥ïŒè©²é¡å¥æäœ¿çš Python æšæºç JSON åœåŒåº«å°å
¶åºååçºäœå
çµã
-///
+### JSON æèœ { #json-performance }
-/// tip
+ç°¡èèšä¹ïŒè¥äœ æ³èŠæäœ³æèœïŒè«äœ¿çš[åææš¡å](../tutorial/response-model.md)ïŒäžŠäžäžèŠåšãè·¯åŸæäœè£é£Ÿåšãäžå®£å `response_class`ã
-`ORJSONResponse` åªåš FastAPI äžå¯çšïŒåš Starlette äžäžå¯çšã
-
-///
+{* ../../docs_src/response_model/tutorial001_01_py310.py ln[15:17] hl[16] *}
## HTML åæ { #html-response }
@@ -69,7 +53,7 @@
### åå³ `Response` { #return-a-response }
-åŠ[çŽæ¥åå³ Response](response-directly.md){.internal-link target=_blank} æç€ºïŒäœ ä¹å¯ä»¥åšãè·¯åŸæäœãäžçŽæ¥åå³ä»¥èŠå¯«åæã
+åŠ[çŽæ¥åå³ Response](response-directly.md)æç€ºïŒäœ ä¹å¯ä»¥åšãè·¯åŸæäœãäžçŽæ¥åå³ä»¥èŠå¯«åæã
äžé¢ççžåç¯äŸïŒåå³ `HTMLResponse`ïŒå¯ä»¥åéæš£ïŒ
@@ -154,37 +138,11 @@ FastAPIïŒå¯Šéäžæ¯ StarletteïŒæèªåå
å« Content-Length æšé ãä¹
鿝 **FastAPI** çé èšåæïŒåŠäžæè¿°ã
-### `ORJSONResponse` { #orjsonresponse }
-
-äœ¿çš `orjson` çå¿«éæ¿ä»£ JSON åæïŒåŠäžæè¿°ã
-
-/// info
-
-ééèŠå®è£ `orjson`ïŒäŸåŠäœ¿çš `pip install orjson`ã
-
-///
-
-### `UJSONResponse` { #ujsonresponse }
-
-äœ¿çš `ujson` çæ¿ä»£ JSON åæã
-
-/// info
-
-ééèŠå®è£ `ujson`ïŒäŸåŠäœ¿çš `pip install ujson`ã
-
-///
-
-/// warning
-
-`ujson` åšèçæäºéçæ
æ³æïŒæ²é£éºŒåŽè¬¹ïŒèŒ Python å
§å»ºå¯ŠäœæŽãéšæãã
-
-///
-
-{* ../../docs_src/custom_response/tutorial001_py310.py hl[2,7] *}
+/// note | æè¡çްç¯
-/// tip
+äœåŠæäœ å®£åäºåææš¡åæåå³åå¥ïŒå°æçŽæ¥çšå®äŸæè³æåºååçº JSONïŒäžŠçŽæ¥åå³å
·ææ£ç¢º JSON media type çåæïŒèäžæäœ¿çš `JSONResponse` é¡å¥ã
-`ORJSONResponse` å¯èœæ¯æŽå¿«çæ¿ä»£æ¹æ¡ã
+鿝ååŸæäœ³æèœççæ³æ¹åŒã
///
@@ -214,31 +172,25 @@ FastAPIïŒå¯Šéäžæ¯ StarletteïŒæèªåå
å« Content-Length æšé ãä¹
### `StreamingResponse` { #streamingresponse }
-æ¥æ¶äžå async ç¢çåšæäžè¬çç¢çåšïŒç代åšïŒäžŠä»¥äž²æµæ¹åŒå³éåææ¬æã
-
-{* ../../docs_src/custom_response/tutorial007_py310.py hl[2,14] *}
-
-#### å°ã顿ªæ¡ç©ä»¶ãäœ¿çš `StreamingResponse` { #using-streamingresponse-with-file-like-objects }
+æ¥æ¶äžå async ç¢çåšæäžè¬çç¢çåšïŒç代åšïŒåž¶æ `yield` çåœåŒïŒïŒäžŠä»¥äž²æµæ¹åŒå³éåææ¬æã
-åŠæäœ æäžå顿ªæ¡ïŒfile-likeïŒç©ä»¶ïŒäŸåŠ `open()` åå³çç©ä»¶ïŒïŒäœ å¯ä»¥å»ºç«äžåç¢çåšåœåŒäŸçä»£è©²é¡æªæ¡ç©ä»¶ã
+{* ../../docs_src/custom_response/tutorial007_py310.py hl[3,16] *}
-åŠæ€äžäŸïŒäœ äžå¿
å
æå®å
šéšè®é²èšæ¶é«ïŒå°±èœå°é£åç¢çåšåœåŒå³çµŠ `StreamingResponse` 䞊åå³ã
-
-éä¹å
å«èš±å€çšæŒé²ç«¯å²åã圱åïŒåœ±é³èçççåœåŒåº«ã
+/// note | æè¡çްç¯
-{* ../../docs_src/custom_response/tutorial008_py310.py hl[2,10:12,14] *}
+äžå `async` ä»»ååªèœåšæµéæå `await` ææèœè¢«åæ¶ãåŠææ²æ `await`ïŒè©²ç¢çåšïŒåž¶æ `yield` çåœåŒïŒå°ç¡æ³è¢«æ£ç¢ºåæ¶ïŒçè³åšè«æ±åæ¶åŸä»å¯èœæçºå·è¡ã
-1. 鿝ç¢çåšåœåŒãå çºå®å
§å« `yield` é³è¿°åŒïŒæä»¥æ¯ãç¢çåšåœåŒãã
-2. éé `with` åå¡ïŒæå確ä¿åšç¢çåšåœåŒçµæåŸéé顿ªæ¡ç©ä»¶ãå æ€ïŒåšå®æå³éåæåŸå°±æééã
-3. éå `yield from` å蚎åœåŒå»ç代åçº `file_like` çæ±è¥¿ãå°æŒæ¯å被ç代å°çéšåïŒå°±æè©²éšåç¶äœæ€ç¢çåšåœåŒïŒ`iterfile`ïŒç茞åºé²è¡ `yield`ã
+å çºéåå°ç¯äŸäžéèŠä»»äœ `await` é³è¿°åŒïŒæåå å
¥ `await anyio.sleep(0)`ïŒè®äºä»¶è¿Žåææ©æèçåæ¶ã
- å æ€ïŒéæ¯äžåæãçæãå·¥äœåšå
§éšèœäº€çµŠå
¶ä»æ±è¥¿çç¢çåšåœåŒã
+å°æŒå€§åæç¡éçäž²æµäŸèªªïŒé黿ŽçºéèŠã
- éééæš£åïŒæåå¯ä»¥æå®æŸé² `with` åå¡ïŒèæ€ç¢ºä¿åšå®æåŸéé顿ªæ¡ç©ä»¶ã
+///
/// tip
-泚æïŒé裡æå䜿çšçæ¯æšæºç `open()`ïŒå®äžæ¯æŽ `async` è `await`ïŒå æ€æåçšäžè¬ç `def` äŸå®£åè·¯åŸæäœã
+èå
¶çŽæ¥åå³ `StreamingResponse`ïŒäœ å€§æŠææ³éµåŸª[è³æäž²æµ](./stream-data.md)äžçäœæ³ïŒéæš£æŽæ¹äŸ¿ïŒäžŠäžæåšåºå±€å¹«äœ èçåæ¶ã
+
+åŠæäœ èŠäž²æµ JSON LinesïŒè«åèæåžïŒ[äž²æµ JSON Lines](../tutorial/stream-json-lines.md)ã
///
@@ -267,7 +219,7 @@ FastAPIïŒå¯Šéäžæ¯ StarletteïŒæèªåå
å« Content-Length æšé ãä¹
äœ å¯ä»¥å»ºç«èªå·±çèªèšåæé¡å¥ïŒç¹Œæ¿èª `Response` 䞊å 以䜿çšã
-äŸåŠïŒåèšäœ èŠäœ¿çš `orjson`ïŒäœæ³å¥çšäžäºæªå
å«åš `ORJSONResponse` é¡å¥äžçèªèšèšå®ã
+äŸåŠïŒåèšäœ èŠäœ¿çš [`orjson`](https://github.com/ijl/orjson) 䞊å¥çšäžäºèšå®ã
åèšäœ æ³åå³çž®æäžæ ŒåŒåç JSONïŒå æ€èŠäœ¿çš orjson éžé
`orjson.OPT_INDENT_2`ã
@@ -281,7 +233,7 @@ FastAPIïŒå¯Šéäžæ¯ StarletteïŒæèªåå
å« Content-Length æšé ãä¹
{"message": "Hello World"}
```
-âŠâŠéååææåå³ïŒ
+...éååææåå³ïŒ
```json
{
@@ -291,13 +243,21 @@ FastAPIïŒå¯Šéäžæ¯ StarletteïŒæèªåå
å« Content-Length æšé ãä¹
ç¶ç¶ïŒäœ 倧æŠèœæŸå°æ¯æ ŒåŒå JSON æŽå¥œçæ¹åŒäŸå©çšéåèœåãð
+### `orjson` æåææš¡å { #orjson-or-response-model }
+
+åŠæäœ è¿œæ±æèœïŒäœ¿çš[åææš¡å](../tutorial/response-model.md) å€§æŠææ¯äœ¿çš `orjson` åææŽå¥œã
+
+æäºåææš¡åïŒFastAPI æäœ¿çš Pydantic çŽæ¥å°è³æåºååçº JSONïŒèäžéèŠåå
¶ä»æ
æ³é£æš£å
ç¶é `jsonable_encoder` ä¹é¡çäžä»æ¥é©ã
+
+èäžåšåºå±€ïŒPydantic çšäŸåºååçº JSON ç Rust æ©å¶å `orjson` çžåïŒå æ€çšåææš¡åå·²ç¶èœç²åŸæäœ³æèœã
+
## é èšåæé¡å¥ { #default-response-class }
åšå»ºç« **FastAPI** é¡å¥å¯ŠäŸæ `APIRouter` æïŒäœ å¯ä»¥æå®é èšèŠäœ¿çšåªååæé¡å¥ã
çšäŸèšå®çæ¯ `default_response_class` åæžã
-åšäžé¢çäŸåäžïŒ**FastAPI** æåšææãè·¯åŸæäœãäžé èšäœ¿çš `ORJSONResponse`ïŒèäžæ¯ `JSONResponse`ã
+åšäžé¢çäŸåäžïŒ**FastAPI** æåšææãè·¯åŸæäœãäžé èšäœ¿çš `HTMLResponse`ïŒèäžæ¯ JSONã
{* ../../docs_src/custom_response/tutorial010_py310.py hl[2,4] *}
@@ -309,4 +269,4 @@ FastAPIïŒå¯Šéäžæ¯ StarletteïŒæèªåå
å« Content-Length æšé ãä¹
## å
¶ä»æä»¶åéžé
{ #additional-documentation }
-äœ ä¹å¯ä»¥åš OpenAPI äžäœ¿çš `responses` 宣å media type èå
¶ä»èš±å€çްç¯ïŒ[åš OpenAPI äžçé¡å€åæ](additional-responses.md){.internal-link target=_blank}ã
+äœ ä¹å¯ä»¥åš OpenAPI äžäœ¿çš `responses` 宣å media type èå
¶ä»èš±å€çްç¯ïŒ[åš OpenAPI äžçé¡å€åæ](additional-responses.md)ã
diff --git a/docs/zh-hant/docs/advanced/dataclasses.md b/docs/zh-hant/docs/advanced/dataclasses.md
index d586bd6844..a18b421c42 100644
--- a/docs/zh-hant/docs/advanced/dataclasses.md
+++ b/docs/zh-hant/docs/advanced/dataclasses.md
@@ -2,11 +2,11 @@
FastAPI 建ç«åš **Pydantic** ä¹äžïŒæä¹å瀺ç¯éåŠäœäœ¿çš Pydantic æš¡åäŸå®£åè«æ±èåæã
-äœ FastAPI ä¹åæš£æ¯æŽä»¥çžåæ¹åŒäœ¿çš `dataclasses`ïŒ
+äœ FastAPI ä¹åæš£æ¯æŽä»¥çžåæ¹åŒäœ¿çš [`dataclasses`](https://docs.python.org/3/library/dataclasses.html)ïŒ
{* ../../docs_src/dataclasses_/tutorial001_py310.py hl[1,6:11,18:19] *}
-é乿以å¯è¡ïŒèŠæè¬ **Pydantic**ïŒå çºå® å
§å»ºæ¯æŽ `dataclasses`ã
+é乿以å¯è¡ïŒèŠæè¬ **Pydantic**ïŒå çºå® [å
§å»ºæ¯æŽ `dataclasses`](https://docs.pydantic.dev/latest/concepts/dataclasses/#use-of-stdlib-dataclasses-with-basemodel)ã
æä»¥ïŒå³äœ¿äžé¢ççšåŒç¢Œæ²ææç¢ºäœ¿çš PydanticïŒFastAPI ä»æäœ¿çš Pydantic å°é£äºæšæºç dataclass èœæçº Pydantic çæ¬ç dataclassã
@@ -67,7 +67,7 @@ FastAPI 建ç«åš **Pydantic** ä¹äžïŒæä¹å瀺ç¯éåŠäœäœ¿çš Pydantic
äžåŠåŸåžžïŒåš FastAPI äžäœ å¯ä»¥èŠéèŠæ··çš `def` è `async def`ã
- åŠæéèŠè€ç¿äœæçšåªåïŒè«åèæä»¶äžéæŒ [`async` è `await`](../async.md#in-a-hurry){.internal-link target=_blank} çç« ç¯ãIn a hurry?ãã
+ åŠæéèŠè€ç¿äœæçšåªåïŒè«åèæä»¶äžéæŒ [`async` è `await`](../async.md#in-a-hurry) çç« ç¯ãIn a hurry?ãã
9. éåãè·¯åŸæäœåœåŒãåå³çäžæ¯ dataclassïŒéç¶ä¹å¯ä»¥ïŒïŒèæ¯äžåå
å«å
§éšè³æçåå
žæž
å®ã
FastAPI æäœ¿çš `response_model` åæžïŒå
¶äžå
å« dataclassïŒäŸèœæåæã
@@ -80,7 +80,7 @@ FastAPI 建ç«åš **Pydantic** ä¹äžïŒæä¹å瀺ç¯éåŠäœäœ¿çš Pydantic
äœ ä¹å¯ä»¥å° `dataclasses` èå
¶ä» Pydantic æš¡åçµåãåŸå®å繌æ¿ãæå®åå
å«é²äœ çèªèšæš¡åçã
-æ³äºè§£æŽå€ïŒè«åè Pydantic éæŒ dataclasses çæä»¶ã
+æ³äºè§£æŽå€ïŒè«åè [Pydantic éæŒ dataclasses çæä»¶](https://docs.pydantic.dev/latest/concepts/dataclasses/)ã
## çæ¬ { #version }
diff --git a/docs/zh-hant/docs/advanced/events.md b/docs/zh-hant/docs/advanced/events.md
index e5c0afe48f..7def525fa6 100644
--- a/docs/zh-hant/docs/advanced/events.md
+++ b/docs/zh-hant/docs/advanced/events.md
@@ -150,11 +150,11 @@ async with lifespan(app):
絊æèè¶£éœç çå奜äžé»æè¡çްç¯ãð€
-åšåºå±€ç ASGI æè¡èŠç¯äžïŒéå±¬æŒ Lifespan Protocol çäžéšåïŒäžŠå®çŸ©äº `startup` è `shutdown` å
©çš®äºä»¶ã
+åšåºå±€ç ASGI æè¡èŠç¯äžïŒéå±¬æŒ [Lifespan Protocol](https://asgi.readthedocs.io/en/latest/specs/lifespan.html) çäžéšåïŒäžŠå®çŸ©äº `startup` è `shutdown` å
©çš®äºä»¶ã
/// info
-äœ å¯ä»¥åš Starlette ç Lifespan æä»¶ è®å°æŽå€éæŒ Starlette `lifespan` èçåšçè³èšã
+äœ å¯ä»¥åš [Starlette ç Lifespan æä»¶](https://www.starlette.dev/lifespan/) è®å°æŽå€éæŒ Starlette `lifespan` èçåšçè³èšã
ä¹å
å«åŠäœèçå¯åšçšåŒå
¶ä»åå䜿çšç lifespan çæ
ã
@@ -162,4 +162,4 @@ async with lifespan(app):
## åæçšçšåŒ { #sub-applications }
-ðš è«èšäœïŒéäºçåœé±æäºä»¶ïŒstartup è shutdownïŒåªæåšäž»æçšçšåŒäžå·è¡ïŒäžæåš[åæçšçšåŒ - æèŒ](sub-applications.md){.internal-link target=_blank}äžå·è¡ã
+ðš è«èšäœïŒéäºçåœé±æäºä»¶ïŒstartup è shutdownïŒåªæåšäž»æçšçšåŒäžå·è¡ïŒäžæåš[åæçšçšåŒ - æèŒ](sub-applications.md)äžå·è¡ã
diff --git a/docs/zh-hant/docs/advanced/generate-clients.md b/docs/zh-hant/docs/advanced/generate-clients.md
index 8d374566cd..c069a8034f 100644
--- a/docs/zh-hant/docs/advanced/generate-clients.md
+++ b/docs/zh-hant/docs/advanced/generate-clients.md
@@ -8,11 +8,11 @@
## éæº SDK ç¢çåš { #open-source-sdk-generators }
-å
¶äžäžåçžç¶è¬çšçéžææ¯ OpenAPI GeneratorïŒå®æ¯æŽ**å€çš®çšåŒèªèš**ïŒäžŠèœåŸäœ ç OpenAPI èŠæ Œç¢ç SDKã
+å
¶äžäžåçžç¶è¬çšçéžææ¯ [OpenAPI Generator](https://openapi-generator.tech/)ïŒå®æ¯æŽ**å€çš®çšåŒèªèš**ïŒäžŠèœåŸäœ ç OpenAPI èŠæ Œç¢ç SDKã
-éå° **TypeScript çšæ¶ç«¯**ïŒHey API æ¯å°éæé çè§£æ±ºæ¹æ¡ïŒçº TypeScript çæ
ç³»æäŸæäœ³åçé«é©ã
+éå° **TypeScript çšæ¶ç«¯**ïŒ[Hey API](https://heyapi.dev/) æ¯å°éæé çè§£æ±ºæ¹æ¡ïŒçº TypeScript çæ
ç³»æäŸæäœ³åçé«é©ã
-äœ å¯ä»¥åš OpenAPI.Tools æŸå°æŽå€ SDK ç¢çåšã
+äœ å¯ä»¥åš [OpenAPI.Tools](https://openapi.tools/#sdk) æŸå°æŽå€ SDK ç¢çåšã
/// tip
@@ -24,15 +24,15 @@ FastAPI æèªåç¢ç **OpenAPI 3.1** èŠæ ŒïŒå æ€äœ 䜿çšçä»»äœå·¥å
·
æ¬ç¯éé»ä»ç޹ç±èŽå© FastAPI çå
¬åžæäŸç**åµææ¯æ**è**å
¬åžç¶é**çè§£æ±ºæ¹æ¡ãéäºç¢ååšé«å質çèªåç¢ç SDK ä¹å€ïŒéæäŸ**é¡å€åèœ**è**æŽå**ã
-éé âš [**èŽå© FastAPI**](../help-fastapi.md#sponsor-the-author){.internal-link target=_blank} âšïŒéäºå
¬åžå¹«å©ç¢ºä¿æ¡æ¶èå
¶**çæ
ç³»**ç¶æå¥åº·äž**æ°žçº**ã
+éé âš [**èŽå© FastAPI**](../help-fastapi.md#sponsor-the-author) âšïŒéäºå
¬åžå¹«å©ç¢ºä¿æ¡æ¶èå
¶**çæ
ç³»**ç¶æå¥åº·äž**æ°žçº**ã
ä»åçèŽå©ä¹å±çŸå° FastAPI **瀟矀**ïŒäœ ïŒçé«åºŠæ¿è«ŸïŒäžå
éå¿æäŸ**åªè¯æå**ïŒä¹æ¯æ **FastAPI** äœçºäžå**ç©©å¥äžè¬åçæ¡æ¶**ãð
äŸåŠïŒäœ å¯ä»¥å詊ïŒ
-* Speakeasy
-* Stainless
-* liblab
+* [Speakeasy](https://speakeasy.com/editor?utm_source=fastapi+repo&utm_medium=github+sponsorship)
+* [Stainless](https://www.stainless.com/?utm_source=fastapi&utm_medium=referral)
+* [liblab](https://developers.liblab.com/tutorials/sdk-for-fastapi?utm_source=fastapi)
å
¶äžæäºæ¹æ¡ä¹å¯èœæ¯éæºææäŸå
è²»æ¹æ¡ïŒè®äœ äžéè²¡åæ¿è«Ÿå°±èœè©Šçšãå
¶ä»åæ¥ç SDK ç¢çåšä¹äžå°ïŒäœ å¯ä»¥åšç¶²è·¯äžæŸå°ãð€
@@ -66,7 +66,7 @@ npx @hey-api/openapi-ts -i http://localhost:8000/openapi.json -o src/client
éæåš `./src/client` ç¢çäžå TypeScript SDKã
-äœ å¯ä»¥åšä»åçç¶²ç«äºè§£åŠäœå®è£ `@hey-api/openapi-ts`ïŒä»¥åé±è®ç¢çç茞åºå
§å®¹ã
+äœ å¯ä»¥åšä»åçç¶²ç«äºè§£åŠäœ[å®è£ `@hey-api/openapi-ts`](https://heyapi.dev/openapi-ts/get-started)ïŒä»¥åé±è®[ç¢çç茞åºå
§å®¹](https://heyapi.dev/openapi-ts/output)ã
### äœ¿çš SDK { #using-the-sdk }
@@ -121,7 +121,7 @@ npx @hey-api/openapi-ts -i http://localhost:8000/openapi.json -o src/client
ItemsService.createItemItemsPost({name: "Plumbus", price: 5})
```
-âŠâŠé£æ¯å çºçšæ¶ç«¯ç¢çåšå°æ¯å *è·¯åŸæäœ* éœäœ¿çš OpenAPI å
§éšç**æäœ IDïŒoperation IDïŒ**ã
+...飿¯å çºçšæ¶ç«¯ç¢çåšå°æ¯å *è·¯åŸæäœ* éœäœ¿çš OpenAPI å
§éšç**æäœ IDïŒoperation IDïŒ**ã
OpenAPI èŠæ±æ¯åæäœ ID åšææ *è·¯åŸæäœ* ä¹éå¿
é å¯äžïŒå æ€ FastAPI æçš**åœåŒåçš±**ã**è·¯åŸ**è **HTTP æ¹æ³/æäœ**äŸç¢ç該æäœ IDïŒåŠæ€äŸ¿èœç¢ºä¿æäœ ID çå¯äžæ§ã
diff --git a/docs/zh-hant/docs/advanced/index.md b/docs/zh-hant/docs/advanced/index.md
index cfbc17afec..9b1cb539ae 100644
--- a/docs/zh-hant/docs/advanced/index.md
+++ b/docs/zh-hant/docs/advanced/index.md
@@ -2,13 +2,13 @@
## æŽå€åèœ { #additional-features }
-äž»èŠç[æåž - 䜿çšè
æå](../tutorial/index.md){.internal-link target=_blank} æè¶³ä»¥åž¶äœ å¿«éç芜 **FastAPI** çæææ žå¿åèœã
+äž»èŠç[æåž - 䜿çšè
æå](../tutorial/index.md) æè¶³ä»¥åž¶äœ å¿«éç芜 **FastAPI** çæææ žå¿åèœã
åšæ¥äžäŸçç« ç¯äžïŒäœ æçå°å
¶ä»éžé
ãèšå®ïŒä»¥åæŽå€åèœã
/// tip
-æ¥äžäŸçç« ç¯äžäžå®ãé²éãã
+æ¥äžäŸçç« ç¯**äžäžå®æ¯ãé²éã**ã
èäžå°æŒäœ çäœ¿çšæ
å¢ïŒè§£æ³åŸå¯èœå°±åšå
¶äžæäžç¯ã
@@ -16,6 +16,6 @@
## å
é±è®æåž { #read-the-tutorial-first }
-åªèŠææ¡äž»èŠ[æåž - 䜿çšè
æå](../tutorial/index.md){.internal-link target=_blank} çå
§å®¹ïŒäœ å°±èœäœ¿çš **FastAPI** ç倧倿žåèœã
+åªèŠææ¡äž»èŠ[æåž - 䜿çšè
æå](../tutorial/index.md) çå
§å®¹ïŒäœ å°±èœäœ¿çš **FastAPI** ç倧倿žåèœã
æ¥äžäŸçç« ç¯ä¹åèšäœ å·²ç¶è®éïŒäžŠå·²äºè§£é£äºäž»èŠè§å¿µã
diff --git a/docs/zh-hant/docs/advanced/json-base64-bytes.md b/docs/zh-hant/docs/advanced/json-base64-bytes.md
new file mode 100644
index 0000000000..9f1ecfa2ea
--- /dev/null
+++ b/docs/zh-hant/docs/advanced/json-base64-bytes.md
@@ -0,0 +1,63 @@
+# äœ¿çš Base64 衚瀺äœå
çµç JSON { #json-with-bytes-as-base64 }
+
+åŠæäœ çæçšéèŠæ¶çŒ JSON è³æïŒäœå
¶äžéèŠå
å«äºé²äœè³æïŒäœ å¯ä»¥å°å®ä»¥ base64 線碌ã
+
+## Base64 èæªæ¡ { #base64-vs-files }
+
+è«å
èæ
®æ¯åŠèœçš [è«æ±æªæ¡](../tutorial/request-files.md) äŸäžå³äºé²äœè³æïŒäžŠçš [èªèšåæ - FileResponse](./custom-response.md#fileresponse--fileresponse-) äŸå³éäºé²äœè³æïŒèäžæ¯æå®åç·šç¢Œé² JSONã
+
+JSON åªèœå
å« UTF-8 線碌çåäž²ïŒå æ€ç¡æ³çŽæ¥å
å«åå§äœå
çµã
+
+Base64 å¯ä»¥æäºé²äœè³æç·šç¢Œæåäž²ïŒäœçºæ€æäœ¿çšæ¯åå§äºé²äœè³ææŽå€çåå
ïŒå æ€éåžžæ¯çŽæ¥äœ¿çšæªæ¡äŸåŸæ²é£éºŒææçã
+
+åªæåšç¢ºå¯Šå¿
é æäºé²äœè³æå
å«åš JSON 裡ïŒäžç¡æ³æ¹çšæªæ¡æïŒæäœ¿çš base64ã
+
+## Pydantic `bytes` { #pydantic-bytes }
+
+äœ å¯ä»¥å®£å嫿 `bytes` æ¬äœç Pydantic æš¡åïŒäžŠåšæš¡åèšå®äžäœ¿çš `val_json_bytes`ïŒäœ¿å
¶åšé©è茞å
¥ç JSON è³ææäœ¿çš base64ïŒåšé©èéçšäžïŒå®æå° base64 å䞲解碌çºäœå
çµã
+
+{* ../../docs_src/json_base64_bytes/tutorial001_py310.py ln[1:9,29:35] hl[9] *}
+
+åŠæäœ æ¥ç `/docs`ïŒæçå°æ¬äœ `data` éèŠ base64 線碌çäœå
çµïŒ
+
+
+

+
+
+äœ å¯ä»¥çŒéåŠäžçè«æ±ïŒ
+
+```json
+{
+ "description": "Some data",
+ "data": "aGVsbG8="
+}
+```
+
+/// tip
+
+`aGVsbG8=` æ¯ `hello` ç base64 線碌ã
+
+///
+
+æ¥è Pydantic æå°è©² base64 å䞲解碌ïŒäžŠåšæš¡åç `data` æ¬äœäžæäŸåå§äœå
çµã
+
+äœ ææ¶å°é¡äŒŒä»¥äžçåæïŒ
+
+```json
+{
+ "description": "Some data",
+ "content": "hello"
+}
+```
+
+## Pydantic `bytes` çšæŒèŒžåºè³æ { #pydantic-bytes-for-output-data }
+
+äœ ä¹å¯ä»¥åšæš¡åèšå®äžæé
`ser_json_bytes` äœ¿çš `bytes` æ¬äœäŸèç茞åºè³æïŒç¶ç¢ç JSON åææïŒPydantic æå°äœå
çµä»¥ base64 é²è¡åºååã
+
+{* ../../docs_src/json_base64_bytes/tutorial001_py310.py ln[1:2,12:16,29,38:41] hl[16] *}
+
+## Pydantic `bytes` çšæŒèŒžå
¥è茞åºè³æ { #pydantic-bytes-for-input-and-output-data }
+
+ç¶ç¶ïŒäœ ä¹å¯ä»¥äœ¿çšåäžå以 base64 èšå®çæš¡åïŒåæèç茞å
¥ïŒä»¥ `val_json_bytes` é©èïŒè茞åºïŒä»¥ `ser_json_bytes` åºååïŒç JSON è³æã
+
+{* ../../docs_src/json_base64_bytes/tutorial001_py310.py ln[1:2,19:26,29,44:46] hl[23:26] *}
diff --git a/docs/zh-hant/docs/advanced/middleware.md b/docs/zh-hant/docs/advanced/middleware.md
index 80cda345c3..d8a53394c7 100644
--- a/docs/zh-hant/docs/advanced/middleware.md
+++ b/docs/zh-hant/docs/advanced/middleware.md
@@ -1,8 +1,8 @@
# é²éäžä»è»é« { #advanced-middleware }
-åšäž»èŠæåžäžäœ å·²åžéåŠäœå°[èªèšäžä»è»é«](../tutorial/middleware.md){.internal-link target=_blank}å å
¥å°äœ çæçšçšåŒã
+åšäž»èŠæåžäžäœ å·²åžéåŠäœå°[èªèšäžä»è»é«](../tutorial/middleware.md)å å
¥å°äœ çæçšçšåŒã
-äœ ä¹è®éåŠäœäœ¿çš `CORSMiddleware` èç [CORS](../tutorial/cors.md){.internal-link target=_blank}ã
+äœ ä¹è®éåŠäœèç [äœ¿çš `CORSMiddleware` ç CORS](../tutorial/cors.md)ã
æ¬ç¯å°ç€ºç¯åŠäœäœ¿çšå
¶ä»äžä»è»é«ã
@@ -91,7 +91,7 @@ app.add_middleware(UnicornMiddleware, some_config="rainbow")
äŸåŠïŒ
-- Uvicorn ç `ProxyHeadersMiddleware`
-- MessagePack
+- [Uvicorn ç `ProxyHeadersMiddleware`](https://github.com/encode/uvicorn/blob/master/uvicorn/middleware/proxy_headers.py)
+- [MessagePack](https://github.com/florimondmanca/msgpack-asgi)
-æ³çè§£æŽå€å¯çšçäžä»è»é«ïŒè«åè Starlette çäžä»è»é«æä»¶ è ASGI ç²Ÿéžæž
å®ã
+æ³çè§£æŽå€å¯çšçäžä»è»é«ïŒè«åè [Starlette çäžä»è»é«æä»¶](https://www.starlette.dev/middleware/) è [ASGI ç²Ÿéžæž
å®](https://github.com/florimondmanca/awesome-asgi)ã
diff --git a/docs/zh-hant/docs/advanced/openapi-callbacks.md b/docs/zh-hant/docs/advanced/openapi-callbacks.md
index b1a16be249..3b01f42016 100644
--- a/docs/zh-hant/docs/advanced/openapi-callbacks.md
+++ b/docs/zh-hant/docs/advanced/openapi-callbacks.md
@@ -35,7 +35,7 @@
/// tip
-`callback_url` æ¥è©¢åæžäœ¿çšçæ¯ Pydantic ç Url åå¥ã
+`callback_url` æ¥è©¢åæžäœ¿çšçæ¯ Pydantic ç [Url](https://docs.pydantic.dev/latest/api/networks/) åå¥ã
///
@@ -66,7 +66,7 @@ httpx.post(callback_url, json={"description": "Invoice paid", "paid": True})
寊éçååŒå°±æ¯äžå HTTP è«æ±ã
-ç¶äœ èªå·±å¯ŠäœååŒæïŒå¯ä»¥äœ¿çšåæ¯ HTTPX æ Requestsã
+ç¶äœ èªå·±å¯ŠäœååŒæïŒå¯ä»¥äœ¿çšåæ¯ [HTTPX](https://www.python-httpx.org) æ [Requests](https://requests.readthedocs.io/)ã
///
@@ -106,11 +106,11 @@ httpx.post(callback_url, json={"description": "Invoice paid", "paid": True})
åäžè¬ãè·¯åŸæäœãçžæ¯æå
©åäž»èŠå·®ç°ïŒ
* äžéèŠä»»äœå¯ŠéçšåŒç¢ŒïŒå çºäœ çæçšæ°žé äžæåŒå«é段çšåŒãå®åªçšäŸæä»¶åãå€éš APIããå æ€åœåŒå¯ä»¥åªæ `pass`ã
-* ãè·¯åŸãå¯ä»¥å
å«äžå OpenAPI 3 衚éåŒïŒèŠäžæïŒïŒå¯äœ¿çšåæžèåå§éå°ãäœ ç APIãçè«æ±äžçéšåæ¬äœã
+* ãè·¯åŸãå¯ä»¥å
å«äžå [OpenAPI 3 衚éåŒ](https://github.com/OAI/OpenAPI-Specification/blob/master/versions/3.1.0.md#key-expression)ïŒèŠäžæïŒïŒå¯äœ¿çšåæžèåå§éå°ãäœ ç APIãçè«æ±äžçéšåæ¬äœã
### ååŒè·¯åŸè¡šéåŒ { #the-callback-path-expression }
-ååŒçãè·¯åŸãå¯ä»¥å
å«äžå OpenAPI 3 衚éåŒïŒèœåŒçšåæ¬éå°ãäœ ç APIãçè«æ±äžçéšåå
§å®¹ã
+ååŒçãè·¯åŸãå¯ä»¥å
å«äžå [OpenAPI 3 衚éåŒ](https://github.com/OAI/OpenAPI-Specification/blob/master/versions/3.1.0.md#key-expression)ïŒèœåŒçšåæ¬éå°ãäœ ç APIãçè«æ±äžçéšåå
§å®¹ã
åšéåäŸåäžïŒå®æ¯äžå `str`ïŒ
@@ -179,7 +179,7 @@ https://www.external.org/events/invoices/2expen51ve
### æª¢æ¥æä»¶ { #check-the-docs }
-çŸåšäœ å¯ä»¥ååæçšïŒäžŠååŸ http://127.0.0.1:8000/docsã
+çŸåšäœ å¯ä»¥ååæçšïŒäžŠååŸ [http://127.0.0.1:8000/docs](http://127.0.0.1:8000/docs)ã
äœ æåšæä»¶äžçå°äœ çãè·¯åŸæäœãå
å«äžåãCallbacksãåå¡ïŒé¡¯ç€ºãå€éš APIãæè©²é·ä»éºŒæš£åïŒ
diff --git a/docs/zh-hant/docs/advanced/openapi-webhooks.md b/docs/zh-hant/docs/advanced/openapi-webhooks.md
index ef52c3884f..18206c447b 100644
--- a/docs/zh-hant/docs/advanced/openapi-webhooks.md
+++ b/docs/zh-hant/docs/advanced/openapi-webhooks.md
@@ -48,7 +48,7 @@ Webhook åèœèª OpenAPI 3.1.0 èµ·æäŸïŒFastAPI `0.99.0` 以äžçæ¬æ¯æŽ
### æ¥çæä»¶ { #check-the-docs }
-çŸåšäœ å¯ä»¥ååæçšïŒç¶åŸååŸ http://127.0.0.1:8000/docsã
+çŸåšäœ å¯ä»¥ååæçšïŒç¶åŸååŸ [http://127.0.0.1:8000/docs](http://127.0.0.1:8000/docs)ã
äœ æåšæä»¶äžçå°äžè¬çè·¯åŸæäœïŒåŠå€éæäžäº webhookïŒ
diff --git a/docs/zh-hant/docs/advanced/path-operation-advanced-configuration.md b/docs/zh-hant/docs/advanced/path-operation-advanced-configuration.md
index 4f25eb9878..f1607a1da5 100644
--- a/docs/zh-hant/docs/advanced/path-operation-advanced-configuration.md
+++ b/docs/zh-hant/docs/advanced/path-operation-advanced-configuration.md
@@ -60,7 +60,7 @@
äœ ä¹å¯ä»¥å®£åé¡å€çåæåå
¶æš¡åãçæ
碌çã
-æä»¶äžæå®æŽç« ç¯èªªæïŒè«èŠ [OpenAPI äžçé¡å€åæ](additional-responses.md){.internal-link target=_blank}ã
+æä»¶äžæå®æŽç« ç¯èªªæïŒè«èŠ [OpenAPI äžçé¡å€åæ](additional-responses.md)ã
## OpenAPI é¡å€è³èš { #openapi-extra }
@@ -68,7 +68,7 @@
/// note | æè¡çްç¯
-åš OpenAPI èŠæ ŒäžïŒéçš±çº Operation ç©ä»¶ã
+åš OpenAPI èŠæ ŒäžïŒéçš±çº [Operation ç©ä»¶](https://github.com/OAI/OpenAPI-Specification/blob/main/versions/3.0.3.md#operation-object)ã
///
@@ -82,7 +82,7 @@
鿝äžåèŒäœéçæŽå
ä»é¢ã
-åŠæäœ åªéèŠå®£åé¡å€åæïŒæŽæ¹äŸ¿çæ¹åŒæ¯äœ¿çš [OpenAPI äžçé¡å€åæ](additional-responses.md){.internal-link target=_blank}ã
+åŠæäœ åªéèŠå®£åé¡å€åæïŒæŽæ¹äŸ¿çæ¹åŒæ¯äœ¿çš [OpenAPI äžçé¡å€åæ](additional-responses.md)ã
///
diff --git a/docs/zh-hant/docs/advanced/response-change-status-code.md b/docs/zh-hant/docs/advanced/response-change-status-code.md
index 4b8d459ca2..31b688512e 100644
--- a/docs/zh-hant/docs/advanced/response-change-status-code.md
+++ b/docs/zh-hant/docs/advanced/response-change-status-code.md
@@ -1,6 +1,6 @@
# åæ - è®æŽçæ
碌 { #response-change-status-code }
-äœ å¯èœå·²ç¶è®éïŒå¯ä»¥èšå®é èšç[åæçæ
碌](../tutorial/response-status-code.md){.internal-link target=_blank}ã
+äœ å¯èœå·²ç¶è®éïŒå¯ä»¥èšå®é èšç[åæçæ
碌](../tutorial/response-status-code.md)ã
äœæäºæ
æ³äœ éèŠåå³èé èšäžåççæ
碌ã
@@ -26,6 +26,6 @@
è¥äœ 宣åäº `response_model`ïŒå®ä»æè¢«çšäŸéæ¿ŸäžŠèœæäœ åå³çç©ä»¶ã
-FastAPI æäœ¿çšé£åã*æ«æç*ãåæäŸååŸçæ
碌ïŒä»¥å Cookies åæšé ïŒïŒäžŠå°å®åæŸå
¥æçµåæäžïŒæçµåæå
å«äœ åå³çåŒïŒäžæè¢«ä»»äœ `response_model` éæ¿Ÿã
+**FastAPI** æäœ¿çšé£åã*æ«æç*ãåæäŸååŸçæ
碌ïŒä»¥å Cookies åæšé ïŒïŒäžŠå°å®åæŸå
¥æçµåæäžïŒæçµåæå
å«äœ åå³çåŒïŒäžæè¢«ä»»äœ `response_model` éæ¿Ÿã
äœ ä¹å¯ä»¥åšçžäŸæ§ïŒdependenciesïŒäžå®£å `Response` åæžïŒäžŠåšå
¶äžèšå®çæ
碌ãäœè«æ³šæïŒæåŸè¢«èšå®çåŒæçæã
diff --git a/docs/zh-hant/docs/advanced/response-cookies.md b/docs/zh-hant/docs/advanced/response-cookies.md
index b7225d571c..2ba14c3f6f 100644
--- a/docs/zh-hant/docs/advanced/response-cookies.md
+++ b/docs/zh-hant/docs/advanced/response-cookies.md
@@ -20,7 +20,7 @@ FastAPI æäœ¿çšé£åæ«æç `Response` ååº CookieïŒä»¥åæšé èç
ç¶äœ åšçšåŒç¢ŒäžçŽæ¥åå³ `Response` æïŒä¹å¯ä»¥å»ºç« Cookieã
-èŠé麌åïŒäœ å¯ä»¥äŸç
§ [çŽæ¥åå³ Response](response-directly.md){.internal-link target=_blank} äžç說æå»ºç«äžååæã
+èŠé麌åïŒäœ å¯ä»¥äŸç
§ [çŽæ¥åå³ Response](response-directly.md) äžç說æå»ºç«äžååæã
æ¥èåšå
¶äžèšå® CookieïŒç¶åŸåå³å®ïŒ
@@ -48,4 +48,4 @@ FastAPI æäœ¿çšé£åæ«æç `Response` ååº CookieïŒä»¥åæšé èç
///
-æ³æ¥çææå¯çšçåæžèéžé
ïŒè«åé± Starlette æä»¶ã
+æ³æ¥çææå¯çšçåæžèéžé
ïŒè«åé± [Starlette æä»¶](https://www.starlette.dev/responses/#set-cookie)ã
diff --git a/docs/zh-hant/docs/advanced/response-directly.md b/docs/zh-hant/docs/advanced/response-directly.md
index 5603548934..16face2612 100644
--- a/docs/zh-hant/docs/advanced/response-directly.md
+++ b/docs/zh-hant/docs/advanced/response-directly.md
@@ -2,19 +2,23 @@
ç¶äœ 建ç«äžå **FastAPI** çè·¯åŸæäœ (path operation) æïŒéåžžå¯ä»¥åŸäžåå³ä»»äœè³æïŒ`dict`ã`list`ãPydantic æš¡åãè³æåº«æš¡åçã
-é èšæ
æ³äžïŒ**FastAPI** æäœ¿çšåš[JSON çžå®¹ç·šç¢Œåš](../tutorial/encoder.md){.internal-link target=_blank}äžèªªæç `jsonable_encoder`ïŒèªåå°åå³åŒèœçº JSONã
+åŠæäœ å®£åäº [åææš¡å](../tutorial/response-model.md)ïŒFastAPI æçš Pydantic å°è³æåºååçº JSONã
-ç¶åŸåšå¹åŸïŒå®ææéäºè JSON çžå®¹çè³æïŒäŸåŠ `dict`ïŒæŸé² `JSONResponse`ïŒçšäŸæåæå³åçµŠçšæ¶ç«¯ã
+åŠæäœ æ²æå®£ååææš¡åïŒFastAPI æäœ¿çšåš[JSON çžå®¹ç·šç¢Œåš](../tutorial/encoder.md)äžèªªæç `jsonable_encoder`ïŒäžŠæå®æŸé² `JSONResponse`ã
äœäœ ä¹å¯ä»¥çŽæ¥åŸè·¯åŸæäœåå³ `JSONResponse`ã
-äŸåŠïŒç¶äœ éèŠåå³èªèšç headers æ cookies æå°±åŸæçšã
+/// tip
+
+éåžžäœ¿çš [åææš¡å](../tutorial/response-model.md) æææŽå¥œçæèœïŒå çºé£æš£æåš Rust ç«¯äœ¿çš Pydantic äŸåºååè³æïŒèäžæ¯çŽæ¥åå³ `JSONResponse`ã
+
+///
## åå³ `Response` { #return-a-response }
å
¶å¯ŠïŒäœ å¯ä»¥åå³ä»»äœ `Response`ïŒæå
¶ä»»äœåé¡å¥ã
-/// tip
+/// info
`JSONResponse` æ¬èº«å°±æ¯ `Response` çåé¡å¥ã
@@ -26,6 +30,8 @@
é絊äºäœ åŸå€§çåœæ§ãäœ å¯ä»¥åå³ä»»äœè³æåå¥ãèŠå¯«ä»»äœè³æå®£åæé©èçã
+åæä¹åž¶äŸäºåŸå€§ç責任ãäœ å¿
é 確ä¿äœ åå³çè³ææ¯æ£ç¢ºçãæ ŒåŒæ£ç¢ºãå¯è¢«åºååçã
+
## åš `Response` äžäœ¿çš `jsonable_encoder` { #using-the-jsonable-encoder-in-a-response }
å çº **FastAPI** äžæå°äœ åå³ç `Response` åä»»äœæŽåïŒäœ éèŠèªè¡ç¢ºä¿å®çå
§å®¹å·²ç¶æºå奜ã
@@ -50,16 +56,28 @@
çŸåšäŸççåŠäœçšå®äŸåå³èªèšåæã
-åèšäœ æ³èŠåå³äžå XML åæã
+åèšäœ æ³èŠåå³äžå [XML](https://en.wikipedia.org/wiki/XML) åæã
äœ å¯ä»¥æ XML å
§å®¹æŸé²äžååäž²ïŒæå®æŸé² `Response`ïŒç¶åŸåå³å®ïŒ
{* ../../docs_src/response_directly/tutorial002_py310.py hl[1,18] *}
+## åææš¡ååŠäœéäœ { #how-a-response-model-works }
+
+ç¶äœ åšè·¯åŸæäœäžå®£å [åææš¡å - åå³åå¥](../tutorial/response-model.md) æïŒ**FastAPI** æçš Pydantic å°è³æåºååçº JSONã
+
+{* ../../docs_src/response_model/tutorial001_01_py310.py hl[16,21] *}
+
+ç±æŒéæåš Rust 端çŒçïŒæèœææ¯çšäžè¬ç Python è `JSONResponse` é¡å¥äŸå®æå¥œåŸå€ã
+
+ç¶äœ¿çš `response_model` æåå³å奿ïŒFastAPI äžæäœ¿çš `jsonable_encoder` äŸèœæè³æïŒé£æèŒæ
¢ïŒïŒä¹äžæäœ¿çš `JSONResponse` é¡å¥ã
+
+çžåå°ïŒå®æåçšçšåææš¡åïŒæåå³åå¥ïŒéé Pydantic ç¢çç JSON äœå
çµïŒäžŠçŽæ¥åå³å
·åæ£ç¢º JSON åªé«åå¥ïŒ`application/json`ïŒç `Response`ã
+
## 泚æäºé
{ #notes }
ç¶äœ çŽæ¥åå³ `Response` æïŒå
¶è³æäžæèªå被é©èãèœæïŒåºååïŒææä»¶åã
-äœäœ ä»ç¶å¯ä»¥äŸç
§[åš OpenAPI äžçé¡å€åæ](additional-responses.md){.internal-link target=_blank}äžç說æé²è¡æä»¶åã
+äœäœ ä»ç¶å¯ä»¥äŸç
§[åš OpenAPI äžçé¡å€åæ](additional-responses.md)äžç說æé²è¡æä»¶åã
åšåŸçºç« ç¯äžïŒäœ æçå°åŠäœåšä»ä¿æèªåè³æèœæãæä»¶åççåæïŒäœ¿çšïŒå®£åéäºèªèšç `Response`ã
diff --git a/docs/zh-hant/docs/advanced/response-headers.md b/docs/zh-hant/docs/advanced/response-headers.md
index 6e32ca1b39..4f7494a8b3 100644
--- a/docs/zh-hant/docs/advanced/response-headers.md
+++ b/docs/zh-hant/docs/advanced/response-headers.md
@@ -20,7 +20,7 @@ FastAPI æäœ¿çšé£åæ«ææ§çåæäŸæ·åæšé ïŒéæ Cookie èç
ç¶äœ çŽæ¥åå³ `Response` æïŒä¹èœå å
¥æšé ã
-äŸç
§[çŽæ¥åå³ Response](response-directly.md){.internal-link target=_blank}äžç說æå»ºç«åæïŒäžŠææšé äœçºé¡å€åæžå³å
¥ïŒ
+äŸç
§[çŽæ¥åå³ Response](response-directly.md)äžç說æå»ºç«åæïŒäžŠææšé äœçºé¡å€åæžå³å
¥ïŒ
{* ../../docs_src/response_headers/tutorial001_py310.py hl[10:12] *}
@@ -36,6 +36,6 @@ FastAPI æäœ¿çšé£åæ«ææ§çåæäŸæ·åæšé ïŒéæ Cookie èç
## èªèšæšé { #custom-headers }
-è«èšäœïŒå°æçèªèšæšé å¯ä»¥äœ¿çš `X-` åç¶ŽäŸæ°å¢ã
+è«èšäœïŒå°æçèªèšæšé å¯ä»¥[äœ¿çš `X-` åç¶Ž](https://developer.mozilla.org/en-US/docs/Web/HTTP/Headers)äŸæ°å¢ã
-äœåŠæäœ æèªèšæšé äžŠåžæç芜åšç«¯ç客æ¶ç«¯èœçèŠå®åïŒäœ éèŠæéäºæšé å å
¥å° CORS èšå®äžïŒè©³èŠ [CORSïŒè·šäŸæºè³æºå
±çšïŒ](../tutorial/cors.md){.internal-link target=_blank}ïŒïŒäœ¿çšåšStarlette ç CORS æä»¶äžèšèŒç `expose_headers` åæžã
+äœåŠæäœ æèªèšæšé äžŠåžæç芜åšç«¯ç客æ¶ç«¯èœçèŠå®åïŒäœ éèŠæéäºæšé å å
¥å° CORS èšå®äžïŒè©³èŠ [CORSïŒè·šäŸæºè³æºå
±çšïŒ](../tutorial/cors.md)ïŒïŒäœ¿çšåš[Starlette ç CORS æä»¶](https://www.starlette.dev/middleware/#corsmiddleware)äžèšèŒç `expose_headers` åæžã
diff --git a/docs/zh-hant/docs/advanced/security/http-basic-auth.md b/docs/zh-hant/docs/advanced/security/http-basic-auth.md
index ea3d528292..817cf166b9 100644
--- a/docs/zh-hant/docs/advanced/security/http-basic-auth.md
+++ b/docs/zh-hant/docs/advanced/security/http-basic-auth.md
@@ -32,7 +32,7 @@
䜿çšäžåäŸè³ŽäŸæª¢æ¥äœ¿çšè
åçš±èå¯ç¢Œæ¯åŠæ£ç¢ºã
-çºæ€ïŒäœ¿çš Python æšæºæš¡çµ `secrets` äŸæ¯å°äœ¿çšè
åçš±èå¯ç¢Œã
+çºæ€ïŒäœ¿çš Python æšæºæš¡çµ [`secrets`](https://docs.python.org/3/library/secrets.html) äŸæ¯å°äœ¿çšè
åçš±èå¯ç¢Œã
`secrets.compare_digest()` éèŠæ¥æ¶ `bytes`ïŒææ¯åªå
å« ASCII åå
ïŒè±æå笊ïŒç `str`ãé衚瀺å®ç¡æ³èçå `á` éæš£çåå
ïŒäŸåŠ `Sebastián`ã
diff --git a/docs/zh-hant/docs/advanced/security/index.md b/docs/zh-hant/docs/advanced/security/index.md
index 9a4cfbbfd6..9ddf356756 100644
--- a/docs/zh-hant/docs/advanced/security/index.md
+++ b/docs/zh-hant/docs/advanced/security/index.md
@@ -2,11 +2,11 @@
## é¡å€åèœ { #additional-features }
-é€äº[æåž - 䜿çšè
æåïŒå®å
šæ§](../../tutorial/security/index.md){.internal-link target=_blank}äžæ¶µèçå
§å®¹å€ïŒéæäžäºçšäŸèçå®å
šæ§çé¡å€åèœã
+é€äº[æåž - 䜿çšè
æåïŒå®å
šæ§](../../tutorial/security/index.md)äžæ¶µèçå
§å®¹å€ïŒéæäžäºçšäŸèçå®å
šæ§çé¡å€åèœã
/// tip
-以äžåç¯äžäžå®æ¯ãé²éãå
§å®¹ã
+以äžåç¯**äžäžå®æ¯ãé²éã**å
§å®¹ã
èäžäœ çæ
å¢åŸå¯èœå¯ä»¥åšå
¶äžæŸå°è§£æ±ºæ¹æ¡ã
@@ -14,6 +14,6 @@
## è«å
é±è®æåž { #read-the-tutorial-first }
-以äžåç¯åèšäœ å·²é±è®äž»èŠç[æåž - 䜿çšè
æåïŒå®å
šæ§](../../tutorial/security/index.md){.internal-link target=_blank}ã
+以äžåç¯åèšäœ å·²é±è®äž»èŠç[æåž - 䜿çšè
æåïŒå®å
šæ§](../../tutorial/security/index.md)ã
å®åéœå»ºç«åšçžåçæŠå¿µä¹äžïŒäœæäŸäžäºé¡å€çåèœã
diff --git a/docs/zh-hant/docs/advanced/security/oauth2-scopes.md b/docs/zh-hant/docs/advanced/security/oauth2-scopes.md
index 029572d433..05088be7ed 100644
--- a/docs/zh-hant/docs/advanced/security/oauth2-scopes.md
+++ b/docs/zh-hant/docs/advanced/security/oauth2-scopes.md
@@ -60,7 +60,7 @@ OAuth2 èŠæ Œå°ãscopesãå®çŸ©çºä»¥ç©ºçœåéçäžäž²åäž²å衚ã
## å
šå±æŠè§ { #global-view }
-å
å¿«éçççžå°æŒäž»æåžã䜿çšå¯ç¢ŒïŒèéæ¹ïŒãBearer è JWT token ç OAuth2ãçå·®ç°ïŒ[OAuth2 with Password (and hashing), Bearer with JWT tokens](../../tutorial/security/oauth2-jwt.md){.internal-link target=_blank}ïŒãçŸåšå å
¥äº OAuth2 scopesïŒ
+å
å¿«éçççžå°æŒäž»æåžã䜿çšå¯ç¢ŒïŒèéæ¹ïŒãBearer è JWT token ç OAuth2ãçå·®ç°ïŒ[OAuth2 with Password (and hashing), Bearer with JWT tokens](../../tutorial/security/oauth2-jwt.md)ïŒãçŸåšå å
¥äº OAuth2 scopesïŒ
{* ../../docs_src/security/tutorial005_an_py310.py hl[5,9,13,47,65,106,108:116,122:126,130:136,141,157] *}
@@ -271,4 +271,4 @@ FastAPI åš `fastapi.security.oauth2` äžæäŸäºææéäº OAuth2 é©èæµ
## åšè£é£Ÿåš `dependencies` äžäœ¿çš `Security` { #security-in-decorator-dependencies }
-å°±åäœ å¯ä»¥åšè£é£Ÿåšç `dependencies` åæžäžå®çŸ©äžå `Depends` ç `list` äžæš£ïŒè©³èŠ[è·¯åŸæäœè£é£ŸåšäžççžäŸæ§](../../tutorial/dependencies/dependencies-in-path-operation-decorators.md){.internal-link target=_blank}ïŒïŒäœ ä¹å¯ä»¥åšé£è£¡äœ¿çšåž¶æ `scopes` ç `Security`ã
+å°±åäœ å¯ä»¥åšè£é£Ÿåšç `dependencies` åæžäžå®çŸ©äžå `Depends` ç `list` äžæš£ïŒè©³èŠ[è·¯åŸæäœè£é£ŸåšäžççžäŸæ§](../../tutorial/dependencies/dependencies-in-path-operation-decorators.md)ïŒïŒäœ ä¹å¯ä»¥åšé£è£¡äœ¿çšåž¶æ `scopes` ç `Security`ã
diff --git a/docs/zh-hant/docs/advanced/settings.md b/docs/zh-hant/docs/advanced/settings.md
index 1ee5ad7cc2..9892f8f000 100644
--- a/docs/zh-hant/docs/advanced/settings.md
+++ b/docs/zh-hant/docs/advanced/settings.md
@@ -8,7 +8,7 @@
/// tip
-è¥æ³äºè§£ç°å¢è®æžïŒäœ å¯ä»¥é±è®[ç°å¢è®æž](../environment-variables.md){.internal-link target=_blank}ã
+è¥æ³äºè§£ç°å¢è®æžïŒäœ å¯ä»¥é±è®[ç°å¢è®æž](../environment-variables.md)ã
///
@@ -20,11 +20,11 @@
## Pydantic `Settings` { #pydantic-settings }
-幞奜ïŒPydantic æäŸäºåŸå¥œçå·¥å
·ïŒå¯çšäŸèçç±ç°å¢è®æžèäŸçèšå®ïŒPydanticïŒèšå®ç®¡çã
+幞奜ïŒPydantic æäŸäºåŸå¥œçå·¥å
·ïŒå¯çšäŸèçç±ç°å¢è®æžèäŸçèšå®ïŒ[PydanticïŒèšå®ç®¡ç](https://docs.pydantic.dev/latest/concepts/pydantic_settings/)ã
### å®è£ `pydantic-settings` { #install-pydantic-settings }
-éŠå
ïŒè«å
建ç«äœ ç[èæ¬ç°å¢](../virtual-environments.md){.internal-link target=_blank}ïŒåçšå®ïŒç¶åŸå®è£ `pydantic-settings` å¥ä»¶ïŒ
+éŠå
ïŒè«å
建ç«äœ ç[èæ¬ç°å¢](../virtual-environments.md)ïŒåçšå®ïŒç¶åŸå®è£ `pydantic-settings` å¥ä»¶ïŒ
@@ -100,7 +100,7 @@ $ ADMIN_EMAIL="deadpool@example.com" APP_NAME="ChimichangApp" fastapi run main.p
## åšåŠäžåæš¡çµäžçèšå® { #settings-in-another-module }
-äœ ä¹å¯ä»¥æéäºèšå®æŸåšåŠäžåæš¡çµæªæ¡äžïŒå°±ååš[æŽå€§çæçšçšåŒ - å€åæªæ¡](../tutorial/bigger-applications.md){.internal-link target=_blank}æç€ºã
+äœ ä¹å¯ä»¥æéäºèšå®æŸåšåŠäžåæš¡çµæªæ¡äžïŒå°±ååš[æŽå€§çæçšçšåŒ - å€åæªæ¡](../tutorial/bigger-applications.md)æç€ºã
äŸåŠïŒäœ å¯ä»¥æäžå `config.py` æªæ¡åŠäžïŒ
@@ -112,7 +112,7 @@ $ ADMIN_EMAIL="deadpool@example.com" APP_NAME="ChimichangApp" fastapi run main.p
/// tip
-äœ ä¹éèŠäžå `__init__.py` æªæ¡ïŒè©³èŠ[æŽå€§çæçšçšåŒ - å€åæªæ¡](../tutorial/bigger-applications.md){.internal-link target=_blank}ã
+äœ ä¹éèŠäžå `__init__.py` æªæ¡ïŒè©³èŠ[æŽå€§çæçšçšåŒ - å€åæªæ¡](../tutorial/bigger-applications.md)ã
///
@@ -172,7 +172,7 @@ $ ADMIN_EMAIL="deadpool@example.com" APP_NAME="ChimichangApp" fastapi run main.p
///
-Pydantic ééå€éšåœåŒåº«æ¯æŽè®åéé¡åçæªæ¡ãäœ å¯ä»¥é±è®æŽå€ïŒ
Pydantic SettingsïŒDotenv (.env) æ¯æŽã
+Pydantic ééå€éšåœåŒåº«æ¯æŽè®åéé¡åçæªæ¡ãäœ å¯ä»¥é±è®æŽå€ïŒ[Pydantic SettingsïŒDotenv (.env) æ¯æŽ](https://docs.pydantic.dev/latest/concepts/pydantic_settings/#dotenv-env-support)ã
/// tip
@@ -197,7 +197,7 @@ APP_NAME="ChimichangApp"
/// tip
-`model_config` 屬æ§å
çšæŒ Pydantic çèšå®ãäœ å¯ä»¥é±è®æŽå€ïŒ
PydanticïŒæŠå¿µïŒèšå®ã
+`model_config` 屬æ§å
çšæŒ Pydantic çèšå®ãäœ å¯ä»¥é±è®æŽå€ïŒ[PydanticïŒæŠå¿µïŒèšå®](https://docs.pydantic.dev/latest/concepts/config/)ã
///
@@ -291,7 +291,7 @@ participant execute as Execute function
åŠæ€äžäŸïŒå®çè¡çºå¹Ÿä¹å°±åå
šåè®æžãäœå çºå®äœ¿çšçžäŸåœåŒïŒå æ€æåå¯ä»¥åšæž¬è©ŠæèŒé¬å°å
¶èŠå¯«ã
-`@lru_cache` æ¯ `functools` çäžéšåïŒè `functools` æ¯ Python æšæºçšåŒåº«çäžéšåãäœ å¯ä»¥åš
Python æä»¶äžé±è® `@lru_cache` 以äºè§£æŽå€ã
+`@lru_cache` æ¯ `functools` çäžéšåïŒè `functools` æ¯ Python æšæºçšåŒåº«çäžéšåãäœ å¯ä»¥åš[Python æä»¶äžé±è® `@lru_cache`](https://docs.python.org/3/library/functools.html#functools.lru_cache) 以äºè§£æŽå€ã
## åé¡§ { #recap }
diff --git a/docs/zh-hant/docs/advanced/stream-data.md b/docs/zh-hant/docs/advanced/stream-data.md
new file mode 100644
index 0000000000..0f55ae6516
--- /dev/null
+++ b/docs/zh-hant/docs/advanced/stream-data.md
@@ -0,0 +1,117 @@
+# äž²æµè³æ { #stream-data }
+
+åŠæäœ èŠäž²æµå¯çš JSON çµæ§åçè³æïŒæè©²[äž²æµ JSON Lines](../tutorial/stream-json-lines.md)ã
+
+äœåŠæäœ æ³äž²æµçŽäºé²äœè³ææåäž²ïŒä»¥äžæ¯åæ³ã
+
+/// info
+
+å·²åš FastAPI 0.134.0 æ°å¢ã
+
+///
+
+## äœ¿çšæ
å¢ { #use-cases }
+
+ç¶äœ æ³äž²æµçŽåäž²æå¯ä»¥çšéåæ©å¶ïŒäŸåŠçŽæ¥èœçŒäŸèª AI LLM æåç茞åºã
+
+äœ ä¹å¯ä»¥çšå®äŸäž²æµå€§åäºé²äœæªæ¡ïŒéè®éå°æ¯ååå¡ïŒchunkïŒäž²æµåºå»ïŒèäžå¿
äžæ¬¡ææŽåæªæ¡èŒå
¥èšæ¶é«ã
+
+äœ ä¹å¯ä»¥çšå暣æ¹åŒäž²æµèŠèšæé³èšïŒçè³å¯ä»¥åšèççåæå³æç¢ç䞊å³éã
+
+## äœ¿çš `yield` ç `StreamingResponse` { #a-streamingresponse-with-yield }
+
+åŠæåšäœ çè·¯åŸæäœåœåŒäžå®£å `response_class=StreamingResponse`ïŒå°±å¯ä»¥çš `yield` éäžéåºæ¯åè³æåå¡ã
+
+{* ../../docs_src/stream_data/tutorial001_py310.py ln[1:23] hl[20,23] *}
+
+FastAPI æåŠå¯Šå°æ¯åè³æåå¡äº€çµŠ `StreamingResponse`ïŒäžæå詊å°å
¶èœæçº JSON æå
¶ä»æ ŒåŒã
+
+### é async è·¯åŸæäœåœåŒ { #non-async-path-operation-functions }
+
+äœ ä¹å¯ä»¥äœ¿çšäžè¬ç `def` åœåŒïŒæ²æ `async`ïŒïŒäžŠä»¥çžåæ¹åŒäœ¿çš `yield`ã
+
+{* ../../docs_src/stream_data/tutorial001_py310.py ln[26:29] hl[27] *}
+
+### äžéèŠåå¥èš»è§£ { #no-annotation }
+
+å°æŒäž²æµäºé²äœè³æïŒå
¶å¯ŠäžéèŠå®£ååå³åå¥èš»è§£ã
+
+ç±æŒ FastAPI äžæè©Šåçš Pydantic å°è³æèœæ JSONïŒæä»¥å
¶ä»æ¹åŒåºååïŒåšéçš®æ
æ³äžïŒåå¥èš»è§£å
äŸç·šèŒ¯åšèå·¥å
·äœ¿çšïŒFastAPI äžŠäžæçšå°å®ã
+
+{* ../../docs_src/stream_data/tutorial001_py310.py ln[32:35] hl[33] *}
+
+é乿å³èäœ¿çš `StreamingResponse` æïŒäœ ææèªç±è責任ïŒéäŸéæ±èªè¡ç¢ç䞊線碌èŠå³éçäœå
çµè³æïŒèåå¥èš»è§£ç¡éã ð€
+
+### äž²æµäœå
çµ { #stream-bytes }
+
+äžåäž»èŠçšäŸæ¯äž²æµ `bytes` èéåäž²ïŒç¶ç¶å¯ä»¥é麌åã
+
+{* ../../docs_src/stream_data/tutorial001_py310.py ln[44:47] hl[47] *}
+
+## èªèš `PNGStreamingResponse` { #a-custom-pngstreamingresponse }
+
+åšäžè¿°ç¯äŸäžïŒéç¶äž²æµäºè³æäœå
çµïŒäœåææ²æ `Content-Type` æšé ïŒå æ€çšæ¶ç«¯äžç¥éæ¥æ¶å°çæ¯åªçš®è³æåå¥ã
+
+äœ å¯ä»¥å»ºç« `StreamingResponse` çèªèšåé¡å¥ïŒå° `Content-Type` æšé èšå®çºäœ èŠäž²æµçè³æåå¥ã
+
+äŸåŠïŒäœ å¯ä»¥å»ºç« `PNGStreamingResponse`ïŒéé `media_type` å±¬æ§æ `Content-Type` èšçº `image/png`ïŒ
+
+{* ../../docs_src/stream_data/tutorial002_py310.py ln[6,19:20] hl[20] *}
+
+æ¥èåšè·¯åŸæäœåœåŒäžçš `response_class=PNGStreamingResponse` 䜿çšéåæ°é¡å¥ïŒ
+
+{* ../../docs_src/stream_data/tutorial002_py310.py ln[23:27] hl[23] *}
+
+### æš¡æ¬æªæ¡ { #simulate-a-file }
+
+æ€ç¯äŸäžæåçš `io.BytesIO` æš¡æ¬æªæ¡ã宿¯åªååšæŒèšæ¶é«äžç顿ªæ¡ç©ä»¶ïŒäœæäŸçžåçä»é¢ã
+
+äŸåŠïŒæåå¯ä»¥åè®åäžè¬æªæ¡äžæš£ïŒééè¿ä»£äŸæ¶èå
¶å
§å®¹ã
+
+{* ../../docs_src/stream_data/tutorial002_py310.py ln[1:27] hl[3,12:13,25] *}
+
+/// note | æè¡çްç¯
+
+åŠå€å
©åè®æž `image_base64` è `binary_image`ïŒå奿¯å
å°åœ±å以 Base64 ç·šç¢ŒïŒæ¥èèœæäœå
çµïŒæåŸåå³çµŠ `io.BytesIO`ã
+
+éåªæ¯çºäºè®ç¯äŸèœæŸåšåäžåæªæ¡äžïŒæ¹äŸ¿äœ çŽæ¥è€è£œäžŠå·è¡ã ð¥
+
+///
+
+äœ¿çš `with` åå¡å¯ç¢ºä¿åšç¢çåšåœåŒïŒå
å« `yield` çåœåŒïŒå®æåŸééè©²é¡æªæ¡ç©ä»¶ïŒä¹å°±æ¯åšéå®åæä¹åŸã
+
+åšéåç¯äŸäžå çºæ¯ååšèšæ¶é«çåæªæ¡ïŒ`io.BytesIO`ïŒïŒåœ±é¿äžå€§ïŒäœè¥æ¯å¯Šéæªæ¡ïŒåå¿
åšèç宿åŸééæªæ¡ã
+
+### æªæ¡è Async { #files-and-async }
+
+倿žæ
æ³äžïŒé¡æªæ¡ç©ä»¶é èšäžçžå®¹æŒ async/awaitã
+
+äŸåŠïŒå®åæ²æ `await file.read()`ïŒä¹äžæ¯æŽ `async for chunk in file`ã
+
+èäžåšèš±å€æ
æ³äžïŒè®åå®åææ¯é»å¡æäœïŒå¯èœé»å¡äºä»¶è¿ŽåïŒïŒå çºè³ææ¯åŸç£ç¢æç¶²è·¯è®åã
+
+/// info
+
+äžé¢çç¯äŸå
¶å¯Šæ¯äŸå€ïŒå çº `io.BytesIO` ç©ä»¶å·²åšèšæ¶é«äžïŒè®åäžæé»å¡ä»»äœæ±è¥¿ã
+
+äœåšå€æžæ
æ³äžïŒè®åæªæ¡æé¡æªæ¡ç©ä»¶æé æé»å¡ã
+
+///
+
+çºäºé¿å
é»å¡äºä»¶è¿ŽåïŒäœ å¯ä»¥å°è·¯åŸæäœåœåŒå®£åçºäžè¬ç `def`ïŒèé `async def`ïŒïŒé暣 FastAPI æåš threadpool worker äžå·è¡å®ïŒé¿å
é»å¡äž»äºä»¶è¿Žåã
+
+{* ../../docs_src/stream_data/tutorial002_py310.py ln[30:34] hl[31] *}
+
+/// tip
+
+åŠæäœ éèŠåš async åœåŒå
§åŒå«é»å¡çšåŒç¢ŒïŒæåšé»å¡åœåŒäžåŒå« async åœåŒïŒäœ å¯ä»¥äœ¿çš [Asyncer](https://asyncer.tiangolo.com)ïŒå®æ¯ FastAPI çå§åйåœåŒåº«ã
+
+///
+
+### `yield from` { #yield-from }
+
+ç¶äœ åšè¿ä»£æåç©ä»¶ïŒåŠé¡æªæ¡ç©ä»¶ïŒïŒäžŠå°æ¯åé
ç®äœ¿çš `yield` æïŒä¹å¯ä»¥çš `yield from` çŽæ¥éé
ç¢åºïŒçç¥ `for` 迎åã
+
+éäžæ¯ FastAPI ç¹æçåèœïŒèæ¯ Python èªæ³ïŒäžééæåŸå¯Šçšã ð
+
+{* ../../docs_src/stream_data/tutorial002_py310.py ln[37:40] hl[40] *}
diff --git a/docs/zh-hant/docs/advanced/strict-content-type.md b/docs/zh-hant/docs/advanced/strict-content-type.md
new file mode 100644
index 0000000000..9d2ffb8430
--- /dev/null
+++ b/docs/zh-hant/docs/advanced/strict-content-type.md
@@ -0,0 +1,88 @@
+# åŽæ Œç Content-Type æª¢æ¥ { #strict-content-type-checking }
+
+é èšæ
æ³äžïŒFastAPI æå° JSON è«æ±äž»é«äœ¿çšåŽæ Œç `Content-Type` æšé 檢æ¥ãä¹å°±æ¯èªªïŒJSON è«æ±å¿
é å
嫿æç `Content-Type` æšé ïŒäŸåŠ `application/json`ïŒïŒè«æ±äž»é«ïŒbodyïŒæèœè¢«è§£æçº JSONã
+
+## CSRF é¢šéª { #csrf-risk }
+
+éåé èšè¡çºåšæåéåžžç¹å®çæ
å¢äžïŒèœå°äžé¡è·šç«è«æ±åœé ïŒCSRF, Cross-Site Request ForgeryïŒæ»ææäŸä¿è·ã
+
+é顿»æå©çšäºç芜åšåšä»¥äžæ
æ³äžå
èš±è
³æ¬çŒéè«æ±èäžé²è¡ä»»äœ CORS é æª¢ïŒpreflightïŒæª¢æ¥çäºå¯ŠïŒ
+
+- æ²æ `Content-Type` æšé ïŒäŸåŠä»¥ `fetch()` äžŠäœ¿çš `Blob` äœçº bodyïŒ
+- äžæ²æéåºä»»äœèº«åé©èæè
+
+éçš®æ»æäž»èŠèä»¥äžæ
å¢çžéïŒ
+
+- æçšå𿬿©ïŒäŸåŠ `localhost`ïŒæå
§éšç¶²è·¯äžå·è¡
+- äžŠäžæçšæ²æä»»äœèº«åé©èïŒåèšåäžå網路äžçä»»äœè«æ±éœå¯è¢«ä¿¡ä»»
+
+## æ»æç¯äŸ { #example-attack }
+
+åèšäœ æé äºäžååšæ¬æ©å·è¡ AI 代çïŒAI agentïŒçæ¹æ³ã
+
+宿äŸäžå APIïŒ
+
+```
+http://localhost:8000/v1/agents/multivac
+```
+
+åæä¹æäžåå端ïŒ
+
+```
+http://localhost:8000
+```
+
+/// tip | æç€º
+
+è«æ³šæå
©è
çäž»æ©ïŒhostïŒçžåã
+
+///
+
+æ¥èäœ å¯ä»¥ééåç«¯è® AI 代çä»£äœ å·è¡åäœã
+
+ç±æŒå®å𿬿©å·è¡ãèéå
¬éçç¶²é網路äžïŒäœ 決å®äžèšå®ä»»äœèº«åé©èïŒåªä¿¡ä»»å°æ¬æ©ç¶²è·¯çååã
+
+ç¶åŸäœ çæäœäœ¿çšè
å¯èœå®è£äžŠå𿬿©å·è¡å®ã
+
+æ¥èä»å¯èœæéäžåæ¡æç¶²ç«ïŒäŸåŠïŒ
+
+```
+https://evilhackers.example.com
+```
+
+è©²æ¡æç¶²ç«æäœ¿çš `fetch()` 䞊以 `Blob` äœçº bodyïŒåæ¬æ©ç API çŒéè«æ±ïŒ
+
+```
+http://localhost:8000/v1/agents/multivac
+```
+
+å³äœ¿æ¡æç¶²ç«èæ¬æ©æçšçäž»æ©äžåïŒç芜åšä¹äžæè§žçŒ CORS é æª¢è«æ±ïŒå çºïŒ
+
+- å®åšæªç¶ä»»äœèº«åé©èçæ
æ³äžå·è¡ïŒäžéèŠéåºä»»äœæèã
+- ç±æŒçŒºå° `Content-Type` æšé ïŒç芜åšèªçºå®äžŠæªå³é JSONã
+
+æ¥èïŒæ¡æç¶²ç«å°±èœè®æ¬æ©ç AI ä»£çæ¿äœ¿çšè
ååèéçŒé£å³èš... æåæŽç³çäºãð
+
+## å
¬éçç¶²é網路 { #open-internet }
+
+åŠæäœ çæçšéšçœ²åšå
¬éçç¶²é網路äžïŒäœ äžæã信任網路ãèå
蚱任äœäººåšæªç¶èº«åé©èçæ
æ³äžçŒéå
·æ¬éçè«æ±ã
+
+æ»æè
å¯ä»¥çŽæ¥å·è¡è
³æ¬åäœ ç API çŒéè«æ±ïŒç¡éééç芜åšäºåïŒå æ€äœ å€åå·²ç¶å°ä»»äœå
·æ¬éç端é»åäºé²è·ã
+
+åšéçš®æ
æ³äžïŒéçš®æ»æïŒé¢šéªäžé©çšæŒäœ ã
+
+æ€é¢šéªèæ»æäž»èŠèæçšåªå𿬿©æå
§éšç¶²è·¯äžå·è¡ïŒäžãå
äŸè³Žæ€çºä¿è·ãçæ
å¢çžéã
+
+## å
èš±æ²æ Content-Type çè«æ± { #allowing-requests-without-content-type }
+
+è¥äœ éèŠæ¯æŽæªéåº `Content-Type` æšé ç客æ¶ç«¯ïŒå¯ä»¥å° `strict_content_type=False` 以åçšåŽæ Œæª¢æ¥ïŒ
+
+{* ../../docs_src/strict_content_type/tutorial001_py310.py hl[4] *}
+
+åçšæ€èšå®åŸïŒçŒºå° `Content-Type` æšé çè«æ±æå°å
¶äž»é«è§£æçº JSONïŒéèèç FastAPI çè¡çºçžåã
+
+/// info | è³èš
+
+æ€è¡çºèèšå®æ°å¢æŒ FastAPI 0.132.0ã
+
+///
diff --git a/docs/zh-hant/docs/advanced/sub-applications.md b/docs/zh-hant/docs/advanced/sub-applications.md
index 773bc4b886..7199e6d629 100644
--- a/docs/zh-hant/docs/advanced/sub-applications.md
+++ b/docs/zh-hant/docs/advanced/sub-applications.md
@@ -30,25 +30,25 @@
### 檢æ¥èªå API æä»¶ { #check-the-automatic-api-docs }
-çŸåšïŒçšäœ çæªæ¡å·è¡ `fastapi` æä»€ïŒ
+çŸåšïŒå·è¡ `fastapi` æä»€ïŒ
```console
-$ fastapi dev main.py
+$ fastapi dev
INFO: Uvicorn running on http://127.0.0.1:8000 (Press CTRL+C to quit)
```
-ç¶åŸéåäœæŒ
http://127.0.0.1:8000/docs çæä»¶ã
+ç¶åŸéåäœæŒ [http://127.0.0.1:8000/docs](http://127.0.0.1:8000/docs) çæä»¶ã
äœ æçå°äž»æçšçèªå API æä»¶ïŒåªå
å«å®èªå·±ç*è·¯åŸæäœ*ïŒ

-æ¥èïŒéååæçšçšåŒçæä»¶ïŒ
http://127.0.0.1:8000/subapi/docsã
+æ¥èïŒéååæçšçšåŒçæä»¶ïŒ[http://127.0.0.1:8000/subapi/docs](http://127.0.0.1:8000/subapi/docs)ã
äœ æçå°åæçšçšåŒçèªå API æä»¶ïŒåªå
å«å®èªå·±ç*è·¯åŸæäœ*ïŒèäžéœåšæ£ç¢ºçåè·¯åŸåç¶Ž `/subapi` ä¹äžïŒ
@@ -64,4 +64,4 @@ $ fastapi dev main.py
èäžåæçšçšåŒä¹èœåæèŒèªå·±çåæçšçšåŒïŒäžåéœèœæ£ç¢ºéäœïŒå çº FastAPI æèªåèçææéäº `root_path`ã
-äœ å¯ä»¥åš[åšä»£ç䌺æåšä¹åŸ](behind-a-proxy.md){.internal-link target=_blank}äžç¯äžé²äžæ¥äºè§£ `root_path` èåŠäœé¡¯åŒäœ¿çšå®ã
+äœ å¯ä»¥åš[åšä»£ç䌺æåšä¹åŸ](behind-a-proxy.md)äžç¯äžé²äžæ¥äºè§£ `root_path` èåŠäœé¡¯åŒäœ¿çšå®ã
diff --git a/docs/zh-hant/docs/advanced/templates.md b/docs/zh-hant/docs/advanced/templates.md
index ffc7599ae2..6e622d5a77 100644
--- a/docs/zh-hant/docs/advanced/templates.md
+++ b/docs/zh-hant/docs/advanced/templates.md
@@ -8,7 +8,7 @@
## å®è£çžäŸå¥ä»¶ { #install-dependencies }
-è«å
建ç«äžå[èæ¬ç°å¢](../virtual-environments.md){.internal-link target=_blank}ãåçšå®ïŒç¶åŸå®è£ `jinja2`ïŒ
+è«å
建ç«äžå[èæ¬ç°å¢](../virtual-environments.md)ãåçšå®ïŒç¶åŸå®è£ `jinja2`ïŒ
@@ -123,4 +123,4 @@ Item ID: 42
## æŽå€çŽ°ç¯ { #more-details }
-æ³äºè§£æŽå€çްç¯ïŒå
å«åŠäœæž¬è©Šæš¡æ¿ïŒïŒè«åè
Starlette çæš¡æ¿èªªææä»¶ã
+æ³äºè§£æŽå€çްç¯ïŒå
å«åŠäœæž¬è©Šæš¡æ¿ïŒïŒè«åè [Starlette çæš¡æ¿èªªææä»¶](https://www.starlette.dev/templates/)ã
diff --git a/docs/zh-hant/docs/advanced/testing-websockets.md b/docs/zh-hant/docs/advanced/testing-websockets.md
index 7348e60fdf..caedc11dbd 100644
--- a/docs/zh-hant/docs/advanced/testing-websockets.md
+++ b/docs/zh-hant/docs/advanced/testing-websockets.md
@@ -8,6 +8,6 @@
/// note | 泚æ
-æ³äºè§£æŽå€ïŒè«åè Starlette ç
枬詊 WebSocket æä»¶ã
+æ³äºè§£æŽå€ïŒè«åè Starlette ç[枬詊 WebSocket](https://www.starlette.dev/testclient/#testing-websocket-sessions)æä»¶ã
///
diff --git a/docs/zh-hant/docs/advanced/using-request-directly.md b/docs/zh-hant/docs/advanced/using-request-directly.md
index f1dae9bf29..2c355982de 100644
--- a/docs/zh-hant/docs/advanced/using-request-directly.md
+++ b/docs/zh-hant/docs/advanced/using-request-directly.md
@@ -15,7 +15,7 @@
## éæŒ `Request` ç©ä»¶ççŽ°ç¯ { #details-about-the-request-object }
-ç±æŒ FastAPI åºå±€å
¶å¯Šæ¯ StarletteïŒåå äžäžå±€å·¥å
·ïŒå æ€åšéèŠæäœ å¯ä»¥çŽæ¥äœ¿çš Starlette ç
`Request` ç©ä»¶ã
+ç±æŒ FastAPI åºå±€å
¶å¯Šæ¯ StarletteïŒåå äžäžå±€å·¥å
·ïŒå æ€åšéèŠæäœ å¯ä»¥çŽæ¥äœ¿çš Starlette ç [`Request`](https://www.starlette.dev/requests/) ç©ä»¶ã
åæä¹ä»£è¡šïŒåŠæäœ çŽæ¥åŸ `Request` ç©ä»¶ååŸè³æïŒäŸåŠè®å bodyïŒïŒFastAPI äžææ¿å®åé©èãèœæææä»¶åïŒéé OpenAPI çºèªååç API ä»é¢ç¢çæä»¶ïŒã
@@ -45,7 +45,7 @@
## `Request` æä»¶ { #request-documentation }
-äœ å¯ä»¥åš
Starlette 宿¹æä»¶ç«é»äžç `Request` ç©ä»¶ äºè§£æŽå€çްç¯ã
+äœ å¯ä»¥åš [Starlette 宿¹æä»¶ç«é»äžç `Request` ç©ä»¶](https://www.starlette.dev/requests/) äºè§£æŽå€çްç¯ã
/// note | æè¡çްç¯
diff --git a/docs/zh-hant/docs/advanced/websockets.md b/docs/zh-hant/docs/advanced/websockets.md
index 22e3fdcb9e..57f51bcfbe 100644
--- a/docs/zh-hant/docs/advanced/websockets.md
+++ b/docs/zh-hant/docs/advanced/websockets.md
@@ -1,10 +1,10 @@
# WebSockets { #websockets }
-äœ å¯ä»¥åš **FastAPI** äžäœ¿çš
WebSocketsã
+äœ å¯ä»¥åš **FastAPI** äžäœ¿çš [WebSockets](https://developer.mozilla.org/en-US/docs/Web/API/WebSockets_API)ã
## å®è£ `websockets` { #install-websockets }
-è«å
建ç«[èæ¬ç°å¢](../virtual-environments.md){.internal-link target=_blank}ãåçšå®ïŒç¶åŸå®è£ `websockets`ïŒäžåè®äœ æŽå®¹æäœ¿çšãWebSocketãéèšåå®ç Python å¥ä»¶ïŒïŒ
+è«å
建ç«[èæ¬ç°å¢](../virtual-environments.md)ãåçšå®ïŒç¶åŸå®è£ `websockets`ïŒäžåè®äœ æŽå®¹æäœ¿çšãWebSocketãéèšåå®ç Python å¥ä»¶ïŒïŒ
@@ -69,14 +69,14 @@ $ pip install websockets
```console
-$ fastapi dev main.py
+$ fastapi dev
INFO: Uvicorn running on http://127.0.0.1:8000 (Press CTRL+C to quit)
```
-åšç芜åšéå
http://127.0.0.1:8000ã
+åšç芜åšéå [http://127.0.0.1:8000](http://127.0.0.1:8000)ã
äœ æçå°äžååéæš£çç°¡å®é é¢ïŒ
@@ -115,25 +115,25 @@ $ fastapi dev main.py
å çºéæ¯ WebSocketïŒæåº `HTTPException` äžŠæ²ææçŸ©ïŒå æ€æåæ¹çºæåº `WebSocketException`ã
-äœ å¯ä»¥äœ¿çšèŠç¯äžå®çŸ©ç
ææéé代碌ä¹äžã
+äœ å¯ä»¥äœ¿çšèŠç¯äžå®çŸ©ç[ææéé代碌](https://tools.ietf.org/html/rfc6455#section-7.4.1)ä¹äžã
///
### çšäŸè³Žè©Šçš WebSocket { #try-the-websockets-with-dependencies }
-åŠæäœ çæªæ¡åçº `main.py`ïŒçšä»¥äžæä»€å·è¡æçšïŒ
+å·è¡äœ çæçšïŒ
```console
-$ fastapi dev main.py
+$ fastapi dev
INFO: Uvicorn running on http://127.0.0.1:8000 (Press CTRL+C to quit)
```
-åšç芜åšéå
http://127.0.0.1:8000ã
+åšç芜åšéå [http://127.0.0.1:8000](http://127.0.0.1:8000)ã
åšé£è£¡äœ å¯ä»¥èšå®ïŒ
@@ -174,7 +174,7 @@ Client #1596980209979 left the chat
äœè«æ³šæïŒå çºææçæ
éœåšèšæ¶é«äžçå®äž list 裡管çïŒå®åªæåšè©²çšåºå·è¡æéçæïŒäžå
é©çšæŒå®äžçšåºã
-åŠæäœ éèŠäžå容æè FastAPI æŽåãäœæŽå¥å£¯ïŒäžå¯ç± RedisãPostgreSQL çåŸç«¯æ¯æŽçæ¹æ¡ïŒè«åè
encode/broadcasterã
+åŠæäœ éèŠäžå容æè FastAPI æŽåãäœæŽå¥å£¯ïŒäžå¯ç± RedisãPostgreSQL çåŸç«¯æ¯æŽçæ¹æ¡ïŒè«åè [encode/broadcaster](https://github.com/encode/broadcaster)ã
///
@@ -182,5 +182,5 @@ Client #1596980209979 left the chat
æ³äºè§£æŽå€éžé
ïŒè«åè Starlette çæä»¶ïŒ
-*
`WebSocket` é¡å¥ã
-*
以é¡å¥çºåºç€ç WebSocket èçã
+* [`WebSocket` é¡å¥](https://www.starlette.dev/websockets/)ã
+* [以é¡å¥çºåºç€ç WebSocket èç](https://www.starlette.dev/endpoints/#websocketendpoint)ã
diff --git a/docs/zh-hant/docs/advanced/wsgi.md b/docs/zh-hant/docs/advanced/wsgi.md
index 9d03b56924..c1baff34ed 100644
--- a/docs/zh-hant/docs/advanced/wsgi.md
+++ b/docs/zh-hant/docs/advanced/wsgi.md
@@ -1,6 +1,6 @@
# å
å« WSGIïŒFlaskãDjango ç { #including-wsgi-flask-django-others }
-äœ å¯ä»¥ååš [åæçšçšåŒ - æèŒ](sub-applications.md){.internal-link target=_blank}ã[åš Proxy åŸæ¹](behind-a-proxy.md){.internal-link target=_blank} äžæèŠé£æš£æèŒ WSGI æçšã
+äœ å¯ä»¥ååš [åæçšçšåŒ - æèŒ](sub-applications.md)ã[åš Proxy åŸæ¹](behind-a-proxy.md) äžæèŠé£æš£æèŒ WSGI æçšã
çºæ€ïŒäœ å¯ä»¥äœ¿çš `WSGIMiddleware` äŸå
äœäœ ç WSGI æçšïŒäŸåŠ FlaskãDjango çã
@@ -36,13 +36,13 @@
å
¶é€åç± **FastAPI** èçã
-åŠæäœ ååå®äžŠååŸ
http://localhost:8000/v1/ïŒäœ æçå°äŸèª Flask çåæïŒ
+åŠæäœ ååå®äžŠååŸ [http://localhost:8000/v1/](http://localhost:8000/v1/)ïŒäœ æçå°äŸèª Flask çåæïŒ
```txt
Hello, World from Flask!
```
-åŠæäœ ååŸ
http://localhost:8000/v2ïŒäœ æçå°äŸèª FastAPI çåæïŒ
+åŠæäœ ååŸ [http://localhost:8000/v2](http://localhost:8000/v2)ïŒäœ æçå°äŸèª FastAPI çåæïŒ
```JSON
{
diff --git a/docs/zh-hant/docs/alternatives.md b/docs/zh-hant/docs/alternatives.md
index 340c47d8ba..ee99faf99f 100644
--- a/docs/zh-hant/docs/alternatives.md
+++ b/docs/zh-hant/docs/alternatives.md
@@ -14,7 +14,7 @@
## å
åçå·¥å
· { #previous-tools }
-###
Django { #django }
+### [Django](https://www.djangoproject.com/) { #django }
宿¯æåæ¡è¿äžå»£åä¿¡ä»»ç Python æ¡æ¶ãå Instagram ç系統就æ¯çšå®æé çã
@@ -22,7 +22,7 @@
å®äžéå§æ¯çºåšåŸç«¯ç¢ç HTML èèšèšïŒèéçºäºå»ºç«æäŸçŸä»£å端ïŒåŠ ReactãVue.jsãAngularïŒæå
¶ä»ç³»çµ±ïŒåŠ
IoT è£çœ®ïŒäœ¿çšç APIã
-###
Django REST Framework { #django-rest-framework }
+### [Django REST Framework](https://www.django-rest-framework.org/) { #django-rest-framework }
Django REST framework çç®æšæ¯æçºäžå¥åš Django ä¹äžæ§å»º Web API çåœæ§å·¥å
·çµïŒä»¥åŒ·åå
¶ API èœåã
@@ -30,7 +30,7 @@ Django REST framework çç®æšæ¯æçºäžå¥åš Django ä¹äžæ§å»º Web API
宿¯ãèªå API æä»¶ãçæ©æå
žç¯ä¹äžïŒè鿣æ¯åçŒæãå°æŸã**FastAPI** ç第äžåæ³æ³ã
-/// note | 泚æ
+/// note
Django REST Framework ç± Tom Christie åµå»ºãä»åæä¹æ¯ Starlette è Uvicorn çäœè
ïŒè **FastAPI** å°±æ¯å»ºç«åšå®åä¹äžã
@@ -42,7 +42,7 @@ Django REST Framework ç± Tom Christie åµå»ºãä»åæä¹æ¯ Starlette è Uv
///
-###
Flask { #flask }
+### [Flask](https://flask.palletsprojects.com) { #flask }
Flask æ¯äžåãåŸ®æ¡æ¶ãïŒå®äžå
å«è³æåº«æŽåïŒä¹æ²æå Django 飿š£å
§å»ºèš±å€åèœã
@@ -64,7 +64,7 @@ Flask æ¯äžåãåŸ®æ¡æ¶ãïŒå®äžå
å«è³æåº«æŽåïŒä¹æ²æå Djan
///
-###
Requests { #requests }
+### [Requests](https://requests.readthedocs.io) { #requests }
**FastAPI** å
¶å¯Šäžæ¯ **Requests** çæ¿ä»£åãå
©è
çç¯çæªç¶äžåã
@@ -106,7 +106,7 @@ def read_url():
///
-###
Swagger /
OpenAPI { #swagger-openapi }
+### [Swagger](https://swagger.io/) / [OpenAPI](https://github.com/OAI/OpenAPI-Specification/) { #swagger-openapi }
ææ³åŸ Django REST Framework åŸå°çäž»èŠåèœæ¯èªå API æä»¶ã
@@ -124,8 +124,8 @@ def read_url():
䞊æŽååºæŒæšæºç䜿çšè
ä»é¢å·¥å
·ïŒ
-*
Swagger UI
-*
ReDoc
+* [Swagger UI](https://github.com/swagger-api/swagger-ui)
+* [ReDoc](https://github.com/Rebilly/ReDoc)
éžæéå
©åæ¯å çºå®åçžç¶åæ¡è¿äžç©©å®ïŒäœçšå æå°ïŒäœ æçŒçŸææžåçš® OpenAPI çæ¿ä»£äœ¿çšè
ä»é¢ïŒéœèœè **FastAPI** äžèµ·äœ¿çšïŒã
@@ -135,7 +135,7 @@ def read_url():
æå¹Ÿå Flask ç REST æ¡æ¶ïŒäœåšæå
¥æé調æ¥åŸïŒæçŒçŸèš±å€å·²åæ¢ç¶è·æè¢«æ£çœ®ïŒäžååšäžäºééµåé¡äœ¿ä¹äžé©çšã
-###
Marshmallow { #marshmallow }
+### [Marshmallow](https://marshmallow.readthedocs.io/en/stable/) { #marshmallow }
API 系統éèŠçäž»èŠåèœä¹äžæ¯è³æã
åºååãïŒä¹å°±æ¯æçšåŒäžçè³æïŒPythonïŒèœæèœéé網路å³èŒžç圢åŒãäŸåŠïŒå°å«æè³æåº«è³æçç©ä»¶èœæ JSON ç©ä»¶ãæ `datetime` ç©ä»¶èœæåäž²ççã
@@ -153,7 +153,7 @@ API éèŠçåŠäžåéèŠåèœæ¯è³æé©èïŒç¢ºä¿è³æåšç¹å®æ¢ä»¶
///
-###
Webargs { #webargs }
+### [Webargs](https://webargs.readthedocs.io/en/latest/) { #webargs }
API æéçåŠäžé
倧åèœïŒæ¯åŸå³å
¥è«æ±äž
è§£æè³æã
@@ -175,7 +175,7 @@ Webargs ç±è Marshmallow çžåçéçŒè
åµå»ºã
///
-###
APISpec { #apispec }
+### [APISpec](https://apispec.readthedocs.io/en/stable/) { #apispec }
Marshmallow è Webargs 以倿æäŸé©èãè§£æèåºååã
@@ -205,7 +205,7 @@ APISpec ç±è Marshmallow çžåçéçŒè
åµå»ºã
///
-###
Flask-apispec { #flask-apispec }
+### [Flask-apispec](https://flask-apispec.readthedocs.io/en/latest/) { #flask-apispec }
鿝äžå Flask å€æïŒæ WebargsãMarshmallow è APISpec äž²åšäžèµ·ã
@@ -219,11 +219,11 @@ APISpec ç±è Marshmallow çžåçéçŒè
åµå»ºã
䜿çšå®ä¿æäºæžå Flask å
šç«¯ïŒfull-stackïŒç¢çåšãéäºæ¯æïŒä»¥åè¥å¹²å€éšåéïŒè³ä»äž»èŠäœ¿çšçæè¡çµåïŒ
-*
https://github.com/tiangolo/full-stack
-*
https://github.com/tiangolo/full-stack-flask-couchbase
-*
https://github.com/tiangolo/full-stack-flask-couchdb
+* [https://github.com/tiangolo/full-stack](https://github.com/tiangolo/full-stack)
+* [https://github.com/tiangolo/full-stack-flask-couchbase](https://github.com/tiangolo/full-stack-flask-couchbase)
+* [https://github.com/tiangolo/full-stack-flask-couchdb](https://github.com/tiangolo/full-stack-flask-couchdb)
-èéäºå
šç«¯ç¢çåšïŒä¹æçºäº [**FastAPI** å°æ¡ç¢çåš](project-generation.md){.internal-link target=_blank} çåºç€ã
+èéäºå
šç«¯ç¢çåšïŒä¹æçºäº [**FastAPI** å°æ¡ç¢çåš](project-generation.md) çåºç€ã
/// info
@@ -237,7 +237,7 @@ Flask-apispec ç±è Marshmallow çžåçéçŒè
åµå»ºã
///
-###
NestJSïŒè
AngularïŒ { #nestjs-and-angular }
+### [NestJS](https://nestjs.com/)ïŒè [Angular](https://angular.io/)ïŒ { #nestjs-and-angular }
éçè³äžæ¯ PythonãNestJS æ¯å Angular åçŒç JavaScriptïŒTypeScriptïŒNodeJS æ¡æ¶ã
@@ -259,13 +259,13 @@ Flask-apispec ç±è Marshmallow çžåçéçŒè
åµå»ºã
///
-###
Sanic { #sanic }
+### [Sanic](https://sanic.readthedocs.io/en/latest/) { #sanic }
宿¯ææ©åºæŒ `asyncio` çæ¥µé«é Python æ¡æ¶ä¹äžïŒäžŠååŸåŸå Flaskã
/// note | æè¡çްç¯
-å®äœ¿çš
`uvloop` å代é èšç Python `asyncio` äºä»¶åãé乿¯å®åŠæ€ä¹å¿«çåå ã
+å®äœ¿çš [`uvloop`](https://github.com/MagicStack/uvloop) å代é èšç Python `asyncio` äºä»¶åãé乿¯å®åŠæ€ä¹å¿«çåå ã
宿顝åçŒäº Uvicorn è StarletteïŒèåšå
¬éçåºæºæž¬è©ŠäžïŒå®åç®åæ¯ Sanic æŽå¿«ã
@@ -279,7 +279,7 @@ Flask-apispec ç±è Marshmallow çžåçéçŒè
åµå»ºã
///
-###
Falcon { #falcon }
+### [Falcon](https://falconframework.org/) { #falcon }
Falcon æ¯åŠäžåé«æèœ Python æ¡æ¶ïŒèšèšäžæ¥µç°¡ïŒäžŠäœçºå
¶ä»æ¡æ¶ïŒåŠ HugïŒçåºç€ã
@@ -297,7 +297,7 @@ Falcon æ¯åŠäžåé«æèœ Python æ¡æ¶ïŒèšèšäžæ¥µç°¡ïŒäžŠäœçºå
¶ä»
///
-###
Molten { #molten }
+### [Molten](https://moltenframework.com/) { #molten }
æåš **FastAPI** æé çæ©æçŒçŸäº Moltenã宿äžäºçžç¶é¡äŒŒçæ³æ³ïŒ
@@ -321,7 +321,7 @@ Falcon æ¯åŠäžåé«æèœ Python æ¡æ¶ïŒèšèšäžæ¥µç°¡ïŒäžŠäœçºå
¶ä»
///
-###
Hug { #hug }
+### [Hug](https://github.com/hugapi/hug) { #hug }
Hug æ¯ææ©äœ¿çš Python åå¥æç€ºäŸå®£å API åæžåå¥çæ¡æ¶ä¹äžã鿝ååŸæ£çé»åïŒä¹åçŒäºå
¶ä»å·¥å
·ã
@@ -337,7 +337,7 @@ Hug æ¯ææ©äœ¿çš Python åå¥æç€ºäŸå®£å API åæžåå¥çæ¡æ¶ä¹äž
/// info
-Hug ç± Timothy Crosley åµå»ºïŒä»åæä¹æ¯
`isort` çäœè
ïŒäžåèªåæåº Python å¯å
¥ç奜工å
·ã
+Hug ç± Timothy Crosley åµå»ºïŒä»åæä¹æ¯ [`isort`](https://github.com/timothycrosley/isort) çäœè
ïŒäžåèªåæåº Python å¯å
¥ç奜工å
·ã
///
@@ -351,7 +351,7 @@ Hug åçŒ **FastAPI** åšåœåŒäžå®£å `response` åæžä»¥èšå®æšé è Co
///
-###
APIStar (<= 0.5) { #apistar-0-5 }
+### [APIStar](https://github.com/encode/apistar) (<= 0.5) { #apistar-0-5 }
åšæ±ºå®æé **FastAPI** ä¹åïŒææŸå°äº **APIStar** 䌺æåšãå®å¹Ÿä¹å
·åææå°æŸçäžåïŒèäžèšèšåŸåºè²ã
@@ -401,7 +401,7 @@ APIStar ç± Tom Christie åµå»ºãä»ä¹åµå»ºäºïŒ
## **FastAPI** ææ¡çšçå·¥å
· { #used-by-fastapi }
-###
Pydantic { #pydantic }
+### [Pydantic](https://docs.pydantic.dev/) { #pydantic }
Pydantic æ¯åºæŒ Python åå¥æç€ºïŒå®çŸ©è³æé©èãåºååèæä»¶ïŒäœ¿çš JSON SchemaïŒçåœåŒåº«ã
@@ -417,7 +417,7 @@ Pydantic æ¯åºæŒ Python åå¥æç€ºïŒå®çŸ©è³æé©èãåºååèæä»¶
///
-###
Starlette { #starlette }
+### [Starlette](https://www.starlette.dev/) { #starlette }
Starlette æ¯äžåèŒéç
ASGI æ¡æ¶ïŒå·¥å
·éïŒéåžžé©åçšäŸå»ºæ§é«æèœç asyncio æåã
@@ -458,11 +458,11 @@ ASGI æ¯ç± Django æ žå¿åéæå¡æ£åšéçŒçæ°ãæšæºããå®å°æª
`FastAPI` éåé¡å¥æ¬èº«çŽæ¥ç¹Œæ¿èª `Starlette` é¡å¥ã
-å æ€ïŒå¡æ¯äœ èœçš Starlette åçäºïŒäœ 幟ä¹éœèœçŽæ¥çš **FastAPI** 宿ïŒå çºå®åºæ¬äžå°±æ¯å 匷çç Starletteã
+å æ€ïŒå¡æ¯äœ èœçš Starlette åçäºïŒäœ éœèœçŽæ¥çš **FastAPI** 宿ïŒå çºå®åºæ¬äžå°±æ¯å 匷çç Starletteã
///
-###
Uvicorn { #uvicorn }
+### [Uvicorn](https://www.uvicorn.dev/) { #uvicorn }
Uvicorn æ¯åºæŒ uvloop è httptools çæ¥µé ASGI 䌺æåšã
@@ -476,10 +476,10 @@ Uvicorn æ¯åºæŒ uvloop è httptools çæ¥µé ASGI 䌺æåšã
äœ ä¹å¯ä»¥äœ¿çš `--workers` åœä»€åéžé
ïŒååŸé忥çå€è£œçšäŒºæåšã
-æŽå€çްç¯è«èŠ[éšçœ²](deployment/index.md){.internal-link target=_blank}ç« ç¯ã
+æŽå€çްç¯è«èŠ[éšçœ²](deployment/index.md)ç« ç¯ã
///
## æèœèé床 { #benchmarks-and-speed }
-æ³äºè§£ãæ¯èŒäžŠçåº UvicornãStarlette è FastAPI ä¹éçå·®ç°ïŒè«åè[æèœè©æž¬](benchmarks.md){.internal-link target=_blank}ã
+æ³äºè§£ãæ¯èŒäžŠçåº UvicornãStarlette è FastAPI ä¹éçå·®ç°ïŒè«åè[æèœè©æž¬](benchmarks.md)ã
diff --git a/docs/zh-hant/docs/async.md b/docs/zh-hant/docs/async.md
index a03d71815f..9a08938ca5 100644
--- a/docs/zh-hant/docs/async.md
+++ b/docs/zh-hant/docs/async.md
@@ -141,7 +141,7 @@ def results():
/// info
-æŒäº®çæç«äŸèª
Ketrina Thompson. ðš
+æŒäº®çæç«äŸèª [Ketrina Thompson](https://www.instagram.com/ketrinadrawsalot)ã ðš
///
@@ -207,7 +207,7 @@ def results():
/// info
-æŒäº®çæç«äŸèª
Ketrina Thompson. ðš
+æŒäº®çæç«äŸèª [Ketrina Thompson](https://www.instagram.com/ketrinadrawsalot)ã ðš
///
@@ -245,13 +245,13 @@ def results():
éçš®ãçåŸ
ã ð é垞以埮ç§äŸè¡¡éïŒäœçޝå èµ·äŸïŒæçµéæ¯è±è²»äºåŸå€çåŸ
æéã
-éå°±æ¯çºä»éºŒå°æŒ Web API äŸèªªïŒäœ¿çšé忥çšåŒç¢Œ âžð⯠æ¯éåžžææçŸ©çã
+éå°±æ¯çºä»éºŒå°æŒ Web API äŸèªªïŒäœ¿çšé忥çšåŒç¢Œ âžð⯠æ¯éåžžææå³çã
éçš®é¡åçéåæ¥æ§æ£æ¯ NodeJS æåçåå ïŒå管 NodeJS äžæ¯å¹³è¡çïŒïŒé乿¯ Go èªèšäœçºçšåŒèªèšçäžå匷倧åªå¢ã
éè **FastAPI** æèœæäŸçæ§èœæ°Žå¹³çžåã
-äœ å¯ä»¥åæå©çšäžŠè¡æ§åå¹³è¡æ§ïŒé²äžæ¥æåæèœïŒéæ¯å€§å€æžå·²æž¬è©Šç NodeJS æ¡æ¶éœæŽå¿«ïŒäžŠäžè Go èªèšçžç¶ïŒè Go æ¯äžçš®æŽæ¥è¿ C çç·šè¯èªèšïŒ
æè¬ StarletteïŒã
+äœ å¯ä»¥åæå©çšäžŠè¡æ§åå¹³è¡æ§ïŒé²äžæ¥æåæèœïŒéæ¯å€§å€æžå·²æž¬è©Šç NodeJS æ¡æ¶éœæŽå¿«ïŒäžŠäžè Go èªèšçžç¶ïŒè Go æ¯äžçš®æŽæ¥è¿ C çç·šè¯èªèšïŒ[æè¬ Starlette](https://www.techempower.com/benchmarks/#section=data-r17&hw=ph&test=query&l=zijmkf-1)ïŒã
### äžŠè¡æ¯å¹³è¡æŽå¥œåïŒ { #is-concurrency-better-than-parallelism }
@@ -298,7 +298,7 @@ def results():
éäžé»ïŒåå äž Python æ¯ **è³æç§åž**ãæ©åšåžç¿ïŒå°€å
¶æ¯æ·±åºŠåžç¿çäž»èŠèªèšïŒè® **FastAPI** æçºè³æç§åž/æ©åšåžç¿ Web API åæçšçšåŒïŒä»¥åèš±å€å
¶ä»æçšçšåŒïŒççµäœ³éžæã
-æ³äºè§£åŠäœåšçç¢ç°å¢äžå¯ŠçŸéçš®å¹³è¡æ§ïŒè«åèŠ [éšå±¬](deployment/index.md){.internal-link target=_blank}ã
+æ³äºè§£åŠäœåšçç¢ç°å¢äžå¯ŠçŸéçš®å¹³è¡æ§ïŒè«åèŠ [éšå±¬](deployment/index.md)ã
## `async` å `await` { #async-and-await }
@@ -363,13 +363,13 @@ async def read_burgers():
### 線寫èªå·±çé忥çšåŒç¢Œ { #write-your-own-async-code }
-StarletteïŒå **FastAPI**ïŒæ¯åºæŒ
AnyIO 寊äœçïŒé䜿åŸå®åè Python æšæºåœåŒåº«
asyncio å
Trio çžå®¹ã
+StarletteïŒå **FastAPI**ïŒæ¯åºæŒ [AnyIO](https://anyio.readthedocs.io/en/stable/) 寊äœçïŒé䜿åŸå®åè Python æšæºåœåŒåº« [asyncio](https://docs.python.org/3/library/asyncio-task.html) å [Trio](https://trio.readthedocs.io/en/stable/) çžå®¹ã
-ç¹å¥æ¯ïŒäœ å¯ä»¥çŽæ¥äœ¿çš
AnyIO äŸèçæŽè€éç䞊è¡äœ¿çšæ¡äŸïŒéäºæ¡äŸéèŠäœ åšèªå·±ççšåŒç¢Œäžäœ¿çšæŽé«éçæš¡åŒã
+ç¹å¥æ¯ïŒäœ å¯ä»¥çŽæ¥äœ¿çš [AnyIO](https://anyio.readthedocs.io/en/stable/) äŸèçæŽè€éç䞊è¡äœ¿çšæ¡äŸïŒéäºæ¡äŸéèŠäœ åšèªå·±ççšåŒç¢Œäžäœ¿çšæŽé«éçæš¡åŒã
-å³äœ¿äœ äžäœ¿çš **FastAPI**ïŒäœ ä¹å¯ä»¥äœ¿çš
AnyIO äŸæ°å¯«èªå·±çé忥æçšçšåŒïŒäžŠç²åŸé«çžå®¹æ§åäžäºå¥œèïŒäŸåŠãçµæ§å䞊è¡ãïŒã
+å³äœ¿äœ äžäœ¿çš **FastAPI**ïŒäœ ä¹å¯ä»¥äœ¿çš [AnyIO](https://anyio.readthedocs.io/en/stable/) äŸæ°å¯«èªå·±çé忥æçšçšåŒïŒäžŠç²åŸé«çžå®¹æ§åäžäºå¥œèïŒäŸåŠãçµæ§å䞊è¡ãïŒã
-æåŠå€åš AnyIO ä¹äžåäºäžåèå°è£çåœåŒåº«ïŒçšåŸ®æ¹é²åå¥èš»è§£ä»¥ç²åŸæŽå¥œç**èªåè£å
š**ã**峿é¯èª€**çãåæå®ä¹æäŸååçä»ç޹èæåžïŒå¹«å©äœ **çè§£**䞊æ°å¯«**èªå·±çé忥çšåŒç¢Œ**ïŒ
Asyncerãç¶äœ éèŠ**å°é忥çšåŒç¢Œèäžè¬**ïŒé»å¡/忥ïŒ**çšåŒç¢ŒæŽå**æïŒå®ç¹å¥å¯Šçšã
+æåŠå€åš AnyIO ä¹äžåäºäžåèå°è£çåœåŒåº«ïŒçšåŸ®æ¹é²åå¥èš»è§£ä»¥ç²åŸæŽå¥œç**èªåè£å
š**ã**峿é¯èª€**çãåæå®ä¹æäŸååçä»ç޹èæåžïŒå¹«å©äœ **çè§£**䞊æ°å¯«**èªå·±çé忥çšåŒç¢Œ**ïŒ[Asyncer](https://asyncer.tiangolo.com/)ãç¶äœ éèŠ**å°é忥çšåŒç¢Œèäžè¬**ïŒé»å¡/忥ïŒ**çšåŒç¢ŒæŽå**æïŒå®ç¹å¥å¯Šçšã
### å
¶ä»åœ¢åŒçé忥çšåŒç¢Œ { #other-forms-of-asynchronous-code }
@@ -381,7 +381,7 @@ StarletteïŒå **FastAPI**ïŒæ¯åºæŒ
GeventãäœéäºçšåŒç¢ŒèŠæŽé£ä»¥çè§£ã調詊åæèã
+åšèŒèç Python çæ¬äžïŒäœ å¯èœæäœ¿çšå€å·è¡ç·æ [Gevent](https://www.gevent.org/)ãäœéäºçšåŒç¢ŒèŠæŽé£ä»¥çè§£ã調詊åæèã
åšèŒèç NodeJS / çèŠœåš JavaScript äžïŒäœ æäœ¿çšãååŒãïŒéå¯èœæå°èŽâååŒå°çâã
@@ -419,15 +419,15 @@ StarletteïŒå **FastAPI**ïŒæ¯åºæŒ
I/O ççšåŒç¢Œã
-äžéïŒåšéå
©çš®æ
æ³äžïŒ**FastAPI** [ä»ç¶åŸå¿«](index.md#performance){.internal-link target=_blank}ïŒè³å°èäœ ä¹åçæ¡æ¶çžç¶ïŒæè
æŽå¿«ïŒã
+äžéïŒåšéå
©çš®æ
æ³äžïŒ**FastAPI** [ä»ç¶åŸå¿«](index.md#performance)ïŒè³å°èäœ ä¹åçæ¡æ¶çžç¶ïŒæè
æŽå¿«ïŒã
### äŸè³Žé
(Dependencies) { #dependencies }
-åæš£é©çšæŒ[äŸè³Žé
](tutorial/dependencies/index.md){.internal-link target=_blank}ãåŠæäŸè³Žé
æ¯äžåæšæºç `def` åœåŒïŒèäžæ¯ `async def`ïŒé£éºŒå®åšå€éšçå·è¡ç·æ± 被éè¡ã
+åæš£é©çšæŒ[äŸè³Žé
](tutorial/dependencies/index.md)ãåŠæäŸè³Žé
æ¯äžåæšæºç `def` åœåŒïŒèäžæ¯ `async def`ïŒé£éºŒå®åšå€éšçå·è¡ç·æ± 被éè¡ã
### åäŸè³Žé
{ #sub-dependencies }
-äœ å¯ä»¥ææå€åçžäºäŸè³ŽçäŸè³Žé
å[åäŸè³Žé
](tutorial/dependencies/sub-dependencies.md){.internal-link target=_blank}ïŒäœçºåœåŒå®çŸ©çåæžïŒïŒå
¶äžäžäºå¯èœæ¯çš `async def` 宣åïŒä¹å¯èœæ¯çš `def` 宣åãå®åä»ç¶å¯ä»¥æ£åžžéäœïŒçš `def` å®çŸ©çé£äºå°æåšå€éšçå·è¡ç·äžåŒå«ïŒäŸèªå·è¡ç·æ± ïŒïŒèäžæ¯è¢«ãçåŸ
ãã
+äœ å¯ä»¥ææå€åçžäºäŸè³ŽçäŸè³Žé
å[åäŸè³Žé
](tutorial/dependencies/sub-dependencies.md)ïŒäœçºåœåŒå®çŸ©çåæžïŒïŒå
¶äžäžäºå¯èœæ¯çš `async def` 宣åïŒä¹å¯èœæ¯çš `def` 宣åãå®åä»ç¶å¯ä»¥æ£åžžéäœïŒçš `def` å®çŸ©çé£äºå°æåšå€éšçå·è¡ç·äžåŒå«ïŒäŸèªå·è¡ç·æ± ïŒïŒèäžæ¯è¢«ãçåŸ
ãã
### å
¶ä»èŒå©åœåŒ { #other-utility-functions }
diff --git a/docs/zh-hant/docs/benchmarks.md b/docs/zh-hant/docs/benchmarks.md
index c5b76700b3..2b5b3f7ee1 100644
--- a/docs/zh-hant/docs/benchmarks.md
+++ b/docs/zh-hant/docs/benchmarks.md
@@ -1,6 +1,6 @@
# åºæºæž¬è©Š { #benchmarks }
-ç±ç¬¬äžæ¹æ©æ§ TechEmpower çåºæºæž¬è©Šè¡šæåš Uvicorn äžéè¡ç **FastAPI** æçšçšåŒæ¯ æå¿«ç Python å¯ç𿡿¶ä¹äžïŒå
æ¬¡æŒ Starlette å Uvicorn æ¬èº«ïŒæŒ FastAPI å
§éšäœ¿çšïŒã
+ç±ç¬¬äžæ¹æ©æ§ TechEmpower çåºæºæž¬è©Šè¡šæåš Uvicorn äžéè¡ç **FastAPI** æçšçšåŒæ¯ [æå¿«ç Python å¯ç𿡿¶ä¹äž](https://www.techempower.com/benchmarks/#section=test&runid=7464e520-0dc2-473d-bd34-dbdfd7e85911&hw=ph&test=query&l=zijzen-7)ïŒå
æ¬¡æŒ Starlette å Uvicorn æ¬èº«ïŒæŒ FastAPI å
§éšäœ¿çšïŒã
äœæ¯åšæ¥çåºæºåŸååå°æ¯æïŒè«æ³šæä»¥äžå¹Ÿé»ã
diff --git a/docs/zh-hant/docs/deployment/cloud.md b/docs/zh-hant/docs/deployment/cloud.md
index fffb2fcfeb..86d216ca6f 100644
--- a/docs/zh-hant/docs/deployment/cloud.md
+++ b/docs/zh-hant/docs/deployment/cloud.md
@@ -6,7 +6,7 @@
## FastAPI Cloud { #fastapi-cloud }
-**
FastAPI Cloud** ç± **FastAPI** çåäžäœäœè
èåéæé ã
+**[FastAPI Cloud](https://fastapicloud.com)** ç± **FastAPI** çåäžäœäœè
èåéæé ã
å®è®äœ 以æå°çæå
¥ïŒç°¡å **建眮**ã**éšçœ²** è **åå** API çæµçšã
@@ -16,9 +16,9 @@ FastAPI Cloud æ¯ *FastAPI and friends* éæºå°æ¡çäž»èŠèŽå©èè³éæ
## é²ç«¯äŸæå - èŽå©å { #cloud-providers-sponsors }
-å
¶ä»äžäºé²ç«¯äŸæå乿 âš [**èŽå© FastAPI**](../help-fastapi.md#sponsor-the-author){.internal-link target=_blank} âšãð
+å
¶ä»äžäºé²ç«¯äŸæå乿 âš [**èŽå© FastAPI**](../help-fastapi.md#sponsor-the-author) âšãð
äœ ä¹å¯ä»¥åèä»åçæå䞊詊çšå
¶æåïŒ
-*
Render
-*
Railway
+* [Render](https://docs.render.com/deploy-fastapi?utm_source=deploydoc&utm_medium=referral&utm_campaign=fastapi)
+* [Railway](https://docs.railway.com/guides/fastapi?utm_medium=integration&utm_source=docs&utm_campaign=fastapi)
diff --git a/docs/zh-hant/docs/deployment/concepts.md b/docs/zh-hant/docs/deployment/concepts.md
index 0cca31d260..0b8677bfd3 100644
--- a/docs/zh-hant/docs/deployment/concepts.md
+++ b/docs/zh-hant/docs/deployment/concepts.md
@@ -25,7 +25,7 @@
## å®å
šæ§ - HTTPS { #security-https }
-åš[åäžç« éæŒ HTTPS](https.md){.internal-link target=_blank} äžïŒæååžå° HTTPS åŠäœçºäœ ç API æäŸå å¯ã
+åš[åäžç« éæŒ HTTPS](https.md) äžïŒæååžå° HTTPS åŠäœçºäœ ç API æäŸå å¯ã
æåä¹çå°ïŒHTTPS éåžžç±æçšäŒºæåšå€éšçå
ä»¶æäŸïŒå³ TLS Termination Proxyã
@@ -190,7 +190,7 @@
### å·¥äœè¡çšè飿¥å { #worker-processes-and-ports }
-éèšåŸæä»¶äž[éæŒ HTTPS](https.md){.internal-link target=_blank} ç說æåïŒåšäžå°äŒºæåšäžïŒäžçµ IP è飿¥å ççµååªèœç±ãäžåè¡çšãç£èœïŒ
+éèšåŸæä»¶äž[éæŒ HTTPS](https.md) ç說æåïŒåšäžå°äŒºæåšäžïŒäžçµ IP è飿¥å ççµååªèœç±ãäžåè¡çšãç£èœïŒ
éè£¡åæš£é©çšã
@@ -243,7 +243,7 @@
å
奿å¿é裡æå°çã容åšããDocker æ Kubernetes åŠæçŸåšéäžå€ªæã
-ææåšæªäŸçç« ç¯é²äžæ¥èªªæå®¹åšæ åãDockerãKubernetes ççïŒ[容åšäžç FastAPI - Docker](docker.md){.internal-link target=_blank}ã
+ææåšæªäŸçç« ç¯é²äžæ¥èªªæå®¹åšæ åãDockerãKubernetes ççïŒ[容åšäžç FastAPI - Docker](docker.md)ã
///
@@ -281,7 +281,7 @@
/// tip
-ææåšæªäŸéæŒå®¹åšçç« ç¯æäŸæŽå
·é«çç¯äŸïŒ[容åšäžç FastAPI - Docker](docker.md){.internal-link target=_blank}ã
+ææåšæªäŸéæŒå®¹åšçç« ç¯æäŸæŽå
·é«çç¯äŸïŒ[容åšäžç FastAPI - Docker](docker.md)ã
///
diff --git a/docs/zh-hant/docs/deployment/docker.md b/docs/zh-hant/docs/deployment/docker.md
index 87f4e6f9f0..03b9f2f76e 100644
--- a/docs/zh-hant/docs/deployment/docker.md
+++ b/docs/zh-hant/docs/deployment/docker.md
@@ -1,6 +1,6 @@
# åšå®¹åšäžäœ¿çš FastAPI - Docker { #fastapi-in-containers-docker }
-éšçœ² FastAPI æçšæïŒäžååžžèŠåæ³æ¯å»ºçœ®äžåãLinux å®¹åšæ åïŒcontainer imageïŒããé垞䜿çš
Docker äŸå®æãä¹åŸäœ å¯ä»¥çšå€ç𮿹åŒéšçœ²è©²å®¹åšæ åã
+éšçœ² FastAPI æçšæïŒäžååžžèŠåæ³æ¯å»ºçœ®äžåãLinux å®¹åšæ åïŒcontainer imageïŒããéåžžäœ¿çš [Docker](https://www.docker.com/) äŸå®æãä¹åŸäœ å¯ä»¥çšå€ç𮿹åŒéšçœ²è©²å®¹åšæ åã
äœ¿çš Linux å®¹åšæå€çš®åªé»ïŒå
æ¬å®å
šæ§ãå¯éçŸæ§ãç°¡å®æ§çã
@@ -60,16 +60,16 @@ Linux 容åšäœ¿çšèäž»æ©ïŒæ©åšãèæ¬æ©ãé²ç«¯äŒºæåšçïŒçžå
Docker æ¯çšäŸå»ºç«è管çå®¹åšæ åè容åšçäž»èŠå·¥å
·ä¹äžã
-乿äžåå
¬éç
Docker HubïŒå
§å«èš±å€å·¥å
·ãç°å¢ãè³æåº«èæçšçé å
補äœã宿¹æ åãã
+乿äžåå
¬éç [Docker Hub](https://hub.docker.com/)ïŒå
§å«èš±å€å·¥å
·ãç°å¢ãè³æåº«èæçšçé å
補äœã宿¹æ åãã
-äŸåŠïŒæå®æ¹ç
Python æ åã
+äŸåŠïŒæå®æ¹ç [Python æ å](https://hub.docker.com/_/python)ã
ä¹æèš±å€å
¶ä»éå°äžåçšéçæ åïŒäŸåŠè³æåº«ïŒ
-*
PostgreSQL
-*
MySQL
-*
MongoDB
-*
Redis çã
+* [PostgreSQL](https://hub.docker.com/_/postgres)
+* [MySQL](https://hub.docker.com/_/mysql)
+* [MongoDB](https://hub.docker.com/_/mongo)
+* [Redis](https://hub.docker.com/_/redis) çã
䜿çšé 補çå®¹åšæ ååŸå®¹æãçµåã䞊䜿çšäžåå·¥å
·ãäŸåŠïŒå詊äžåæ°è³æåº«ã倿žæ
æ³äžïŒäœ å¯ä»¥äœ¿çšå®æ¹æ åïŒäžŠå
çšç°å¢è®æžå 以èšå®ã
@@ -111,7 +111,7 @@ Docker æ¯çšäŸå»ºç«è管çå®¹åšæ åè容åšçäž»èŠå·¥å
·ä¹äžã
æåžžèŠçæ¹åŒæ¯æºåäžå `requirements.txt` æªæ¡ïŒéè¡ååºå¥ä»¶åçš±èçæ¬ã
-ç¶ç¶ïŒäœ æçšèåš [éæŒ FastAPI çæ¬](versions.md){.internal-link target=_blank} äžè®å°ççžåæŠå¿µïŒäŸèšå®çæ¬ç¯åã
+ç¶ç¶ïŒäœ æçšèåš [éæŒ FastAPI çæ¬](versions.md) äžè®å°ççžåæŠå¿µïŒäŸèšå®çæ¬ç¯åã
äŸåŠïŒäœ ç `requirements.txt` å¯èœåéæš£ïŒ
@@ -238,7 +238,7 @@ CMD ["fastapi", "run", "app/main.py", "--port", "80"]
#### äœ¿çš `CMD` ç Exec åœ¢åŒ { #use-cmd-exec-form }
-Docker ç
`CMD` æä»€å¯ä»¥æå
©çš®å¯«æ³ïŒ
+Docker ç [`CMD`](https://docs.docker.com/reference/dockerfile/#cmd) æä»€å¯ä»¥æå
©çš®å¯«æ³ïŒ
â
Exec 圢åŒïŒ
@@ -254,11 +254,11 @@ CMD ["fastapi", "run", "app/main.py", "--port", "80"]
CMD fastapi run app/main.py --port 80
```
-åå¿
çžœæ¯äœ¿çš exec 圢åŒïŒä»¥ç¢ºä¿ FastAPI èœå€ åªé
å°ééïŒäžŠè§žçŒ [lifespan events](../advanced/events.md){.internal-link target=_blank}ã
+åå¿
çžœæ¯äœ¿çš exec 圢åŒïŒä»¥ç¢ºä¿ FastAPI èœå€ åªé
å°ééïŒäžŠè§žçŒ [lifespan events](../advanced/events.md)ã
-äœ å¯ä»¥åš
Docker éæŒ shell è exec 圢åŒçæä»¶é±è®æŽå€ã
+äœ å¯ä»¥åš [Docker éæŒ shell è exec 圢åŒçæä»¶](https://docs.docker.com/reference/dockerfile/#shell-and-exec-form) é±è®æŽå€ã
-äœ¿çš `docker compose` æéæç¹å¥æé¡¯ãæè¡çްç¯è«èŠé段 Docker Compose åžžèŠåé¡ïŒ
çºä»éºŒæçæåèŠè± 10 ç§æéæ°å»ºç«æåæ¢ïŒ
+äœ¿çš `docker compose` æéæç¹å¥æé¡¯ãæè¡çްç¯è«èŠé段 Docker Compose åžžèŠåé¡ïŒ[çºä»éºŒæçæåèŠè± 10 ç§æéæ°å»ºç«æåæ¢ïŒ](https://docs.docker.com/compose/faq/#why-do-my-services-take-10-seconds-to-recreate-or-stop)
#### ç®éçµæ§ { #directory-structure }
@@ -352,7 +352,7 @@ $ docker run -d --name mycontainer -p 80:80 myimage
## æª¢æ¥ { #check-it }
-äœ æè©²å¯ä»¥éé Docker 容åšçç¶²åæª¢æ¥ïŒäŸåŠïŒ
http://192.168.99.100/items/5?q=somequery æ
http://127.0.0.1/items/5?q=somequeryïŒæçæçã䜿çšäœ ç Docker äž»æ©ïŒã
+äœ æè©²å¯ä»¥éé Docker 容åšçç¶²åæª¢æ¥ïŒäŸåŠïŒ[http://192.168.99.100/items/5?q=somequery](http://192.168.99.100/items/5?q=somequery) æ [http://127.0.0.1/items/5?q=somequery](http://127.0.0.1/items/5?q=somequery)ïŒæçæçã䜿çšäœ ç Docker äž»æ©ïŒã
äœ æçå°é¡äŒŒé暣ïŒ
@@ -362,17 +362,17 @@ $ docker run -d --name mycontainer -p 80:80 myimage
## äºååŒ API æä»¶ { #interactive-api-docs }
-çŸåšäœ å¯ä»¥ååŸ
http://192.168.99.100/docs æ
http://127.0.0.1/docsïŒæçæçã䜿çšäœ ç Docker äž»æ©ïŒã
+çŸåšäœ å¯ä»¥ååŸ [http://192.168.99.100/docs](http://192.168.99.100/docs) æ [http://127.0.0.1/docs](http://127.0.0.1/docs)ïŒæçæçã䜿çšäœ ç Docker äž»æ©ïŒã
-äœ æçå°èªåç¢ççäºååŒ API æä»¶ïŒç±
Swagger UI æäŸïŒïŒ
+äœ æçå°èªåç¢ççäºååŒ API æä»¶ïŒç± [Swagger UI](https://github.com/swagger-api/swagger-ui) æäŸïŒïŒ

## æ¿ä»£ç API æä»¶ { #alternative-api-docs }
-äœ ä¹å¯ä»¥ååŸ
http://192.168.99.100/redoc æ
http://127.0.0.1/redocïŒæçæçã䜿çšäœ ç Docker äž»æ©ïŒã
+äœ ä¹å¯ä»¥ååŸ [http://192.168.99.100/redoc](http://192.168.99.100/redoc) æ [http://127.0.0.1/redoc](http://127.0.0.1/redoc)ïŒæçæçã䜿çšäœ ç Docker äž»æ©ïŒã
-äœ æçå°åŠäžçš®èªåç¢ççæä»¶ïŒç±
ReDoc æäŸïŒïŒ
+äœ æçå°åŠäžçš®èªåç¢ççæä»¶ïŒç± [ReDoc](https://github.com/Rebilly/ReDoc) æäŸïŒïŒ

@@ -413,7 +413,7 @@ CMD ["fastapi", "run", "main.py", "--port", "80"]
## éšçœ²æŠå¿µ { #deployment-concepts }
-æåçšå®¹åšçè§åºŠåè«äžæ¬¡éšåçžåç[éšçœ²æŠå¿µ](concepts.md){.internal-link target=_blank}ã
+æåçšå®¹åšçè§åºŠåè«äžæ¬¡éšåçžåç[éšçœ²æŠå¿µ](concepts.md)ã
容åšäž»èŠæ¯ç°¡åæçšã建眮èéšçœ²ãæµçšçå·¥å
·ïŒäœå®åäžåŒ·å¶ç¹å®çæ¹åŒäŸèçéäºãéšçœ²æŠå¿µãïŒèæ¯æå€çš®çç¥å¯éžã
@@ -432,7 +432,7 @@ CMD ["fastapi", "run", "main.py", "--port", "80"]
è¥å
èçŠæŒ FastAPI æçšçãå®¹åšæ åãïŒä»¥åçšåŸçå·è¡äžã容åšãïŒïŒHTTPS éåžžæç±åŠäžåå·¥å
·åšãå€éšãèçã
-å®å¯ä»¥æ¯åŠäžå容åšïŒäŸåŠäœ¿çš
TraefikïŒäŸèçãHTTPSã以åãèªåãååŸãæèãã
+å®å¯ä»¥æ¯åŠäžå容åšïŒäŸåŠäœ¿çš [Traefik](https://traefik.io/)ïŒäŸèçãHTTPSã以åãèªåãååŸãæèãã
/// tip | æç€º
@@ -454,7 +454,7 @@ Traefik è DockerãKubernetes çæŽåè¯å¥œïŒå æ€çºäœ ç容åšèšå®è
## è€æ¬ - è¡çšæžé { #replication-number-of-processes }
-åŠæäœ åšæ KubernetesãDocker Swarm ModeãNomadïŒæå
¶ä»é¡äŒŒç忣åŒå®¹åšç®¡ç系統çãå¢éãäžéäœïŒé£äœ å€§æŠæåžæåšãå¢éå±€çŽãèçãè€æ¬ãïŒèäžæ¯åšæ¯å容åšå
§äœ¿çšãè¡çšç®¡çåšãïŒäŸåŠåž¶æ workers ç UvicornïŒã
+åŠæäœ åšæ KubernetesãDocker Swarm ModeãNomadïŒæå
¶ä»é¡äŒŒç忣åŒå®¹åšç®¡ç系統çã
å¢éãäžéäœïŒé£äœ å€§æŠæåžæåšãå¢éå±€çŽãèçãè€æ¬ãïŒèäžæ¯åšæ¯å容åšå
§äœ¿çšãè¡çšç®¡çåšãïŒäŸåŠåž¶æ workers ç UvicornïŒã
å Kubernetes éé¡ç忣åŒå®¹åšç®¡ç系統ïŒéåžžå
§å»ºèçã容åšè€æ¬ã以忝æŽé²å
¥è«æ±çãè² èŒå¹³è¡¡ãçèœåââå
šéšéœåšãå¢éå±€çŽãã
@@ -558,7 +558,7 @@ CMD ["fastapi", "run", "app/main.py", "--port", "80", "--workers", "4"]
/// info | è³èš
-åŠæäœ äœ¿çš KubernetesïŒéå€§æŠææ¯äžå
Init Containerã
+åŠæäœ äœ¿çš KubernetesïŒéå€§æŠææ¯äžå [Init Container](https://kubernetes.io/docs/concepts/workloads/pods/init-containers/)ã
///
@@ -570,7 +570,7 @@ CMD ["fastapi", "run", "app/main.py", "--port", "80", "--workers", "4"]
### åºåº Docker æ å { #base-docker-image }
-æŸç¶æäžå宿¹ç FastAPI Docker æ åïŒ
tiangolo/uvicorn-gunicorn-fastapiãäœçŸåšå·²è¢«æ£çšãâïž
+æŸç¶æäžå宿¹ç FastAPI Docker æ åïŒ[tiangolo/uvicorn-gunicorn-fastapi](https://github.com/tiangolo/uvicorn-gunicorn-fastapi-docker)ãäœçŸåšå·²è¢«æ£çšãâïž
äœ å€§æŠãäžæè©²ã䜿çšéååºåº Docker æ åïŒæå
¶ä»é¡äŒŒçïŒã
@@ -600,7 +600,7 @@ CMD ["fastapi", "run", "app/main.py", "--port", "80", "--workers", "4"]
## äœ¿çš `uv` ç Docker æ å { #docker-image-with-uv }
-åŠæäœ äœ¿çš
uv äŸå®è£è管çå°æ¡ïŒäœ å¯ä»¥åèä»åç
uv Docker æåã
+åŠæäœ äœ¿çš [uv](https://github.com/astral-sh/uv) äŸå®è£è管çå°æ¡ïŒäœ å¯ä»¥åèä»åç [uv Docker æå](https://docs.astral.sh/uv/guides/integration/docker/)ã
## çžœçµ { #recap }
diff --git a/docs/zh-hant/docs/deployment/fastapicloud.md b/docs/zh-hant/docs/deployment/fastapicloud.md
index 5663590d14..4b6fb86b47 100644
--- a/docs/zh-hant/docs/deployment/fastapicloud.md
+++ b/docs/zh-hant/docs/deployment/fastapicloud.md
@@ -1,6 +1,6 @@
# FastAPI Cloud { #fastapi-cloud }
-äœ å¯ä»¥çšãäžè¡æä»€ãæäœ ç FastAPI æçšçšåŒéšçœ²å°
FastAPI CloudãåŠæäœ éæ²å å
¥ïŒå¿«å»ç»èšçååå®å§ïŒð
+äœ å¯ä»¥çšãäžè¡æä»€ãæäœ ç FastAPI æçšçšåŒéšçœ²å° [FastAPI Cloud](https://fastapicloud.com)ãåŠæäœ éæ²å å
¥ïŒå¿«å»ç»èšçååå®å§ïŒð
## ç»å
¥ { #login }
@@ -40,7 +40,7 @@ Deploying to FastAPI Cloud...
## éæŒ FastAPI Cloud { #about-fastapi-cloud }
-**
FastAPI Cloud** ç± **FastAPI** çäœè
èåéæé ã
+**[FastAPI Cloud](https://fastapicloud.com)** ç± **FastAPI** çäœè
èåéæé ã
å®ä»¥æå°çå¿åïŒç²Ÿç°¡å建ç«ãéšçœ²èåå API çæµçšã
diff --git a/docs/zh-hant/docs/deployment/https.md b/docs/zh-hant/docs/deployment/https.md
index 0934b02831..ddafcb34b1 100644
--- a/docs/zh-hant/docs/deployment/https.md
+++ b/docs/zh-hant/docs/deployment/https.md
@@ -10,7 +10,7 @@
///
-æ³åŸäœ¿çšè
è§åºŠåžç¿ HTTPS åºç€ïŒè«åè
https://howhttps.works/ã
+æ³åŸäœ¿çšè
è§åºŠåžç¿ HTTPS åºç€ïŒè«åè [https://howhttps.works/](https://howhttps.works/)ã
æ¥è以éçŒè
è§åºŠïŒè«å¹ŸåéæŒ HTTPS éèŠæ³šæçéé»ïŒ
@@ -28,13 +28,13 @@
* **é èš**æ
æ³äžïŒéè¡šç€ºäœ æ¯å IP äœå**åªèœ**䜿çš**äžåŒµ HTTPS æè**ã
* äžè«äœ ç䌺æåšå€åŒ·æäœ åšäžé¢è·çæçšå€å°ã
* äžéïŒéæ¯æ**è§£æ³**çã
-* åš **TLS** åå®ïŒåš HTTP ä¹åæŒ TCP å±€èçå å¯çåå®ïŒäžæå**æŽå
**çš±çº **
SNI**ã
+* åš **TLS** åå®ïŒåš HTTP ä¹åæŒ TCP å±€èçå å¯çåå®ïŒäžæå**æŽå
**çš±çº **[
SNI](https://en.wikipedia.org/wiki/Server_Name_Indication)**ã
* éå SNI æŽå
è®å®äžäŒºæåšïŒå®äž IP äœåïŒå¯ä»¥ææ**å€åŒµ HTTPS æè**ïŒäžŠæå**å€å HTTPS ç¶²åïŒæçš**ã
* èŠè®å®éäœïŒäŒºæåšäžå¿
é æäžå**å®äž**çå
ä»¶ïŒçšåŒïŒåš**å
¬çš IP**äžç£èœïŒäžææäŒºæåšäžç**ææ HTTPS æè**ã
* åšååŸå®å
šé£ç·**ä¹åŸ**ïŒéèšåå®**ä»ç¶æ¯ HTTP**ã
* éç¶éé **HTTP åå®**å³éïŒäœå
§å®¹æ¯**å å¯**çã
-åžžèŠåæ³æ¯è®äŒºæåšïŒæ©åšãäž»æ©çïŒäžè·**äžåçšåŒïŒHTTP 䌺æåš**äŸ**ç®¡çææ HTTPS çžéå·¥äœ**ïŒæ¥æ¶**å å¯ç HTTPS è«æ±**ãå°å
¶**è§£å¯**æ**çŽ HTTP è«æ±**èœäº€çµŠåå°äŒºæåšäžå¯Šééè¡ç HTTP æçšïŒæ¬äŸçº **FastAPI** æçšïŒãåŸæçšååŸ **HTTP åæ**ãåçšåé©ç **HTTPS æè**å°å
¶**å å¯**䞊以 **HTTPS** å³åçµŠçšæ¶ç«¯ãéé¡äŒºæåšåžžè¢«çš±çº **
TLS çµæ¢ä»£ç (TLS Termination Proxy)**ã
+åžžèŠåæ³æ¯è®äŒºæåšïŒæ©åšãäž»æ©çïŒäžè·**äžåçšåŒïŒHTTP 䌺æåš**äŸ**ç®¡çææ HTTPS çžéå·¥äœ**ïŒæ¥æ¶**å å¯ç HTTPS è«æ±**ãå°å
¶**è§£å¯**æ**çŽ HTTP è«æ±**èœäº€çµŠåå°äŒºæåšäžå¯Šééè¡ç HTTP æçšïŒæ¬äŸçº **FastAPI** æçšïŒãåŸæçšååŸ **HTTP åæ**ãåçšåé©ç **HTTPS æè**å°å
¶**å å¯**䞊以 **HTTPS** å³åçµŠçšæ¶ç«¯ãéé¡äŒºæåšåžžè¢«çš±çº **[TLS çµæ¢ä»£ç](https://en.wikipedia.org/wiki/TLS_termination_proxy)**ã
å¯äœçº TLS çµæ¢ä»£ççéžé
å
æ¬ïŒ
@@ -49,7 +49,7 @@
ååŸéäºæèçæµçšéå»çžç¶ç¹ç£ïŒéèŠèš±å€æçºïŒäžæèçžç¶æè²Žã
-ä¹åŸåºçŸäº **
Let's Encrypt**ã
+ä¹åŸåºçŸäº **[Let's Encrypt](https://letsencrypt.org/)**ã
宿¯ Linux Foundation çå°æ¡ïŒèœ**å
è²»**äžèªååå°æäŸ **HTTPS æè**ãéäºæèæ¡çšæšæºçå¯ç¢Œåžå®å
šæ©å¶ïŒäžæææèŒçïŒçŽ 3 åæïŒïŒå æ€å çºå£œåœçïŒ**å®å
šæ§å
¶å¯ŠæŽå¥œ**ã
@@ -200,9 +200,9 @@ TLS çµæ¢ä»£çæ¥èæäŸç
§å
åååïŒèµ·é»æ¯ `someapp.example.com`
éäºä»£çæšé å
æ¬ïŒ
-*
X-Forwarded-For
-*
X-Forwarded-Proto
-*
X-Forwarded-Host
+* [X-Forwarded-For](https://developer.mozilla.org/en-US/docs/Web/HTTP/Reference/Headers/X-Forwarded-For)
+* [X-Forwarded-Proto](https://developer.mozilla.org/en-US/docs/Web/HTTP/Reference/Headers/X-Forwarded-Proto)
+* [X-Forwarded-Host](https://developer.mozilla.org/en-US/docs/Web/HTTP/Reference/Headers/X-Forwarded-Host)
///
@@ -218,7 +218,7 @@ TLS çµæ¢ä»£çæ¥èæäŸç
§å
åååïŒèµ·é»æ¯ `someapp.example.com`
/// tip
-äœ å¯ä»¥åšæä»¶ [åšä»£çåŸæ¹ - åçšä»£çèœçŒæšé ](../advanced/behind-a-proxy.md#enable-proxy-forwarded-headers){.internal-link target=_blank} äžäºè§£æŽå€ã
+äœ å¯ä»¥åšæä»¶ [åšä»£çåŸæ¹ - åçšä»£çèœçŒæšé ](../advanced/behind-a-proxy.md#enable-proxy-forwarded-headers) äžäºè§£æŽå€ã
///
diff --git a/docs/zh-hant/docs/deployment/index.md b/docs/zh-hant/docs/deployment/index.md
index ddf533efc9..c9d474cacb 100644
--- a/docs/zh-hant/docs/deployment/index.md
+++ b/docs/zh-hant/docs/deployment/index.md
@@ -16,7 +16,7 @@
äœ å¯ä»¥äœ¿çšäžäºå·¥å
·èªè¡**éšçœ²äŒºæåš**ïŒäœ ä¹å¯ä»¥äœ¿çšèœçºäœ 宿éšåå·¥äœç**é²ç«¯æå**ïŒæå
¶ä»å¯èœçéžé
ã
-äŸåŠïŒæåïŒFastAPI çåéïŒæé äº
**FastAPI Cloud**ïŒè®å° FastAPI æçšçšåŒéšçœ²å°é²ç«¯è®åŸç¡å¯èœæµæ¢ïŒäžŠä¿æèäœ¿çš FastAPI éçŒæçžåçéçŒè
é«é©ã
+äŸåŠïŒæåïŒFastAPI çåéïŒæé äº [**FastAPI Cloud**](https://fastapicloud.com)ïŒè® FastAPI æçšçšåŒéšçœ²å°é²ç«¯è®åŸç¡å¯èœæµæ¢ïŒäžŠä¿æèäœ¿çš FastAPI éçŒæçžåçéçŒè
é«é©ã
æå°åäœ å±ç€ºåšéšçœ² **FastAPI** æçšçšåŒæäœ å¯èœæè©²èšäœçäžäºäž»èŠæŠå¿µïŒå管å
¶äžå€§éšåé©çšæŒä»»äœå
¶ä»é¡åç Web æçšçšåŒïŒã
diff --git a/docs/zh-hant/docs/deployment/manually.md b/docs/zh-hant/docs/deployment/manually.md
index bf9f6a93f4..71e9e27c87 100644
--- a/docs/zh-hant/docs/deployment/manually.md
+++ b/docs/zh-hant/docs/deployment/manually.md
@@ -52,11 +52,11 @@ FastAPI æ¡çšå»ºç« Python ç¶²é æ¡æ¶è䌺æåšçæšæº
UvicornïŒé«æèœ ASGI 䌺æåšã
-* HypercornïŒæ¯æŽ HTTP/2 è Trio çåèœç ASGI 䌺æåšã
-* DaphneïŒçº Django Channels æé ç ASGI 䌺æåšã
-* GranianïŒéå° Python æçšç Rust HTTP 䌺æåšã
-* NGINX UnitïŒNGINX Unit æ¯èŒéäžå€åèœçç¶²é æçšå·è¡ç°å¢ã
+* [Uvicorn](https://www.uvicorn.dev/)ïŒé«æèœ ASGI 䌺æåšã
+* [Hypercorn](https://hypercorn.readthedocs.io/)ïŒæ¯æŽ HTTP/2 è Trio çåèœç ASGI 䌺æåšã
+* [Daphne](https://github.com/django/daphne)ïŒçº Django Channels æé ç ASGI 䌺æåšã
+* [Granian](https://github.com/emmett-framework/granian)ïŒéå° Python æçšç Rust HTTP 䌺æåšã
+* [NGINX Unit](https://unit.nginx.org/howto/fastapi/)ïŒNGINX Unit æ¯èŒéäžå€åèœçç¶²é æçšå·è¡ç°å¢ã
## 䌺æåšæ©åšè䌺æåšçšåŒ { #server-machine-and-server-program }
@@ -74,7 +74,7 @@ FastAPI æ¡çšå»ºç« Python ç¶²é æ¡æ¶è䌺æåšçæšæº èªæåçæ¬ïŒSemantic VersioningïŒ çæ
£äŸã
+éå°±æ¯çºä»éºŒç®åçæ¬ä»çº `0.x.x`ïŒé衚瀺æ¯åçæ¬éœå¯èœå
å«ç Žå£æ§è®æŽãééµåŸª [èªæåçæ¬ïŒSemantic VersioningïŒ](https://semver.org/) çæ
£äŸã
äœ çŸåšå°±å¯ä»¥çš **FastAPI** 建眮çç¢ç°å¢çæçšïŒèäžäœ å¯èœå·²ç¶é麌åäžæ®µæéäºïŒïŒåªèŠç¢ºä¿äœ 䜿çšççæ¬èœèå
¶é€çšåŒç¢Œæ£ç¢ºçžå®¹ã
@@ -34,7 +34,7 @@ fastapi[standard]>=0.112.0,<0.113.0
## å¯çšçæ¬ { #available-versions }
-äœ å¯ä»¥åš [çŒè¡èªªæ](../release-notes.md){.internal-link target=_blank} æ¥çå¯çšçæ¬ïŒäŸåŠçšäŸç¢ºèªç®åææ°çæ¬ïŒã
+äœ å¯ä»¥åš [çŒè¡èªªæ](../release-notes.md) æ¥çå¯çšçæ¬ïŒäŸåŠçšäŸç¢ºèªç®åææ°çæ¬ïŒã
## éæŒçæ¬ { #about-versions }
@@ -66,7 +66,7 @@ fastapi>=0.45.0,<0.46.0
äœ æè©²çºäœ çæçšæ°å¯«æž¬è©Šã
-åš **FastAPI** äžéåŸå®¹æïŒæè¬ StarletteïŒïŒè«åèæä»¶ïŒ[枬詊](../tutorial/testing.md){.internal-link target=_blank}
+åš **FastAPI** äžéåŸå®¹æïŒæè¬ StarletteïŒïŒè«åèæä»¶ïŒ[枬詊](../tutorial/testing.md)
æäºæž¬è©Šä¹åŸïŒäœ å°±å¯ä»¥å° **FastAPI** åçŽå°èŒæ°ççæ¬ïŒäžŠééå·è¡æž¬è©ŠäŸç¢ºä¿ææçšåŒç¢Œéœèœæ£ç¢ºéäœã
diff --git a/docs/zh-hant/docs/editor-support.md b/docs/zh-hant/docs/editor-support.md
new file mode 100644
index 0000000000..ff4d8f43db
--- /dev/null
+++ b/docs/zh-hant/docs/editor-support.md
@@ -0,0 +1,23 @@
+# ç·šèŒ¯åšæ¯æŽ { #editor-support }
+
+宿¹ç [FastAPI æŽå
å¥ä»¶](https://marketplace.visualstudio.com/items?itemName=FastAPILabs.fastapi-vscode) é鿝æŽè·¯åŸæäœïŒpath operationïŒæ¢çŽ¢ãå°èŠœïŒä»¥å FastAPI Cloud éšçœ²è峿æ¥èªäž²æµïŒåŒ·åäœ ç FastAPI éçŒæµçšã
+
+æ³äºè§£æŽå€éæŒæ€æŽå
å¥ä»¶ç现ç¯ïŒè«åèå
¶ [GitHub å²å庫](https://github.com/fastapi/fastapi-vscode) äžç READMEã
+
+## å®è£èèšå® { #setup-and-installation }
+
+**FastAPI æŽå
å¥ä»¶** åææäŸçµŠ [VS Code](https://code.visualstudio.com/) è [Cursor](https://www.cursor.com/)ãäœ å¯ä»¥åšå線茯åšçæŽå
å¥ä»¶é¢æ¿äžçŽæ¥å®è£ïŒæå°ãFastAPIãïŒäžŠéžæç± **FastAPI Labs** çŒäœçæŽå
å¥ä»¶ãæ€æŽå
å¥ä»¶å暣å¯åšç芜åšç線茯åšïŒåŠ [vscode.dev](https://vscode.dev) è [github.dev](https://github.dev)ïŒäžäœ¿çšã
+
+### æçšçšåŒæ¢çŽ¢ { #application-discovery }
+
+é èšæ
æ³äžïŒæŽå
å¥ä»¶æèªååšäœ çå·¥äœåäžïŒæææå¯ŠäŸå `FastAPI()` çæªæ¡ïŒä»¥çŒçŸ FastAPI æçšçšåŒãè¥èªå嵿ž¬ç¡æ³å æäœ çå°æ¡çµæ§ïŒäœ å¯ä»¥åš `pyproject.toml` ç `[tool.fastapi]` äžïŒæåš VS Code èšå®ç `fastapi.entryPoint` äžïŒäœ¿çšæš¡çµæšèšæ³ïŒäŸåŠ `myapp.main:app`ïŒæå®å
¥å£é»ã
+
+## åèœ { #features }
+
+- **Path Operation Explorer** - 顯瀺æçšçšåŒäžææ *è·¯åŸæäœ* çåŽéæ¬æš¹ç檢èŠã黿å³å¯è·³è³ä»»äžè·¯ç±æ router å®çŸ©ã
+- **Route Search** - äœ¿çš Ctrl + Shift + EïŒmacOSïŒCmd + Shift + EïŒäŸè·¯åŸãæ¹æ³æåçš±é²è¡æå°ã
+- **CodeLens Navigation** - åšæž¬è©Šçš client åŒå«ïŒäŸåŠ `client.get('/items')`ïŒäžæ¹æäŸå¯é»é£çµïŒäžéµè·³è³å°æçè·¯åŸæäœïŒè®äœ åšæž¬è©Šè寊äœéå¿«éåæã
+- **Deploy to FastAPI Cloud** - äžéµå°äœ çæçšçšåŒéšçœ²å° [FastAPI Cloud](https://fastapicloud.com/)ã
+- **Stream Application Logs** - åŸéšçœ²æŒ FastAPI Cloud çæçšçšåŒå³æäž²æµæ¥èªïŒäžŠæ¯æŽå±€çŽç¯©éžèæåæå°ã
+
+è¥äœ æ³çææ€æŽå
å¥ä»¶çåèœïŒå¯éååœä»€é¢æ¿ïŒCtrl + Shift + PïŒmacOSïŒCmd + Shift + PïŒïŒéžæ "Welcome: Open walkthrough..."ïŒç¶åŸæéž "Get started with FastAPI" walkthroughã
diff --git a/docs/zh-hant/docs/environment-variables.md b/docs/zh-hant/docs/environment-variables.md
index 5b684b9e6a..09264b7e26 100644
--- a/docs/zh-hant/docs/environment-variables.md
+++ b/docs/zh-hant/docs/environment-variables.md
@@ -65,7 +65,7 @@ print(f"Hello {name} from Python")
/// tip
-第äºååæžæ¯ `os.getenv()` çé èšåå³åŒã
+第äºååæžæ¯ [`os.getenv()`](https://docs.python.org/3.8/library/os.html#os.getenv) çé èšåå³åŒã
åŠææ²ææäŸïŒé èšåŒçº `None`ïŒé裡æåæäŸ `"World"` äœçºé èšåŒã
@@ -153,7 +153,7 @@ Hello World from Python
/// tip
-äœ å¯ä»¥åš The Twelve-Factor App: é
眮äžäºè§£æŽå€è³èšã
+äœ å¯ä»¥åš [The Twelve-Factor App: é
眮](https://12factor.net/config) äžäºè§£æŽå€è³èšã
///
@@ -163,7 +163,7 @@ Hello World from Python
éæå³èåŸç°å¢è®æžäžè®åç**ä»»äœåŒ**åš Python äžéœå°æ¯äžå `str`ïŒä»»äœåå¥èœææé©èéœå¿
é åšçšåŒç¢Œäžå®æã
-äœ å°åš[é²é䜿çšè
æå - èšå®åç°å¢è®æž](./advanced/settings.md){.internal-link target=_blank}äžäºè§£æŽå€éæŒäœ¿çšç°å¢è®æžèç**æçšçšåŒèšå®**çè³èšã
+äœ å°åš[é²é䜿çšè
æå - èšå®åç°å¢è®æž](./advanced/settings.md)äžäºè§£æŽå€éæŒäœ¿çšç°å¢è®æžèç**æçšçšåŒèšå®**çè³èšã
## `PATH` ç°å¢è®æž { #path-environment-variable }
@@ -285,13 +285,13 @@ $ C:\opt\custompython\bin\python
////
-ç¶åžç¿[èæ¬ç°å¢](virtual-environments.md){.internal-link target=_blank}æïŒéäºè³èšå°æåŸæçšã
+ç¶åžç¿[èæ¬ç°å¢](virtual-environments.md)æïŒéäºè³èšå°æåŸæçšã
## çµè« { #conclusion }
éééåæåžïŒäœ æè©²å°**ç°å¢è®æž**æ¯ä»éºŒä»¥ååŠäœåš Python äžäœ¿çšå®åæäºåºæ¬çäºè§£ã
-äœ ä¹å¯ä»¥åš ç°å¢è®æžçç¶åºçŸç§æ¢ç® äžé±è®æŽå€ã
+äœ ä¹å¯ä»¥åš [ç°å¢è®æžçç¶åºçŸç§æ¢ç®](https://en.wikipedia.org/wiki/Environment_variable) äžé±è®æŽå€ã
åšèš±å€æ
æ³äžïŒç°å¢è®æžççšéåé©çšæ§å¯èœäžæç«å»é¡¯çŸãäœæ¯åšéçŒéçšäžïŒå®åæåšèš±å€äžåçå Žæ¯äžåºçŸïŒå æ€çè§£å®åæ¯éåžžå¿
èŠçã
diff --git a/docs/zh-hant/docs/fastapi-cli.md b/docs/zh-hant/docs/fastapi-cli.md
index 57b5ec98f2..554ef4f2df 100644
--- a/docs/zh-hant/docs/fastapi-cli.md
+++ b/docs/zh-hant/docs/fastapi-cli.md
@@ -1,15 +1,15 @@
# FastAPI CLI { #fastapi-cli }
-**FastAPI CLI** æ¯äžååœä»€åçšåŒïŒèœçšäŸéè¡äœ ç FastAPI æçšçšåŒã管çäœ ç FastAPI å°æ¡çã
+**FastAPI CLI** æ¯äžååœä»€åçšåŒïŒäœ å¯ä»¥çšå®äŸååäœ ç FastAPI æçšçšåŒã管çäœ ç FastAPI å°æ¡ïŒççã
-ç¶äœ å®è£ FastAPIïŒäŸåŠäœ¿çš `pip install "fastapi[standard]"`ïŒïŒå®æå
å«äžåå«å `fastapi-cli` çå¥ä»¶ïŒéåå¥ä»¶æäŸäº `fastapi` åœä»€ã
+ç¶äœ å®è£ FastAPIïŒäŸåŠäœ¿çš `pip install "fastapi[standard]"`ïŒæïŒæéåž¶äžåå¯ä»¥åšçµç«¯æ©å·è¡çåœä»€åçšåŒã
-èŠéè¡äœ ç FastAPI æçšçšåŒäŸé²è¡éçŒïŒäœ å¯ä»¥äœ¿çš `fastapi dev` åœä»€ïŒ
+èŠåšéçŒæéè¡äœ ç FastAPI æçšçšåŒïŒäœ å¯ä»¥äœ¿çš `fastapi dev` æä»€ïŒ
```console
-$
fastapi dev
main.py
+$
fastapi dev
FastAPI Starting development server ð
@@ -46,13 +46,66 @@ $
fastapi dev
UvicornïŒéæ¯äžå髿èœãé©åçç¢ç°å¢ç ASGI 䌺æåšã ð
+æ€å€ïŒå
¶ä»å·¥å
·å¯èœæŸäžå°å®ïŒäŸåŠ [VS Code æŽå
å¥ä»¶](editor-support.md) æ [FastAPI Cloud](https://fastapicloud.com)ïŒå æ€å»ºè°åš `pyproject.toml` äžäœ¿çš `entrypoint`ã
## `fastapi dev` { #fastapi-dev }
@@ -70,6 +123,6 @@ FastAPI CLI æ¥æ¶äœ ç Python çšåŒè·¯åŸïŒäŸåŠ `main.py`ïŒïŒäžŠèªå
/// tip
-äœ å¯ä»¥åš[éšçœ²æä»¶](deployment/index.md){.internal-link target=_blank}äžäºè§£æŽå€çžéè³èšã
+äœ å¯ä»¥åš[éšçœ²æä»¶](deployment/index.md)äžäºè§£æŽå€çžéè³èšã
///
diff --git a/docs/zh-hant/docs/features.md b/docs/zh-hant/docs/features.md
index 77c0203073..63194e2556 100644
--- a/docs/zh-hant/docs/features.md
+++ b/docs/zh-hant/docs/features.md
@@ -6,8 +6,8 @@
### 建ç«åšéæŸæšæºçåºç€äž { #based-on-open-standards }
-* äœ¿çš OpenAPI äŸå»ºç« APIïŒå
å« è·¯åŸãæäœãåæžãè«æ±å
§æãå®å
šæ§ç宣åã
-* äœ¿çš JSON SchemaïŒå çº OpenAPI æ¬èº«å°±æ¯åºæŒ JSON SchemaïŒèªåçæè³ææš¡åæä»¶ã
+* äœ¿çš [**OpenAPI**](https://github.com/OAI/OpenAPI-Specification) äŸå»ºç« APIïŒå
å« è·¯åŸãæäœãåæžãè«æ±å
§æãå®å
šæ§ç宣åã
+* äœ¿çš [**JSON Schema**](https://json-schema.org/)ïŒå çº OpenAPI æ¬èº«å°±æ¯åºæŒ JSON SchemaïŒèªåçæè³ææš¡åæä»¶ã
* ç¶éçžå¯çç ç©¶åŸåç¹éäºæšæºé²è¡èšèšïŒèäžæ¯äºåŸåšå·²æç³»çµ±äžéå çäžå±€åèœã
* éä¹è®æååšå€çš®èªèšäžå¯ä»¥äœ¿çšèªå**çšæ¶ç«¯çšåŒç¢Œçæ**ã
@@ -15,11 +15,11 @@
FastAPI èœçæäºååŒ API æä»¶åæ¢çŽ¢æ§ç Web 䜿çšè
ä»é¢ãç±æŒè©²æ¡æ¶åºæŒ OpenAPIïŒå æ€æå€çš®éžæïŒé èšæäŸäºå
©çš®ã
-* Swagger UI æäŸäºååŒæ¢çŽ¢ïŒè®äœ å¯ä»¥çŽæ¥åŸç芜åšåŒå«äžŠæž¬è©Šäœ ç API ã
+* [**Swagger UI**](https://github.com/swagger-api/swagger-ui) æäŸäºååŒæ¢çŽ¢ïŒè®äœ å¯ä»¥çŽæ¥åŸç芜åšåŒå«äžŠæž¬è©Šäœ ç API ã

-* äœ¿çš ReDoc çæ¿ä»£ API æä»¶ã
+* äœ¿çš [**ReDoc**](https://github.com/Rebilly/ReDoc) çæ¿ä»£ API æä»¶ã

@@ -27,7 +27,7 @@ FastAPI èœçæäºååŒ API æä»¶åæ¢çŽ¢æ§ç Web 䜿çšè
ä»é¢ãç±
éäžåéœåºæŒæšæºç **Python åå¥**宣åïŒæè¬ PydanticïŒãç¡éåžç¿æ°çèªæ³ïŒåªéäœ¿çšæšæºççŸä»£ Pythonã
-åŠæäœ éèŠ 2 åéäŸåžç¿åŠäœäœ¿çš Python åå¥ïŒå³äœ¿äœ äžäœ¿çš FastAPIïŒïŒå¯ä»¥ççéåç°¡ççæåžïŒ[Python åå¥](python-types.md){.internal-link target=_blank}ã
+åŠæäœ éèŠ 2 åéäŸåžç¿åŠäœäœ¿çš Python åå¥ïŒå³äœ¿äœ äžäœ¿çš FastAPIïŒïŒå¯ä»¥ççéåç°¡ççæåžïŒ[Python åå¥](python-types.md)ã
åŠæäœ å¯«åž¶æ Python åå¥ççšåŒç¢ŒïŒ
@@ -75,7 +75,7 @@ my_second_user: User = User(**second_user_data)
æŽåæ¡æ¶çèšèšæ¯çºäºè®äœ¿çšè®åŸç°¡å®äžçŽè§ïŒåšéå§éçŒä¹åïŒæææ±ºçéœåšå€å線茯åšäžé²è¡äºæž¬è©ŠïŒä»¥ç¢ºä¿æäŸæäœ³çéçŒé«é©ã
-åšæè¿ç Python éçŒè
調æ¥äžïŒæåèœçå° è¢«äœ¿çšæå€çåèœæ¯ autocompletionã
+åšæè¿ç Python éçŒè
調æ¥äžïŒæåèœçå°[è¢«äœ¿çšæå€çåèœæ¯ autocompletion](https://www.jetbrains.com/research/python-developers-survey-2017/#tools-and-features)ã
æŽå **FastAPI** æ¡æ¶å°±æ¯åºæŒéäžé»ïŒä»»äœå°æ¹éœå¯ä»¥é²è¡èªåè£éœã
@@ -83,11 +83,11 @@ my_second_user: User = User(**second_user_data)
åšé裡ïŒäœ ç線茯åšå¯èœæé暣幫å©äœ ïŒ
-* åš Visual Studio Code äž:
+* åš [Visual Studio Code](https://code.visualstudio.com/) äž:

-* åš PyCharm äž:
+* åš [PyCharm](https://www.jetbrains.com/pycharm/) äž:

@@ -124,13 +124,13 @@ FastAPI å·²ç¶æŽåäºå®å
šæ§å身仜é©èçåèœïŒäœäžæåŒ·å¶èç¹
OpenAPI äžå®çŸ©çå®å
šæš¡åŒïŒå
æ¬ïŒ
* HTTP åºæ¬èªèã
-* **OAuth2**ïŒä¹äœ¿çš **JWT tokens**ïŒãåš [OAuth2 with JWT](tutorial/security/oauth2-jwt.md){.internal-link target=_blank} æ¥çæåžã
+* **OAuth2**ïŒä¹äœ¿çš **JWT tokens**ïŒãåš [OAuth2 with JWT](tutorial/security/oauth2-jwt.md) æ¥çæåžã
* API å¯é°ïŒåšïŒ
* æšé ïŒHeaderïŒ
* æ¥è©¢åæž
* CookiesïŒççã
-å äžæ¥èª StarletteïŒå
æ¬ **session cookie**ïŒçææå®å
šç¹æ§ã
+å äžäŸèª StarletteïŒå
æ¬ **session cookie**ïŒçææå®å
šç¹æ§ã
ææçéäºéœæ¯å¯éè€äœ¿çšçå·¥å
·åå¥ä»¶ïŒå¯ä»¥èŒé¬èäœ ç系統ãè³æå²åïŒData StoresïŒãéè¯åŒè³æåº«ïŒRDBMSïŒä»¥åééè¯åŒè³æåº«ïŒNoSQLïŒççæŽåã
@@ -159,11 +159,11 @@ FastAPI æäžå䜿çšç°¡å®ïŒäœæ¯é垞匷倧ç Pydanticãæä»¥ïŒäœ æå
¶ä» Pydantic çšåŒç¢Œä¹èœæ£åžžå·¥äœã
+**FastAPI** å®å
šçžå®¹äžåºæŒ [**Pydantic**](https://docs.pydantic.dev/)ãæä»¥ïŒäœ æå
¶ä» Pydantic çšåŒç¢Œä¹èœæ£åžžå·¥äœã
çžå®¹å
æ¬åºæŒ Pydantic çå€éšåœåŒåº«ïŒäŸåŠçšæŒè³æåº«ç ORMsãODMsã
diff --git a/docs/zh-hant/docs/help-fastapi.md b/docs/zh-hant/docs/help-fastapi.md
index 911c566792..343e0dba3e 100644
--- a/docs/zh-hant/docs/help-fastapi.md
+++ b/docs/zh-hant/docs/help-fastapi.md
@@ -12,7 +12,7 @@
## èšé±é»åå ± { #subscribe-to-the-newsletter }
-äœ å¯ä»¥èšé±ïŒäžåžžçŒéçïŒ[**FastAPI è倥䌎**é»åå ±](newsletter.md){.internal-link target=_blank}ïŒéšæææ¡ïŒ
+äœ å¯ä»¥èšé±ïŒäžåžžçŒéçïŒ[**FastAPI è倥䌎**é»åå ±](newsletter.md)ïŒéšæææ¡ïŒ
* éæŒ FastAPI èå€¥äŒŽçææ°æ¶æ¯ ð
* æåžæå ð
@@ -22,17 +22,17 @@
## åš XïŒTwitterïŒé泚 FastAPI { #follow-fastapi-on-x-twitter }
-åš **XïŒTwitterïŒ** éæ³š @fastapiïŒç²å **FastAPI** çææ°æ¶æ¯ãðŠ
+[åš **XïŒTwitterïŒ** éæ³š @fastapi](https://x.com/fastapi)ïŒç²å **FastAPI** çææ°æ¶æ¯ãðŠ
## åš GitHub çº **FastAPI** å æ { #star-fastapi-in-github }
-äœ å¯ä»¥åš GitHub çº FastAPIãå æãïŒé»æå³äžè§ç star æèæéïŒïŒhttps://github.com/fastapi/fastapiãâïž
+äœ å¯ä»¥åš GitHub çº FastAPIãå æãïŒé»æå³äžè§ç star æèæéïŒïŒ[https://github.com/fastapi/fastapi](https://github.com/fastapi/fastapi)ãâïž
å äžææšåŸïŒå
¶ä»äœ¿çšè
ææŽå®¹æçŒçŸå®ïŒäžŠçå°å®å·²ç¶å°èš±å€äººåŸæå¹«å©ã
## 远蹀 GitHub å²å庫ççŒè¡ç { #watch-the-github-repository-for-releases }
-äœ å¯ä»¥åš GitHubãwatchãFastAPIïŒé»æå³äžè§çãwatchãæéïŒïŒhttps://github.com/fastapi/fastapiãð
+äœ å¯ä»¥åš GitHubãwatchãFastAPIïŒé»æå³äžè§çãwatchãæéïŒïŒ[https://github.com/fastapi/fastapi](https://github.com/fastapi/fastapi)ãð
åšé£è£¡äœ å¯ä»¥éžæãReleases onlyãã
@@ -40,45 +40,45 @@
## èäœè
é£çµ { #connect-with-the-author }
-äœ å¯ä»¥èäœè
æïŒSebastián RamÃrez / `tiangolo`ïŒ å»ºç«é£çµã
+äœ å¯ä»¥èäœè
[æïŒSebastián RamÃrez / `tiangolo`ïŒ](https://tiangolo.com) 建ç«é£çµã
äœ å¯ä»¥ïŒ
-* åš **GitHub** éæ³šæã
+* [åš **GitHub** éæ³šæ](https://github.com/tiangolo)ã
* ççæå»ºç«çå
¶ä»éæºå°æ¡ïŒå¯èœå°äœ æå¹«å©ã
* éæ³šæä»¥äŸ¿ç¥éæäœæå»ºç«æ°çéæºå°æ¡ã
-* åš **XïŒTwitterïŒ** æ Mastodon éæ³šæã
+* [åš **XïŒTwitterïŒ**](https://x.com/tiangolo) æ [Mastodon](https://fosstodon.org/@tiangolo) éæ³šæã
* å蚎æäœ åŠäœäœ¿çš FastAPIïŒæåŸæèœéäºïŒã
* æ¥æ¶æçŒåžå
¬åæéåºæ°å·¥å
·æçæ¶æ¯ã
- * äœ ä¹å¯ä»¥åš XïŒTwitterïŒé泚 @fastapiïŒåŠå€çåž³èïŒã
-* åš **LinkedIn** éæ³šæã
+ * äœ ä¹å¯ä»¥[åš XïŒTwitterïŒé泚 @fastapi](https://x.com/fastapi)ïŒåŠå€çåž³èïŒã
+* [åš **LinkedIn** éæ³šæ](https://www.linkedin.com/in/tiangolo/)ã
* æ¥æ¶æçŒåžå
¬åæéåºæ°å·¥å
·æçæ¶æ¯ïŒäžéææŽåžžçš XïŒTwitterïŒð€·ââïŒã
-* åš **Dev.to** æ **Medium** é±è®æå¯«çå
§å®¹ïŒæé泚æïŒã
+* åš [**Dev.to**](https://dev.to/tiangolo) æ [**Medium**](https://medium.com/@tiangolo) é±è®æå¯«çå
§å®¹ïŒæé泚æïŒã
* é±è®æçæ³æ³ãæç« ïŒä»¥åæå»ºç«çå·¥å
·ã
* éæ³šæä»¥äŸ¿åšæçŒäœæ°å
§å®¹æèœç¬¬äžæéçå°ã
## åš XïŒTwitterïŒçŒæè«è« **FastAPI** { #tweet-about-fastapi }
-çŒäžåéæŒ **FastAPI** çæšæïŒè®æèå
¶ä»äººç¥éäœ çºä»éºŒåæ¡å®ãð
+[çŒäžåéæŒ **FastAPI** çæšæ](https://x.com/compose/tweet?text=I'm loving @fastapi because... https://github.com/fastapi/fastapi)ïŒè®æèå
¶ä»äººç¥éäœ çºä»éºŒåæ¡å®ãð
æåŸæšæŒèœå° **FastAPI** æ¯åŠäœè¢«äœ¿çšãäœ åæ¡å®çåªäºå°æ¹ãåšåªåå°æ¡ïŒå
¬åžäœ¿çšå®ççã
## çº FastAPI æç¥š { #vote-for-fastapi }
-* åš Slant çº **FastAPI** æç¥šã
-* åš AlternativeTo çº **FastAPI** æç¥šã
-* åš StackShare è¡šç€ºäœ äœ¿çš **FastAPI**ã
+* [åš Slant çº **FastAPI** æç¥š](https://www.slant.co/options/34241/~fastapi-review)ã
+* [åš AlternativeTo çº **FastAPI** æç¥š](https://alternativeto.net/software/fastapi/about/)ã
+* [åš StackShare è¡šç€ºäœ äœ¿çš **FastAPI**](https://stackshare.io/pypi-fastapi)ã
## åš GitHub 幫å©ä»äººè§£çåé¡ { #help-others-with-questions-in-github }
äœ å¯ä»¥å詊幫å©ä»äººåç以äžå°æ¹çåé¡ïŒ
-* GitHub Discussions
-* GitHub Issues
+* [GitHub Discussions](https://github.com/fastapi/fastapi/discussions/categories/questions?discussions_q=category%3AQuestions+is%3Aunanswered)
+* [GitHub Issues](https://github.com/fastapi/fastapi/issues?q=is%3Aissue+is%3Aopen+sort%3Aupdated-desc+label%3Aquestion+-label%3Aanswered+)
åŸå€æåäœ å¯èœå·²ç¶ç¥ééäºåé¡çè§£çãð€
-åŠæäœ ç¶åžžå¹«å€§å®¶è§£æ±ºåé¡ïŒäœ ææçºå®æ¹ç [FastAPI å°å®¶](fastapi-people.md#fastapi-experts){.internal-link target=_blank}ãð
+åŠæäœ ç¶åžžå¹«å€§å®¶è§£æ±ºåé¡ïŒäœ ææçºå®æ¹ç [FastAPI å°å®¶](fastapi-people.md#fastapi-experts)ãð
è«èšåŸïŒæéèŠçæ¯ïŒç¡éååã倧家å¯èœåž¶èæ«æèäŸïŒåŸå€æåæåæ¹åŒäžå€ çæ³ïŒäœè«ç¡äœ æèœä¿æååãð€
@@ -104,7 +104,7 @@
åŸå€æåä»ååªæè²Œåºäžå°æ®µçšåŒç¢ŒïŒäœé£äžè¶³ä»¥**éçŸåé¡**ã
-* äœ å¯ä»¥è«ä»åæäŸäžåæå°å¯éçŸç¯äŸïŒè®äœ å¯ä»¥**è€è£œè²Œäž**äžŠåšæ¬æ©å·è¡ïŒçå°èä»åçžåçé¯èª€æè¡çºïŒææŽå¥œå°çè§£ä»åçäœ¿çšæ
å¢ã
+* äœ å¯ä»¥è«ä»åæäŸäžå[æå°å¯éçŸç¯äŸ](https://stackoverflow.com/help/minimal-reproducible-example)ïŒè®äœ å¯ä»¥**è€è£œè²Œäž**äžŠåšæ¬æ©å·è¡ïŒçå°èä»åçžåçé¯èª€æè¡çºïŒææŽå¥œå°çè§£ä»åçäœ¿çšæ
å¢ã
* åŠæäœ æå¿åïŒäœ ä¹å¯ä»¥å詊èªå·±**建ç«äžåç¯äŸ**ïŒå
äŸæåé¡æè¿°äŸéåãäžéè«èšåŸéå¯èœåŸèæïŒæèš±æŽå¥œçæ¯å
è«ä»åæåé¡èªªæž
æ¥ã
@@ -124,7 +124,7 @@
## 远蹀 GitHub å²å庫 { #watch-the-github-repository }
-äœ å¯ä»¥åš GitHubãwatchãFastAPIïŒé»æå³äžè§çãwatchãæéïŒïŒhttps://github.com/fastapi/fastapiãð
+äœ å¯ä»¥åš GitHubãwatchãFastAPIïŒé»æå³äžè§çãwatchãæéïŒïŒ[https://github.com/fastapi/fastapi](https://github.com/fastapi/fastapi)ãð
åŠæäœ éžæãWatchingãèäžæ¯ãReleases onlyãïŒç¶æäººå»ºç«æ°ç issue æåé¡æäœ ææ¶å°éç¥ãäœ ä¹å¯ä»¥æå®åªæ³è¢«éç¥æ°ç issuesãdiscussionsãPR ççã
@@ -132,7 +132,7 @@
## æå { #ask-questions }
-äœ å¯ä»¥åš GitHub å²å庫建ç«äžåæ°çåé¡ïŒQuestionïŒïŒäŸåŠçšäŸïŒ
+äœ å¯ä»¥åš GitHub å²å庫[建ç«äžåæ°çåé¡ïŒQuestionïŒ](https://github.com/fastapi/fastapi/discussions/new?category=questions)ïŒäŸåŠçšäŸïŒ
* æåº**åé¡**æè©¢åæå**çé£**ã
* 建è°äžåæ°ç**åèœ**ã
@@ -195,12 +195,12 @@
## å»ºç« Pull Request { #create-a-pull-request }
-äœ å¯ä»¥éé Pull Request äŸ[è²¢ç»](contributing.md){.internal-link target=_blank}åå§ç¢ŒïŒäŸåŠïŒ
+äœ å¯ä»¥éé Pull Request äŸ[è²¢ç»](contributing.md)åå§ç¢ŒïŒäŸåŠïŒ
* ä¿®æ£ææªäžäœ çŒçŸçé¯åã
-* åäº«äœ å»ºç«æçŒçŸç FastAPI çžéæç« ãåœ±çæ podcastïŒæ¹æ³æ¯ç·šèŒ¯éåæªæ¡ã
+* åäº«äœ å»ºç«æçŒçŸç FastAPI çžéæç« ãåœ±çæ podcastïŒæ¹æ³æ¯[線茯éåæªæ¡](https://github.com/fastapi/fastapi/edit/master/docs/en/data/external_links.yml)ã
* è«ç¢ºä¿æäœ çé£çµå å°å°æç« ç¯çéé ã
-* å婿[æä»¶ç¿»è¯](contributing.md#translations){.internal-link target=_blank}æäœ çèªèšã
+* å婿[æä»¶ç¿»è¯](contributing.md#translations)æäœ çèªèšã
* äœ ä¹å¯ä»¥å¹«å¿å¯©æ¥ä»äººæäº€çç¿»è¯ã
* æè°æ°çæä»¶ç« ç¯ã
* ä¿®åŸ©æ¢æç issueïŒbugã
@@ -217,8 +217,8 @@
äœ çŸåšå°±èœåçäž»èŠä»»åæïŒ
-* [åš GitHub 幫å©ä»äººè§£çåé¡](#help-others-with-questions-in-github){.internal-link target=_blank}ïŒèŠäžæ¹ç« ç¯ïŒã
-* [å¯©æ ž Pull Request](#review-pull-requests){.internal-link target=_blank}ïŒèŠäžæ¹ç« ç¯ïŒã
+* [åš GitHub 幫å©ä»äººè§£çåé¡](#help-others-with-questions-in-github)ïŒèŠäžæ¹ç« ç¯ïŒã
+* [å¯©æ ž Pull Request](#review-pull-requests)ïŒèŠäžæ¹ç« ç¯ïŒã
éå
©ä»¶äºæ¯**æèæ**çãé乿¯ç¶è· FastAPI çäž»èŠå·¥äœã
@@ -226,11 +226,11 @@
## å å
¥è倩宀 { #join-the-chat }
-å å
¥ ð¥ Discord è倩䌺æåš ð¥ïŒè FastAPI 瀟矀çå
¶ä»äººäžèµ·äº€æµã
+å å
¥ ð¥ [Discord è倩䌺æåš](https://discord.gg/VQjSZaeJmf) ð¥ïŒè FastAPI 瀟矀çå
¶ä»äººäžèµ·äº€æµã
/// tip
-è¥èŠæåïŒè«å° GitHub DiscussionsïŒåšé£è£¡æŽææ©æç²åŸ[FastAPI å°å®¶](fastapi-people.md#fastapi-experts){.internal-link target=_blank}çåå©ã
+è¥èŠæåïŒè«å° [GitHub Discussions](https://github.com/fastapi/fastapi/discussions/new?category=questions)ïŒåšé£è£¡æŽææ©æç²åŸ[FastAPI å°å®¶](fastapi-people.md#fastapi-experts)çåå©ã
è倩宀è«å
çšæŒå
¶ä»äžè¬æ§ç亀æµã
@@ -242,13 +242,13 @@
åš GitHub äžïŒæš¡æ¿æåŒå°äœ 寫åºåé©çæåïŒè®äœ æŽå®¹æåŸå°å¥œçè§£çïŒçè³åšæååå°±èªå·±è§£æ±ºåé¡ãèäžåš GitHub äžïŒæèœç¢ºä¿æçµéœæåèŠïŒå³äœ¿éèŠäžäºæéïŒãæåäººç¡æ³åšè倩系統åå°éäžé»ãð
-è倩系統äžçå°è©±ä¹äžå GitHub 飿š£å®¹æè¢«æå°ïŒå æ€åé¡èçæ¡å¯èœåšå°è©±äžæ·¹æ²ãèäžåªæ GitHub äžçåé¡èåçææè¢«èšå
¥æçº[FastAPI å°å®¶](fastapi-people.md#fastapi-experts){.internal-link target=_blank}ïŒå æ€äœ åš GitHub äžæŽææ©æç²åŸé泚ã
+è倩系統äžçå°è©±ä¹äžå GitHub 飿š£å®¹æè¢«æå°ïŒå æ€åé¡èçæ¡å¯èœåšå°è©±äžæ·¹æ²ãèäžåªæ GitHub äžçåé¡èåçææè¢«èšå
¥æçº[FastAPI å°å®¶](fastapi-people.md#fastapi-experts)ïŒå æ€äœ åš GitHub äžæŽææ©æç²åŸé泚ã
åŠäžæ¹é¢ïŒè倩宀裡ææåäžè¬ç䜿çšè
ïŒæä»¥å¹Ÿä¹éšæéœæåŸå€§çæ©æèœæŸå°äººè倩ãð
## èŽå©äœè
{ #sponsor-the-author }
-åŠæäœ ç**ç¢åïŒå
¬åž**äŸè³Žæè **FastAPI** çžéïŒäžäœ æ³è§žåå®ç䜿çšè
ïŒäœ å¯ä»¥éé GitHub sponsors èŽå©äœè
ïŒæïŒãäŸæäžåçŽå¥ïŒäœ å¯èœæåŸå°äžäºé¡å€çŠå©ïŒäŸåŠåšæä»¶äžé¡¯ç€ºåŸœç« ãð
+åŠæäœ ç**ç¢åïŒå
¬åž**äŸè³Žæè **FastAPI** çžéïŒäžäœ æ³è§žåå®ç䜿çšè
ïŒäœ å¯ä»¥éé [GitHub sponsors](https://github.com/sponsors/tiangolo) èŽå©äœè
ïŒæïŒãäŸæäžåçŽå¥ïŒäœ å¯èœæåŸå°äžäºé¡å€çŠå©ïŒäŸåŠåšæä»¶äžé¡¯ç€ºåŸœç« ãð
---
diff --git a/docs/zh-hant/docs/history-design-future.md b/docs/zh-hant/docs/history-design-future.md
index b7f57a3636..f3c733330a 100644
--- a/docs/zh-hant/docs/history-design-future.md
+++ b/docs/zh-hant/docs/history-design-future.md
@@ -1,6 +1,6 @@
# æ·å²ãèšèšèæªäŸ { #history-design-and-future }
-äžä¹
ä¹åïŒäžäœ **FastAPI** 䜿çšè
æåïŒ
+äžä¹
ä¹åïŒ[äžäœ **FastAPI** 䜿çšè
æå](https://github.com/fastapi/fastapi/issues/3#issuecomment-454956920)ïŒ
> éåå°æ¡çæ·å²æ¯ä»éºŒïŒçèµ·äŸå®åšçç幟é±å
§åŸé»é»ç¡åè®åŸéåžžå²å®³ [...]
@@ -14,7 +14,7 @@
**FastAPI** çæ·å²ïŒåšåŸå€§çšåºŠäžä¹æ¯å
¶å身工å
·çæ·å²ã
-åŠåš[æ¿ä»£æ¹æ¡](alternatives.md){.internal-link target=_blank}ç« ç¯æè¿°ïŒ
+åŠåš[æ¿ä»£æ¹æ¡](alternatives.md)äžç¯æè¿°ïŒ
@@ -44,9 +44,9 @@
æåšæåæ¡è¿ç Python 線茯åšäžæž¬è©Šäºå€åæ³æ³ïŒPyCharmãVS CodeãåºæŒ Jedi ç線茯åšã
-æ ¹æææ°ç Python éçŒè
調æ¥ïŒéäºå·¥å
·æ¶µèçŽ 80% ç䜿çšè
ã
+æ ¹æææ°ç [Python éçŒè
調æ¥](https://www.jetbrains.com/research/python-developers-survey-2018/#development-tools)ïŒéäºå·¥å
·æ¶µèçŽ 80% ç䜿çšè
ã
-é衚瀺 **FastAPI** å·²éå° 80% ç Python éçŒè
æäœ¿çšç線茯åšé²è¡éå°é枬詊ãèç±æŒå
¶ä»å€æžç·šèŒ¯åšçè¡çºä¹é¡äŒŒïŒéäºåªé»å¹Ÿä¹åšææç·šèŒ¯åšäžéœèœçæã
+é衚瀺 **FastAPI** å·²éå° 80% ç Python éçŒè
æäœ¿çšç線茯åšé²è¡éå°é枬詊ãèç±æŒå
¶ä»å€æžç·šèŒ¯åšçè¡çºä¹é¡äŒŒïŒéäºåªé»æŽå寊éäžå¹Ÿä¹ææç·šèŒ¯åšã
èæ€ææŸå°äºç¡å¯èœæžå°çšåŒç¢Œéè€ãåšåèæäŸèªåè£å
šãåå¥èé¯èª€æª¢æ¥ççæäœ³æ¹åŒã
@@ -54,11 +54,11 @@
## éæ± { #requirements }
-åšæž¬è©Šå€çš®æ¿ä»£æ¹æ¡åŸïŒææ±ºå®æ¡çš **Pydantic**ïŒå çºå®çåªå¢ã
+åšæž¬è©Šå€çš®æ¿ä»£æ¹æ¡åŸïŒææ±ºå®æ¡çš [**Pydantic**](https://docs.pydantic.dev/)ïŒå çºå®çåªå¢ã
éšåŸæä¹å°å®ååºè²¢ç»ïŒäœ¿å
¶å®å
šç¬Šå JSON Schemaãæ¯æŽä»¥äžåæ¹åŒå®çŸ©çŽæïŒäžŠäŸæåšå€æ¬Ÿç·šèŒ¯åšäžçæž¬è©Šçµææ¹é²ç·šèŒ¯å𿝿ŽïŒå奿ª¢æ¥ãèªåè£å
šïŒã
-åšéçŒéçšäžïŒæä¹å° **Starlette**ïŒåŠäžåééµäŸè³ŽïŒååºè²¢ç»ã
+åšéçŒéçšäžïŒæä¹å° [**Starlette**](https://www.starlette.dev/)ïŒåŠäžåééµäŸè³ŽïŒååºè²¢ç»ã
## éçŒ { #development }
@@ -76,4 +76,4 @@
**FastAPI** ç忝éåžžå
æã
-ä¹éåžžæè¬[äœ ç幫å©](help-fastapi.md){.internal-link target=_blank}ã
+ä¹éåžžæè¬[äœ ç幫å©](help-fastapi.md)ã
diff --git a/docs/zh-hant/docs/how-to/authentication-error-status-code.md b/docs/zh-hant/docs/how-to/authentication-error-status-code.md
index 9a8de4c910..beea430707 100644
--- a/docs/zh-hant/docs/how-to/authentication-error-status-code.md
+++ b/docs/zh-hant/docs/how-to/authentication-error-status-code.md
@@ -2,7 +2,7 @@
åš FastAPI çæ¬ `0.122.0` ä¹åïŒç¶å
§å»ºçå®å
šå·¥å
·åšèº«åé©è倱æåŸåå³é¯èª€çµŠçšæ¶ç«¯æïŒæäœ¿çš HTTP çæ
碌 `403 Forbidden`ã
-åŸ FastAPI çæ¬ `0.122.0` èµ·ïŒæ¹çºäœ¿çšæŽåé©ç HTTP çæ
碌 `401 Unauthorized`ïŒäžŠåšåæäžäŸæ HTTP èŠç¯å äžåçç `WWW-Authenticate` æšé ïŒåè RFC 7235ãRFC 9110ã
+åŸ FastAPI çæ¬ `0.122.0` èµ·ïŒæ¹çºäœ¿çšæŽåé©ç HTTP çæ
碌 `401 Unauthorized`ïŒäžŠåšåæäžäŸæ HTTP èŠç¯å äžåçç `WWW-Authenticate` æšé ïŒåè [RFC 7235](https://datatracker.ietf.org/doc/html/rfc7235#section-3.1)ã[RFC 9110](https://datatracker.ietf.org/doc/html/rfc9110#name-401-unauthorized)ã
äœåŠæäœ ççšæ¶ç«¯å æäºåå äŸè³ŽæŒèè¡çºïŒäœ å¯ä»¥åšäœ ç security é¡å¥äžèŠå¯« `make_not_authenticated_error` æ¹æ³ä»¥æ¢åŸ©èçè¡çºã
diff --git a/docs/zh-hant/docs/how-to/conditional-openapi.md b/docs/zh-hant/docs/how-to/conditional-openapi.md
index 5c091e5b7b..485a7d11d7 100644
--- a/docs/zh-hant/docs/how-to/conditional-openapi.md
+++ b/docs/zh-hant/docs/how-to/conditional-openapi.md
@@ -10,7 +10,7 @@
è¥äœ ççšåŒç¢Œæå®å
šæ§çŒºé·ïŒå®äŸç¶æååšã
-é±èæä»¶åªæè®ä»äººæŽé£çè§£åŠäœèäœ ç API äºåïŒä¹å¯èœè®äœ åšæ£åŒç°å¢é€é¯æŽå°é£ãééåžžå
被èŠçºäžçš® 以é±å¿æ±å®å
šã
+é±èæä»¶åªæè®ä»äººæŽé£çè§£åŠäœèäœ ç API äºåïŒä¹å¯èœè®äœ åšæ£åŒç°å¢é€é¯æŽå°é£ãééåžžå
被èŠçºäžçš® [以é±å¿æ±å®å
š](https://en.wikipedia.org/wiki/Security_through_obscurity)ã
åŠæäœ æ³ä¿è· APIïŒæèš±å€æŽå¥œçäœæ³ïŒäŸåŠïŒ
diff --git a/docs/zh-hant/docs/how-to/configure-swagger-ui.md b/docs/zh-hant/docs/how-to/configure-swagger-ui.md
index e5b6d7d1e3..cbb63ef5e6 100644
--- a/docs/zh-hant/docs/how-to/configure-swagger-ui.md
+++ b/docs/zh-hant/docs/how-to/configure-swagger-ui.md
@@ -1,12 +1,12 @@
# èšå® Swagger UI { #configure-swagger-ui }
-äœ å¯ä»¥èšå®äžäºé¡å€ç Swagger UI åæžã
+äœ å¯ä»¥èšå®äžäºé¡å€ç [Swagger UI åæž](https://swagger.io/docs/open-source-tools/swagger-ui/usage/configuration/)ã
èŠèšå®å®åïŒå»ºç« `FastAPI()` æçšç©ä»¶æïŒæåŒå« `get_swagger_ui_html()` åœåŒæïŒå³å
¥åæž `swagger_ui_parameters`ã
`swagger_ui_parameters` æ¥åäžå dictïŒå
§å®¹æçŽæ¥å³çµŠ Swagger UI äœçºèšå®ã
-FastAPI ææéäºèšå®èœææ JSONïŒä»¥äŸ¿è JavaScript çžå®¹ïŒå çº Swagger UI éèŠçæ¯éçš®æ ŒåŒã
+FastAPI ææéäºèšå®èœææ **JSON**ïŒä»¥äŸ¿è JavaScript çžå®¹ïŒå çº Swagger UI éèŠçæ¯éçš®æ ŒåŒã
## åçšèªæ³éç®æç€º { #disable-syntax-highlighting }
@@ -50,11 +50,11 @@ FastAPI å
§å»ºäžäºé èšåæžïŒé©çšæŒå€§å€æžæ
å¢ã
## å
¶ä» Swagger UI åæž { #other-swagger-ui-parameters }
-è¥èŠæ¥çææå¯çšçèšå®ïŒè«åè宿¹ç Swagger UI åæžæä»¶ã
+è¥èŠæ¥çææå¯çšçèšå®ïŒè«åè宿¹ç [Swagger UI åæžæä»¶](https://swagger.io/docs/open-source-tools/swagger-ui/usage/configuration/)ã
## å
é JavaScript çèšå® { #javascript-only-settings }
-Swagger UI ä¹å
èš±æäºèšå®æ¯å
é JavaScript çç©ä»¶ïŒäŸåŠ JavaScript åœåŒïŒã
+Swagger UI ä¹å
èš±æäºèšå®æ¯**å
é JavaScript** çç©ä»¶ïŒäŸåŠ JavaScript åœåŒïŒã
FastAPI ä¹å
å«ä»¥äžå
é JavaScript ç `presets` èšå®ïŒ
diff --git a/docs/zh-hant/docs/how-to/custom-docs-ui-assets.md b/docs/zh-hant/docs/how-to/custom-docs-ui-assets.md
index 4b53945891..e690e55c96 100644
--- a/docs/zh-hant/docs/how-to/custom-docs-ui-assets.md
+++ b/docs/zh-hant/docs/how-to/custom-docs-ui-assets.md
@@ -54,7 +54,7 @@ Swagger UI æåšèåŸå¹«äœ èçïŒäžéå®éèŠéåãredirectãèŒå©
### 枬詊 { #test-it }
-çŸåšäœ æè©²èœé 蚪 http://127.0.0.1:8000/docsïŒéæ°èŒå
¥é é¢åŸïŒè³æºæåŸæ°ç CDN èŒå
¥ã
+çŸåšäœ æè©²èœé 蚪 [http://127.0.0.1:8000/docs](http://127.0.0.1:8000/docs)ïŒéæ°èŒå
¥é é¢åŸïŒè³æºæåŸæ°ç CDN èŒå
¥ã
## èªè¡èšç®¡æä»¶æéç JavaScript è CSS { #self-hosting-javascript-and-css-for-docs }
@@ -93,12 +93,12 @@ Swagger UI æåšèåŸå¹«äœ èçïŒäžéå®éèŠéåãredirectãèŒå©
Swagger UI éèŠä»¥äžæªæ¡ïŒ
-* `swagger-ui-bundle.js`
-* `swagger-ui.css`
+* [`swagger-ui-bundle.js`](https://cdn.jsdelivr.net/npm/swagger-ui-dist@5/swagger-ui-bundle.js)
+* [`swagger-ui.css`](https://cdn.jsdelivr.net/npm/swagger-ui-dist@5/swagger-ui.css)
è ReDoc éèŠä»¥äžæªæ¡ïŒ
-* `redoc.standalone.js`
+* [`redoc.standalone.js`](https://cdn.jsdelivr.net/npm/redoc@2/bundles/redoc.standalone.js)
ä¹åŸïŒäœ çæªæ¡çµæ§å¯èœåŠäžïŒ
@@ -122,7 +122,7 @@ Swagger UI éèŠä»¥äžæªæ¡ïŒ
### 枬詊éæ
æªæ¡ { #test-the-static-files }
-ååäœ çæçšäžŠååŸ http://127.0.0.1:8000/static/redoc.standalone.jsã
+ååäœ çæçšäžŠååŸ [http://127.0.0.1:8000/static/redoc.standalone.js](http://127.0.0.1:8000/static/redoc.standalone.js)ã
äœ æè©²æçå°äžååŸé·ç **ReDoc** JavaScript æªæ¡ã
@@ -180,6 +180,6 @@ Swagger UI æåšèåŸå¹«äœ èçïŒäžéå®éèŠéåãredirectãèŒå©
### 枬詊䜿çšéæ
æªæ¡ç UI { #test-static-files-ui }
-çŸåšïŒäœ æè©²å¯ä»¥éé WiFiïŒé èšªäœ çæä»¶ http://127.0.0.1:8000/docsïŒäžŠéæ°èŒå
¥é é¢ã
+çŸåšïŒäœ æè©²å¯ä»¥éé WiFiïŒé èšªäœ çæä»¶ [http://127.0.0.1:8000/docs](http://127.0.0.1:8000/docs)ïŒäžŠéæ°èŒå
¥é é¢ã
å³äœ¿æ²æç¶²é網路ïŒä¹èœçå°äœ ç API æä»¶äžŠèä¹äºåã
diff --git a/docs/zh-hant/docs/how-to/custom-request-and-route.md b/docs/zh-hant/docs/how-to/custom-request-and-route.md
index 99c3410e47..00031fcaad 100644
--- a/docs/zh-hant/docs/how-to/custom-request-and-route.md
+++ b/docs/zh-hant/docs/how-to/custom-request-and-route.md
@@ -18,7 +18,7 @@
å¯èœçäœ¿çšæ
å¢å
æ¬ïŒ
-* å°é JSON çè«æ±æ¬æèœæçº JSONïŒäŸåŠ `msgpack`ïŒã
+* å°é JSON çè«æ±æ¬æèœæçº JSONïŒäŸåŠ [`msgpack`](https://msgpack.org/index.html)ïŒã
* è§£å£çž®ä»¥ gzip å£çž®çè«æ±æ¬æã
* èªåèšéææè«æ±æ¬æã
@@ -32,7 +32,7 @@
/// tip
-鿝äžå瀺ç¯çšçç°¡åç¯äŸïŒåŠæäœ éèŠ Gzip æ¯æŽïŒå¯ä»¥çŽæ¥äœ¿çšæäŸç [`GzipMiddleware`](../advanced/middleware.md#gzipmiddleware){.internal-link target=_blank}ã
+鿝äžå瀺ç¯çšçç°¡åç¯äŸïŒåŠæäœ éèŠ Gzip æ¯æŽïŒå¯ä»¥çŽæ¥äœ¿çšæäŸç [`GzipMiddleware`](../advanced/middleware.md#gzipmiddleware)ã
///
@@ -40,7 +40,7 @@
åŠææšé äžæ²æ `gzip`ïŒå®å°±äžæå詊解å£çž®æ¬æã
-åŠæ€äžäŸïŒçžåçè·¯ç±é¡å¥å³å¯åæèçç¶ gzip å£çž®èæªå£çž®çè«æ±.
+åŠæ€äžäŸïŒçžåçè·¯ç±é¡å¥å³å¯åæèçç¶ gzip å£çž®èæªå£çž®çè«æ±ã
{* ../../docs_src/custom_request_and_route/tutorial001_an_py310.py hl[9:16] *}
@@ -66,7 +66,7 @@
è `scope` è `receive` éå
©è
ïŒå°±æ¯å»ºç«äžåæ°ç `Request` å¯ŠäŸæéçè³æã
-æ³äºè§£æŽå€ `Request`ïŒè«åè Starlette ç Request æä»¶ã
+æ³äºè§£æŽå€ `Request`ïŒè«åè [Starlette ç Request æä»¶](https://www.starlette.dev/requests/)ã
///
@@ -82,7 +82,7 @@
/// tip
-èŠè§£æ±ºçžååé¡ïŒäœ¿çšéå° `RequestValidationError` çèªèšèçåšäŸè®å `body` éåžžæŽç°¡å®ïŒ[èçé¯èª€](../tutorial/handling-errors.md#use-the-requestvalidationerror-body){.internal-link target=_blank}ïŒã
+èŠè§£æ±ºçžååé¡ïŒäœ¿çšéå° `RequestValidationError` çèªèšèçåšäŸè®å `body` éåžžæŽç°¡å®ïŒ[èçé¯èª€](../tutorial/handling-errors.md#use-the-requestvalidationerror-body)ïŒã
äœæ¬ç¯äŸä»ç¶ææïŒäžŠç€ºç¯äºåŠäœèå
§éšå
ä»¶äºåã
diff --git a/docs/zh-hant/docs/how-to/extending-openapi.md b/docs/zh-hant/docs/how-to/extending-openapi.md
index c51e896f32..b5adca0f76 100644
--- a/docs/zh-hant/docs/how-to/extending-openapi.md
+++ b/docs/zh-hant/docs/how-to/extending-openapi.md
@@ -37,7 +37,7 @@
åºæŒäžè¿°è³èšïŒäœ å¯ä»¥çšçžåçå·¥å
·åœåŒäŸç¢ç OpenAPI çµæ§ïŒäžŠèŠå¯«äœ éèŠå®¢è£œçéšåã
-äŸåŠïŒæåèŠå å
¥ ReDoc ç OpenAPI æŽå
ïŒæå
¥èªèš logoã
+äŸåŠïŒæåèŠå å
¥ [ReDoc ç OpenAPI æŽå
ïŒæå
¥èªèš logo](https://github.com/Rebilly/ReDoc/blob/master/docs/redoc-vendor-extensions.md#x-logo)ã
### äžè¬ç **FastAPI** { #normal-fastapi }
@@ -75,6 +75,6 @@
### 檢æ¥çç { #check-it }
-é 蚪 http://127.0.0.1:8000/redoc åŸïŒäœ æçå°èªèšç logoïŒæ€äŸçº **FastAPI** ç logoïŒïŒ
+é 蚪 [http://127.0.0.1:8000/redoc](http://127.0.0.1:8000/redoc) åŸïŒäœ æçå°èªèšç logoïŒæ€äŸçº **FastAPI** ç logoïŒïŒ
diff --git a/docs/zh-hant/docs/how-to/general.md b/docs/zh-hant/docs/how-to/general.md
index 96a71d62dd..13d4d7d3ee 100644
--- a/docs/zh-hant/docs/how-to/general.md
+++ b/docs/zh-hant/docs/how-to/general.md
@@ -4,36 +4,40 @@
## 篩éžè³æ - å®å
šæ§ { #filter-data-security }
-çºç¢ºä¿äœ äžæåå³è¶
åºææçè³æïŒè«åé±[æåž - åææš¡å - åå³åå¥](../tutorial/response-model.md){.internal-link target=_blank}ã
+çºç¢ºä¿äœ äžæåå³è¶
åºææçè³æïŒè«åé±[æåž - åææš¡å - åå³åå¥](../tutorial/response-model.md)ã
+
+## æäœ³ååææèœ - åææš¡å - åå³åå¥ { #optimize-response-performance-response-model-return-type }
+
+çºäºåšåå³ JSON è³æææäœ³åæèœïŒè«äœ¿çšåå³å奿忿š¡åïŒåŠæ€ Pydantic æåš Rust 端èçåºååçº JSONïŒèäžç¶é PythonãæŽå€å
§å®¹è«åé±[æåž - åææš¡å - åå³åå¥](../tutorial/response-model.md)ã
## æä»¶æšç±€ - OpenAPI { #documentation-tags-openapi }
-èŠåšäœ ç*è·¯åŸæäœïŒpath operationïŒ*å å
¥æšç±€ïŒäžŠåšæä»¶ UI äžåçµïŒè«åé±[æåž - è·¯åŸæäœèšå® - æšç±€](../tutorial/path-operation-configuration.md#tags){.internal-link target=_blank}ã
+èŠåšäœ ç*è·¯åŸæäœïŒpath operationïŒ*å å
¥æšç±€ïŒäžŠåšæä»¶ UI äžåçµïŒè«åé±[æåž - è·¯åŸæäœèšå® - æšç±€](../tutorial/path-operation-configuration.md#tags)ã
## æä»¶æèŠèæè¿° - OpenAPI { #documentation-summary-and-description-openapi }
-èŠçºäœ ç*è·¯åŸæäœ*å å
¥æèŠèæè¿°ïŒäžŠåšæä»¶ UI äžé¡¯ç€ºïŒè«åé±[æåž - è·¯åŸæäœèšå® - æèŠèæè¿°](../tutorial/path-operation-configuration.md#summary-and-description){.internal-link target=_blank}ã
+èŠçºäœ ç*è·¯åŸæäœ*å å
¥æèŠèæè¿°ïŒäžŠåšæä»¶ UI äžé¡¯ç€ºïŒè«åé±[æåž - è·¯åŸæäœèšå® - æèŠèæè¿°](../tutorial/path-operation-configuration.md#summary-and-description)ã
## æä»¶åææè¿° - OpenAPI { #documentation-response-description-openapi }
-èŠå®çŸ©åšæä»¶ UI äžé¡¯ç€ºçåææè¿°ïŒè«åé±[æåž - è·¯åŸæäœèšå® - åææè¿°](../tutorial/path-operation-configuration.md#response-description){.internal-link target=_blank}ã
+èŠå®çŸ©åšæä»¶ UI äžé¡¯ç€ºçåææè¿°ïŒè«åé±[æåž - è·¯åŸæäœèšå® - åææè¿°](../tutorial/path-operation-configuration.md#response-description)ã
## æä»¶å°*è·¯åŸæäœ*æšèšçºå·²æ£çš - OpenAPI { #documentation-deprecate-a-path-operation-openapi }
-èŠå°*è·¯åŸæäœ*æšèšçºå·²æ£çšïŒäžŠåšæä»¶ UI äžé¡¯ç€ºïŒè«åé±[æåž - è·¯åŸæäœèšå® - æ£çš](../tutorial/path-operation-configuration.md#deprecate-a-path-operation){.internal-link target=_blank}ã
+èŠå°*è·¯åŸæäœ*æšèšçºå·²æ£çšïŒäžŠåšæä»¶ UI äžé¡¯ç€ºïŒè«åé±[æåž - è·¯åŸæäœèšå® - æ£çš](../tutorial/path-operation-configuration.md#deprecate-a-path-operation)ã
## å°ä»»æè³æèœæçº JSON çžå®¹æ ŒåŒ { #convert-any-data-to-json-compatible }
-èŠå°ä»»æè³æèœæçº JSON çžå®¹æ ŒåŒïŒè«åé±[æåž - JSON çžå®¹ç·šç¢Œåš](../tutorial/encoder.md){.internal-link target=_blank}ã
+èŠå°ä»»æè³æèœæçº JSON çžå®¹æ ŒåŒïŒè«åé±[æåž - JSON çžå®¹ç·šç¢Œåš](../tutorial/encoder.md)ã
## OpenAPI äžç¹Œè³æ - æä»¶ { #openapi-metadata-docs }
-èŠåšäœ ç OpenAPI ç¶±èŠäžå å
¥äžç¹Œè³æïŒå
嫿æ¬ãçæ¬ãè¯çµ¡æ¹åŒçïŒïŒè«åé±[æåž - äžç¹Œè³æèæä»¶ URL](../tutorial/metadata.md){.internal-link target=_blank}ã
+èŠåšäœ ç OpenAPI ç¶±èŠäžå å
¥äžç¹Œè³æïŒå
嫿æ¬ãçæ¬ãè¯çµ¡æ¹åŒçïŒïŒè«åé±[æåž - äžç¹Œè³æèæä»¶ URL](../tutorial/metadata.md)ã
## èªèš OpenAPI URL { #openapi-custom-url }
-èŠèªèšïŒæç§»é€ïŒOpenAPI ç URLïŒè«åé±[æåž - äžç¹Œè³æèæä»¶ URL](../tutorial/metadata.md#openapi-url){.internal-link target=_blank}ã
+èŠèªèšïŒæç§»é€ïŒOpenAPI ç URLïŒè«åé±[æåž - äžç¹Œè³æèæä»¶ URL](../tutorial/metadata.md#openapi-url)ã
## OpenAPI æä»¶ URL { #openapi-docs-urls }
-èŠæŽæ°èªåç¢ççæä»¶äœ¿çšè
ä»é¢æäœ¿çšç URLïŒè«åé±[æåž - äžç¹Œè³æèæä»¶ URL](../tutorial/metadata.md#docs-urls){.internal-link target=_blank}ã
+èŠæŽæ°èªåç¢ççæä»¶äœ¿çšè
ä»é¢æäœ¿çšç URLïŒè«åé±[æåž - äžç¹Œè³æèæä»¶ URL](../tutorial/metadata.md#docs-urls)ã
diff --git a/docs/zh-hant/docs/how-to/graphql.md b/docs/zh-hant/docs/how-to/graphql.md
index 51933210c5..24e4d89792 100644
--- a/docs/zh-hant/docs/how-to/graphql.md
+++ b/docs/zh-hant/docs/how-to/graphql.md
@@ -18,18 +18,18 @@ GraphQL 解決æäºéåžžç¹å®çäœ¿çšæ
å¢ã
äžé¢æ¯æ¯æŽ ASGI çéšå GraphQL åœåŒåº«ïŒäœ å¯ä»¥è FastAPI äžèµ·äœ¿çšïŒ
-* Strawberry ð
- * æäŸ FastAPI æä»¶
-* Ariadne
- * æäŸ FastAPI æä»¶
-* Tartiflette
- * äœ¿çš Tartiflette ASGI æäŸ ASGI æŽå
-* Graphene
- * æé
starlette-graphene3
+* [Strawberry](https://strawberry.rocks/) ð
+ * æäŸ [FastAPI æä»¶](https://strawberry.rocks/docs/integrations/fastapi)
+* [Ariadne](https://ariadnegraphql.org/)
+ * æäŸ [FastAPI æä»¶](https://ariadnegraphql.org/docs/fastapi-integration)
+* [Tartiflette](https://tartiflette.io/)
+ * äœ¿çš [Tartiflette ASGI](https://tartiflette.github.io/tartiflette-asgi/) æäŸ ASGI æŽå
+* [Graphene](https://graphene-python.org/)
+ * æé
[starlette-graphene3](https://github.com/ciscorn/starlette-graphene3)
## äœ¿çš Strawberry ç GraphQL { #graphql-with-strawberry }
-åŠæäœ éèŠææ³äœ¿çš GraphQLïŒStrawberry æ¯æšèŠçåœåŒåº«ïŒå çºå®çèšèšè FastAPI ææ¥è¿ïŒå
šéšéœåºæŒåå¥èš»è§£ (type annotations)ã
+åŠæäœ éèŠææ³äœ¿çš GraphQLïŒ[Strawberry](https://strawberry.rocks/) æ¯æšèŠçåœåŒåº«ïŒå çºå®çèšèšè FastAPI ææ¥è¿ïŒå
šéšéœåºæŒåå¥èš»è§£ (type annotations)ã
èŠäœ çäœ¿çšæ
å¢èå®ïŒäœ å¯èœæå奜å
¶ä»åœåŒåº«ïŒäœåŠæäœ åæïŒæå€§æŠæå»ºè°äœ å
詊詊 Strawberryã
@@ -37,24 +37,24 @@ GraphQL 解決æäºéåžžç¹å®çäœ¿çšæ
å¢ã
{* ../../docs_src/graphql_/tutorial001_py310.py hl[3,22,25] *}
-äœ å¯ä»¥åš Strawberry æä»¶ äžé²äžæ¥äºè§£ Strawberryã
+äœ å¯ä»¥åš [Strawberry æä»¶](https://strawberry.rocks/) äžé²äžæ¥äºè§£ Strawberryã
-ä¹å¯ä»¥åèéæŒ Strawberry è FastAPI çæä»¶ã
+ä¹å¯ä»¥åèéæŒ [Strawberry è FastAPI](https://strawberry.rocks/docs/integrations/fastapi) çæä»¶ã
## äŸèª Starlette çèŒè `GraphQLApp` { #older-graphqlapp-from-starlette }
-æ©æçæ¬ç Starlette æäŸ `GraphQLApp` é¡å¥ä»¥æŽå Grapheneã
+æ©æçæ¬ç Starlette æäŸ `GraphQLApp` é¡å¥ä»¥æŽå [Graphene](https://graphene-python.org/)ã
-å®å·²åš Starlette äžè¢«æ£çšïŒäœåŠæäœ ççšåŒç¢Œäœ¿çšäºå®ïŒå¯ä»¥èŒé¬é·ç§»å° starlette-graphene3ïŒæ¶µèçžåçäœ¿çšæ
å¢ïŒäžä»é¢å¹Ÿä¹çžåã
+å®å·²åš Starlette äžè¢«æ£çšïŒäœåŠæäœ ççšåŒç¢Œäœ¿çšäºå®ïŒå¯ä»¥èŒé¬é·ç§»å° [starlette-graphene3](https://github.com/ciscorn/starlette-graphene3)ïŒæ¶µèçžåçäœ¿çšæ
å¢ïŒäžä»é¢å¹Ÿä¹çžåã
/// tip
-åŠæäœ éèŠ GraphQLïŒæä»å»ºè°äœ çç StrawberryïŒå çºå®åºæŒåå¥èš»è§£ïŒèäžæ¯èªèšçé¡å¥èåå¥ã
+åŠæäœ éèŠ GraphQLïŒæä»å»ºè°äœ çç [Strawberry](https://strawberry.rocks/)ïŒå çºå®åºæŒåå¥èš»è§£ïŒèäžæ¯èªèšçé¡å¥èåå¥ã
///
## é²äžæ¥äºè§£ { #learn-more }
-äœ å¯ä»¥åš 宿¹ GraphQL æä»¶ äžé²äžæ¥äºè§£ GraphQLã
+äœ å¯ä»¥åš [宿¹ GraphQL æä»¶](https://graphql.org/) äžé²äžæ¥äºè§£ GraphQLã
äœ ä¹å¯ä»¥ééäžè¿°é£çµé±è®åååœåŒåº«çæŽå€å
§å®¹ã
diff --git a/docs/zh-hant/docs/how-to/index.md b/docs/zh-hant/docs/how-to/index.md
index 6c9a8202c0..c08bd3d663 100644
--- a/docs/zh-hant/docs/how-to/index.md
+++ b/docs/zh-hant/docs/how-to/index.md
@@ -8,6 +8,6 @@
/// tip
-åŠæäœ æ³èŠä»¥çµæ§åçæ¹åŒ**åžç¿ FastAPI**ïŒæšèŠïŒïŒè«ååŸ[æåž - 䜿çšè
æå](../tutorial/index.md){.internal-link target=_blank}éç« é±è®ã
+åŠæäœ æ³èŠä»¥çµæ§åçæ¹åŒ**åžç¿ FastAPI**ïŒæšèŠïŒïŒè«ååŸ[æåž - 䜿çšè
æå](../tutorial/index.md)éç« é±è®ã
///
diff --git a/docs/zh-hant/docs/how-to/migrate-from-pydantic-v1-to-pydantic-v2.md b/docs/zh-hant/docs/how-to/migrate-from-pydantic-v1-to-pydantic-v2.md
index 109e57bc81..4495e3dd70 100644
--- a/docs/zh-hant/docs/how-to/migrate-from-pydantic-v1-to-pydantic-v2.md
+++ b/docs/zh-hant/docs/how-to/migrate-from-pydantic-v1-to-pydantic-v2.md
@@ -22,7 +22,7 @@ Pydantic åéèª **Python 3.14** èµ·ïŒå·²åæ¢åšææ°ç Python çæ¬äž
## 宿¹æå { #official-guide }
-Pydantic æäŸåŸ v1 é·ç§»å° v2 ç宿¹é·ç§»æåã
+Pydantic æäŸåŸ v1 é·ç§»å° v2 ç宿¹[é·ç§»æå](https://docs.pydantic.dev/latest/migration/)ã
å
¶äžå
å«è®æŽå
§å®¹ãé©èåŠäœæŽæ£ç¢ºäžæŽåŽæ Œãå¯èœç泚æäºé
çã
@@ -30,7 +30,7 @@ Pydantic æäŸåŸ v1 é·ç§»å° v2 ç宿¹`bump-pydantic`ã
+äœ å¯ä»¥äœ¿çš Pydantic åéæäŸç [`bump-pydantic`](https://github.com/pydantic/bump-pydantic)ã
éåå·¥å
·æèªåä¿®æ¹å€§éšåéèŠè®æŽççšåŒç¢Œã
diff --git a/docs/zh-hant/docs/how-to/testing-database.md b/docs/zh-hant/docs/how-to/testing-database.md
index cbaecc2389..cf1ed9d36a 100644
--- a/docs/zh-hant/docs/how-to/testing-database.md
+++ b/docs/zh-hant/docs/how-to/testing-database.md
@@ -1,7 +1,7 @@
# æž¬è©Šè³æåº« { #testing-a-database }
-äœ å¯ä»¥åš SQLModel æä»¶ äžåžç¿éæŒè³æåº«ãSQL è SQLModelã ð€
+äœ å¯ä»¥åš [SQLModel æä»¶](https://sqlmodel.tiangolo.com/) äžåžç¿éæŒè³æåº«ãSQL è SQLModelã ð€
-æäžåè¿·äœ å° SQLModel è FastAPI æé
䜿çšçæåžã âš
+æäžåè¿·äœ [å° SQLModel è FastAPI æé
䜿çšçæåž](https://sqlmodel.tiangolo.com/tutorial/fastapi/)ã âš
-該æåžå
å«äžç¯ä»ç޹ 枬詊 SQL è³æåº«ã ð
+該æåžå
å«äžç¯ä»ç޹ [枬詊 SQL è³æåº«](https://sqlmodel.tiangolo.com/tutorial/fastapi/tests/)ã ð
diff --git a/docs/zh-hant/docs/index.md b/docs/zh-hant/docs/index.md
index 77eba9b149..d57791bf8b 100644
--- a/docs/zh-hant/docs/index.md
+++ b/docs/zh-hant/docs/index.md
@@ -11,25 +11,25 @@
FastAPI æ¡æ¶ïŒé«æèœïŒææŒåžç¿ïŒå¿«ééçŒïŒé©çšæŒçç¢ç°å¢
-
+
-
+
-
+
-
+
---
-**æä»¶**ïŒ https://fastapi.tiangolo.com/zh-hant
+**æä»¶**ïŒ [https://fastapi.tiangolo.com/zh-hant](https://fastapi.tiangolo.com/zh-hant)
-**çšåŒç¢Œ**ïŒ https://github.com/fastapi/fastapi
+**çšåŒç¢Œ**ïŒ [https://github.com/fastapi/fastapi](https://github.com/fastapi/fastapi)
---
@@ -44,7 +44,7 @@ FastAPI æ¯äžåçŸä»£ãå¿«éïŒé«æèœïŒç Web æ¡æ¶ïŒçšæŒä»¥ Python
* **ç°¡å®**ïŒèšèšäžææŒäœ¿çšèåžç¿ãæŽå°çè®æä»¶æéã
* **ç°¡æœ**ïŒæå°åçšåŒç¢Œéè€æ§ãæ¯ååæžå®£åå¯åž¶äŸå€ååèœãæŽå°çé¯èª€ã
* **ç©©å¥**ïŒç«å³ç²åŸå¯æå
¥çç¢ççšåŒç¢ŒïŒäžŠèªåçæäºååŒæä»¶ã
-* **æšæºå**ïŒåºæŒïŒäžå®å
šçžå®¹æŒïŒAPI çéæŸæšæºïŒOpenAPIïŒä¹åçš±çº SwaggerïŒå JSON Schemaã
+* **æšæºå**ïŒåºæŒïŒäžå®å
šçžå®¹æŒïŒAPI çéæŸæšæºïŒ[OpenAPI](https://github.com/OAI/OpenAPI-Specification)ïŒä¹åçš±çº SwaggerïŒå [JSON Schema](https://json-schema.org/)ã
* åºæŒå
§éšéçŒåéåšå»ºç«çç¢æçšçšåŒæç枬詊é 䌰ã
@@ -55,51 +55,51 @@ FastAPI æ¯äžåçŸä»£ãå¿«éïŒé«æèœïŒç Web æ¡æ¶ïŒçšæŒä»¥ Python
### åºç³èŽå©å { #keystone-sponsor }
{% for sponsor in sponsors.keystone -%}
-
+
{% endfor -%}
### éçŽèéçŽèŽå©å { #gold-and-silver-sponsors }
{% for sponsor in sponsors.gold -%}
-
+
{% endfor -%}
{%- for sponsor in sponsors.silver -%}
-
+
{% endfor %}
-å
¶ä»èŽå©å
+[å
¶ä»èŽå©å](https://fastapi.tiangolo.com/zh-hant/fastapi-people/#sponsors)
## è©å¹ { #opinions }
"_[...] è¿æå€§éäœ¿çš **FastAPI**ã[...] æå¯Šéäžæç®åšæåš**埮è»**åéçææ**æ©åšåžç¿**æåäžäœ¿çšå®ãå
¶äžäžäºæ£åšæŽåå°æ žå¿ç **Windows** ç¢åïŒä»¥åäžäº **Office** ç¢åã_"
-Kabir Khan -
Microsoft (ref)
+Kabir Khan -
Microsoft (ref)
---
"_æåæ¡çšäº **FastAPI** åœåŒåº«äŸååäžå **REST** 䌺æåšïŒäŸæ¥è©¢ä»¥ååŸ**é æž¬**ã[for Ludwig]_"
-Piero Molino, Yaroslav Dudin, and Sai Sumanth Miryala -
Uber (ref)
+Piero Molino, Yaroslav Dudin, and Sai Sumanth Miryala -
Uber (ref)
---
"_**Netflix** åŸé«èå®£åžæåç**屿©ç®¡ç**åèª¿æ¡æ¶ **Dispatch** éæºïŒ[äœ¿çš **FastAPI** 建æ§]_"
-Kevin Glisson, Marc Vilanova, Forest Monsen -
Netflix (ref)
+Kevin Glisson, Marc Vilanova, Forest Monsen -
Netflix (ref)
---
"_æå° **FastAPI** è奮åŸäžåŸäºãè¶
奜ç©ïŒ_"
-
+Brian Okken -
[Python Bytes](https://pythonbytes.fm/episodes/show/123/time-to-right-the-py-wrongs?time_in_sec=855) podcast äž»æäºº (ref)
---
"_è寊說ïŒäœ ååççèµ·äŸéåžžç©©å¥å粟緻ãåŸå€æ¹é¢éœæ£æ¯æåžæ **Hug** æçºç暣åââçå°æäººæå®å»ºåºäŸççåŸéŒè人å¿ã_"
-
+Timothy Crosley -
[Hug](https://github.com/hugapi/hug) åµäœè
(ref)
---
@@ -107,27 +107,27 @@ FastAPI æ¯äžåçŸä»£ãå¿«éïŒé«æèœïŒç Web æ¡æ¶ïŒçšæŒä»¥ Python
"_æåç **API** å·²ç¶æ¹çš **FastAPI** [...] ææ³äœ æåæ¡å® [...]_"
-
+Ines Montani - Matthew Honnibal -
[Explosion AI](https://explosion.ai) åµèŸŠäºº - [spaCy](https://spacy.io) åµäœè
(ref) -
(ref)
---
-"_åŠææäººæ³èŠå»ºç«äžå坿å
¥çç¢ç Python APIïŒæåŒ·çæšèŠ **FastAPI**ãå®**èšèšç²ŸçŸ**ã**䜿çšç°¡å®**äž**é«åºŠå¯æŽå
**ïŒå·²æçºæå API åªå
éçŒçç¥äžç**ééµçµä»¶**ïŒæšåäºèš±å€èªååèæåïŒäŸåŠæåç Virtual TAC Engineerã_"
+"_åŠææäººæ³èŠæé äžåå¯çšæŒçç¢ç°å¢ç Python APIïŒæåŒ·åæšèŠ **FastAPI**ãå®**èšèšåªé
**ã**ç°¡å®æçš**äž**é«åºŠå¯æŽå±**ïŒå·²ç¶æçºæå API first éçŒçç¥äžç**ééµå
ä»¶**ïŒæšåäºèš±å€èªååèæåïŒäŸåŠæåç Virtual TAC Engineerã_"
-Deon Pillsbury -
Cisco (ref)
+Deon Pillsbury -
Cisco (ref)
---
## FastAPI è¿·äœ çŽéç { #fastapi-mini-documentary }
-åš 2025 幎åºçŒåžäºäžæ¯ FastAPI è¿·äœ çŽéçïŒäœ å¯ä»¥åšç·äžè§çïŒ
+åš 2025 幎åºçŒåžäºäžæ¯ [FastAPI è¿·äœ çŽéç](https://www.youtube.com/watch?v=mpR8ngthqiE)ïŒäœ å¯ä»¥åšç·äžè§çïŒ
-
+
## **Typer**ïŒåœä»€åç FastAPI { #typer-the-fastapi-of-clis }
-
+
-åŠæäœ äžæ¯åšå Web APIïŒèæ¯èŠå»ºç«äžååšçµç«¯æ©äžäœ¿çšç CLI æçšçšåŒïŒå¯ä»¥çç **Typer**ã
+åŠæäœ äžæ¯åšå Web APIïŒèæ¯èŠå»ºç«äžååšçµç«¯æ©äžäœ¿çšç CLI æçšçšåŒïŒå¯ä»¥çç [**Typer**](https://typer.tiangolo.com/)ã
**Typer** æ¯ FastAPI çå°èåŒãä»ç«å¿æçºåœä»€åäžçç **FastAPI**ãâšïž ð
@@ -135,12 +135,12 @@ FastAPI æ¯äžåçŸä»£ãå¿«éïŒé«æèœïŒç Web æ¡æ¶ïŒçšæŒä»¥ Python
FastAPI æ¯ç«åšä»¥äžå·šäººçè©èäžïŒ
-* Starlette è² è²¬ Web éšåã
-* Pydantic è² è²¬è³æéšåã
+* [Starlette](https://www.starlette.dev/) è² è²¬ Web éšåã
+* [Pydantic](https://docs.pydantic.dev/) è² è²¬è³æéšåã
## å®è£ { #installation }
-建ç«äžŠåçšäžåèæ¬ç°å¢ïŒç¶åŸå®è£ FastAPIïŒ
+建ç«äžŠåçšäžå[èæ¬ç°å¢](https://fastapi.tiangolo.com/zh-hant/virtual-environments/)ïŒç¶åŸå®è£ FastAPIïŒ
@@ -199,7 +199,7 @@ async def read_item(item_id: int, q: str | None = None):
**泚æ**ïŒ
-åŠæäœ äžç¢ºå®ïŒè«æ¥çæä»¶äž _"In a hurry?"_ ç« ç¯ç
`async` è `await`ã
+åŠæäœ äžç¢ºå®ïŒè«æ¥çæä»¶äž _"In a hurry?"_ ç« ç¯ç[éæŒæä»¶äžç `async` è `await`](https://fastapi.tiangolo.com/zh-hant/async/#in-a-hurry)ã
@@ -210,7 +210,7 @@ async def read_item(item_id: int, q: str | None = None):
```console
-$ fastapi dev main.py
+$ fastapi dev
âââââââââââ FastAPI CLI - Development mode ââââââââââââ®
â â
@@ -235,19 +235,19 @@ INFO: Application startup complete.
-éæŒæä»€ fastapi dev main.py...
+éæŒæä»€ fastapi dev...
-æä»€ `fastapi dev` æè®åäœ ç `main.py`ïŒåµæž¬å
¶äžç **FastAPI** æçšïŒäžŠäœ¿çš Uvicorn åå䌺æåšã
+æä»€ `fastapi dev` æè®åäœ ç `main.py`ïŒåµæž¬å
¶äžç **FastAPI** æçšïŒäžŠäœ¿çš [Uvicorn](https://www.uvicorn.dev) åå䌺æåšã
é èšæ
æ³äžïŒ`fastapi dev` æå𿬿©éçŒæåçšèªåéæ°èŒå
¥ã
-å¯åš FastAPI CLI æä»¶äžé±è®æŽå€è³èšã
+å¯åš [FastAPI CLI æä»¶](https://fastapi.tiangolo.com/zh-hant/fastapi-cli/)äžé±è®æŽå€è³èšã
### æª¢æ¥ { #check-it }
-䜿çšç芜åšéå
http://127.0.0.1:8000/items/5?q=somequeryã
+䜿çšç芜åšéå [http://127.0.0.1:8000/items/5?q=somequery](http://127.0.0.1:8000/items/5?q=somequery)ã
äœ å°æçå°ä»¥äž JSON åæïŒ
@@ -264,17 +264,17 @@ INFO: Application startup complete.
### äºååŒ API æä»¶ { #interactive-api-docs }
-æ¥èååŸ
http://127.0.0.1:8000/docsã
+æ¥èååŸ [http://127.0.0.1:8000/docs](http://127.0.0.1:8000/docs)ã
-äœ æçå°èªåçæçäºååŒ API æä»¶ïŒç±
Swagger UI æäŸïŒïŒ
+äœ æçå°èªåçæçäºååŒ API æä»¶ïŒç± [Swagger UI](https://github.com/swagger-api/swagger-ui) æäŸïŒïŒ

### æ¿ä»£ API æä»¶ { #alternative-api-docs }
-çŸåšååŸ
http://127.0.0.1:8000/redocã
+çŸåšååŸ [http://127.0.0.1:8000/redoc](http://127.0.0.1:8000/redoc)ã
-äœ æçå°åŠäžçš®èªåæä»¶ïŒç±
ReDoc æäŸïŒïŒ
+äœ æçå°åŠäžçš®èªåæä»¶ïŒç± [ReDoc](https://github.com/Rebilly/ReDoc) æäŸïŒïŒ

@@ -316,7 +316,7 @@ def update_item(item_id: int, item: Item):
### äºååŒ API æä»¶åçŽ { #interactive-api-docs-upgrade }
-ååŸ
http://127.0.0.1:8000/docsã
+ååŸ [http://127.0.0.1:8000/docs](http://127.0.0.1:8000/docs)ã
* äºååŒ API æä»¶æèªåæŽæ°ïŒå
嫿°ç bodyïŒ
@@ -332,7 +332,7 @@ def update_item(item_id: int, item: Item):
### æ¿ä»£ API æä»¶åçŽ { #alternative-api-docs-upgrade }
-çŸåšååŸ
http://127.0.0.1:8000/redocã
+çŸåšååŸ [http://127.0.0.1:8000/redoc](http://127.0.0.1:8000/redoc)ã
* æ¿ä»£æä»¶ä¹æåæ æ°çæ¥è©¢åæžè bodyïŒ
@@ -433,7 +433,7 @@ item: Item

-è¥æ³çå
嫿Žå€åèœç宿Žç¯äŸïŒè«åè
æåž - 䜿çšè
æåã
+è¥æ³çå
嫿Žå€åèœç宿Žç¯äŸïŒè«åè
Tutorial - User Guideã
**åéèŠå**ïŒæåž - 䜿çšè
æåå
å«ïŒ
@@ -442,7 +442,7 @@ item: Item
* äžåéåžžåŒ·å€§äžæçšç **
äŸè³Žæ³šå
¥** 系統ã
* å®å
šèé©èïŒå
嫿¯æŽ **OAuth2** æé
**JWT tokens** è **HTTP Basic** é©èã
* 宣å**深床巢ç JSON æš¡å**çé²éïŒäœå暣簡å®ïŒæå·§ïŒæè¬ PydanticïŒã
-* è
Strawberry åå
¶ä»åœåŒåº«ç **GraphQL** æŽåã
+* è [Strawberry](https://strawberry.rocks) åå
¶ä»åœåŒåº«ç **GraphQL** æŽåã
* èš±å€é¡å€åèœïŒæè¬ StarletteïŒïŒäŸåŠïŒ
* **WebSockets**
* åºæŒ HTTPX è `pytest` çæ¥µå
¶ç°¡å®ç枬詊
@@ -452,24 +452,10 @@ item: Item
### éšçœ²äœ çæçšïŒå¯éžïŒ { #deploy-your-app-optional }
-äœ ä¹å¯ä»¥éžæå° FastAPI æçšéšçœ²å°
FastAPI CloudïŒåŠæäœ éæ²å å
¥ïŒå»ç»èšçååå®å§ãð
+äœ ä¹å¯ä»¥éžæå° FastAPI æçšéšçœ²å° [FastAPI Cloud](https://fastapicloud.com)ïŒåŠæäœ éæ²å å
¥ïŒå»ç»èšçååå®å§ãð
åŠæäœ å·²ç¶æ **FastAPI Cloud** åž³èïŒæåå·²åŸçååå®éè«äœ ðïŒïŒäœ å¯ä»¥çšäžåæä»€éšçœ²äœ çæçšã
-éšçœ²åïŒå
確èªäœ å·²ç»å
¥ïŒ
-
-
-
-```console
-$ fastapi login
-
-You are logged in to FastAPI Cloud ð
-```
-
-
-
-æ¥èéšçœ²äœ çæçšïŒ
-
```console
@@ -488,7 +474,7 @@ Deploying to FastAPI Cloud...
#### éæŒ FastAPI Cloud { #about-fastapi-cloud }
-**
FastAPI Cloud** ç± **FastAPI** çåäžäœäœè
èåéæé ã
+**[FastAPI Cloud](https://fastapicloud.com)** ç± **FastAPI** çåäžäœäœè
èåéæé ã
å®è®äœ 以æå°çåªå粟簡å°å®æ API ç**建眮**ã**éšçœ²**è**åå**æµçšã
@@ -504,9 +490,9 @@ FastAPI æ¯éæºäžåºæŒæšæºãäœ å¯ä»¥æ FastAPI æçšéšçœ²å°ä»»äœäœ
## æèœ { #performance }
-çšç«ç TechEmpower åºæºæž¬è©Šé¡¯ç€ºïŒåš Uvicorn äžéè¡ç **FastAPI** æçšæ¯
æå¿«ç Python æ¡æ¶ä¹äžïŒå
æ¬¡æŒ Starlette è Uvicorn æ¬èº«ïŒFastAPI å
§éšäœ¿çšå®åïŒã(*)
+çšç«ç TechEmpower åºæºæž¬è©Šé¡¯ç€ºïŒåš Uvicorn äžéè¡ç **FastAPI** æçšæ¯[æå¿«ç Python æ¡æ¶ä¹äž](https://www.techempower.com/benchmarks/#section=test&runid=7464e520-0dc2-473d-bd34-dbdfd7e85911&hw=ph&test=query&l=zijzen-7)ïŒå
æ¬¡æŒ Starlette è Uvicorn æ¬èº«ïŒFastAPI å
§éšäœ¿çšå®åïŒã(*)
-æ³äºè§£æŽå€ïŒè«åé±
æž¬è©Šçµæã
+æ³äºè§£æŽå€ïŒè«åé±[æž¬è©Šçµæ](https://fastapi.tiangolo.com/zh-hant/benchmarks/)ã
## äŸè³Žå¥ä»¶ { #dependencies }
@@ -518,19 +504,19 @@ FastAPI äŸè³Ž Pydantic è Starletteã
Pydantic æäœ¿çšïŒ
-*
email-validator - çšæŒé»åéµä»¶é©èã
+* [`email-validator`](https://github.com/JoshData/python-email-validator) - çšæŒé»åéµä»¶é©èã
Starlette æäœ¿çšïŒ
-*
httpx - è¥èŠäœ¿çš `TestClient` å¿
é å®è£ã
-*
jinja2 - è¥èŠäœ¿çšé èšçæš¡æ¿èšå®å¿
é å®è£ã
-*
python-multipart - è¥èŠæ¯æŽè¡šå®
"è§£æ"ïŒæé
`request.form()`ã
+* [`httpx`](https://www.python-httpx.org) - è¥èŠäœ¿çš `TestClient` å¿
é å®è£ã
+* [`jinja2`](https://jinja.palletsprojects.com) - è¥èŠäœ¿çšé èšçæš¡æ¿èšå®å¿
é å®è£ã
+* [`python-multipart`](https://github.com/Kludex/python-multipart) - è¥èŠæ¯æŽè¡šå®
"è§£æ"ïŒæé
`request.form()`ã
FastAPI æäœ¿çšïŒ
-*
uvicorn - çšæŒèŒå
¥äžŠæåäœ çæçšç䌺æåšãéå
å« `uvicorn[standard]`ïŒå
¶äžå«æäžäºé«æèœæåæéçäŸè³ŽïŒäŸåŠ `uvloop`ïŒã
+* [`uvicorn`](https://www.uvicorn.dev) - çšæŒèŒå
¥äžŠæåäœ çæçšç䌺æåšãéå
å« `uvicorn[standard]`ïŒå
¶äžå«æäžäºé«æèœæåæéçäŸè³ŽïŒäŸåŠ `uvloop`ïŒã
* `fastapi-cli[standard]` - æäŸ `fastapi` æä»€ã
- * å
¶äžå
å« `fastapi-cloud-cli`ïŒå¯è®äœ å° FastAPI æçšéšçœ²å°
FastAPI Cloudã
+ * å
¶äžå
å« `fastapi-cloud-cli`ïŒå¯è®äœ å° FastAPI æçšéšçœ²å° [FastAPI Cloud](https://fastapicloud.com)ã
### äžå« `standard` äŸè³Žå¥ä»¶ { #without-standard-dependencies }
@@ -546,13 +532,13 @@ FastAPI æäœ¿çšïŒ
Pydantic çé¡å€å¯éžäŸè³ŽïŒ
-*
pydantic-settings - èšå®ç®¡çã
-*
pydantic-extra-types - è Pydantic äžèµ·äœ¿çšçé¡å€åå¥ã
+* [`pydantic-settings`](https://docs.pydantic.dev/latest/usage/pydantic_settings/) - èšå®ç®¡çã
+* [`pydantic-extra-types`](https://docs.pydantic.dev/latest/usage/types/extra_types/extra_types/) - è Pydantic äžèµ·äœ¿çšçé¡å€åå¥ã
FastAPI çé¡å€å¯éžäŸè³ŽïŒ
-*
orjson - è¥èŠäœ¿çš `ORJSONResponse` å¿
é å®è£ã
-*
ujson - è¥èŠäœ¿çš `UJSONResponse` å¿
é å®è£ã
+* [`orjson`](https://github.com/ijl/orjson) - è¥èŠäœ¿çš `ORJSONResponse` å¿
é å®è£ã
+* [`ujson`](https://github.com/esnme/ultrajson) - è¥èŠäœ¿çš `UJSONResponse` å¿
é å®è£ã
## ææ¬ { #license }
diff --git a/docs/zh-hant/docs/project-generation.md b/docs/zh-hant/docs/project-generation.md
index 7fa92ce558..fc5c8e4655 100644
--- a/docs/zh-hant/docs/project-generation.md
+++ b/docs/zh-hant/docs/project-generation.md
@@ -4,7 +4,7 @@
äœ å¯ä»¥äœ¿çšæ€ç¯æ¬å¿«éèµ·æ¥ïŒè£¡é¢å·²æ¿äœ 宿倧éåå§èšå®ãå®å
šæ§ãè³æåº«ïŒä»¥åéšå API 端é»ã
-GitHub å²å庫ïŒ
å
šç«¯ FastAPI ç¯æ¬
+GitHub å²å庫ïŒ[å
šç«¯ FastAPI ç¯æ¬](https://github.com/tiangolo/full-stack-fastapi-template)
## å
šç«¯ FastAPI ç¯æ¬ - æè¡å çèåèœ { #full-stack-fastapi-template-technology-stack-and-features }
diff --git a/docs/zh-hant/docs/python-types.md b/docs/zh-hant/docs/python-types.md
index 4f498ab734..4193069ea7 100644
--- a/docs/zh-hant/docs/python-types.md
+++ b/docs/zh-hant/docs/python-types.md
@@ -269,7 +269,7 @@ def some_function(data: Any):
## Pydantic æš¡å { #pydantic-models }
-
Pydantic æ¯äžåçšäŸåè³æé©èç Python çšåŒåº«ã
+[Pydantic](https://docs.pydantic.dev/) æ¯äžåçšäŸåè³æé©èç Python çšåŒåº«ã
äœ ä»¥åž¶æå±¬æ§çé¡å¥äŸå®£åè³æçã圢çãã
@@ -285,13 +285,13 @@ def some_function(data: Any):
/// info | è³èš
-æ³äºè§£æŽå€
PydanticïŒè«æ¥çå®çæä»¶ã
+æ³äºè§£æŽå€ [PydanticïŒè«æ¥çå®çæä»¶](https://docs.pydantic.dev/)ã
///
**FastAPI** å®å
šæ¯ä»¥ Pydantic çºåºç€ã
-äœ æåš[æåž - 䜿çšè
æå](tutorial/index.md){.internal-link target=_blank}äžçå°æŽå€å¯Šéç¯äŸã
+äœ æåš[æåž - 䜿çšè
æå](tutorial/index.md)äžçå°æŽå€å¯Šéç¯äŸã
## å«äžç¹Œè³æçåå¥æç€º { #type-hints-with-metadata-annotations }
@@ -337,12 +337,12 @@ Python æ¬èº«äžæå°éå `Annotated` åä»»äœäºãå°ç·šèŒ¯åšèå
¶ä»å·¥
* äœ¿çš OpenAPI æžå¯« API æä»¶ïŒ
* ä¹åŸæç±èªåçäºååŒæä»¶ä»é¢æäœ¿çš
-éäºçŸåšèœèµ·äŸå¯èœæé»æœè±¡ã奿å¿ãäœ æåš[æåž - 䜿çšè
æå](tutorial/index.md){.internal-link target=_blank}äžçå°å®åç寊ééäœã
+éäºçŸåšèœèµ·äŸå¯èœæé»æœè±¡ã奿å¿ãäœ æåš[æåž - 䜿çšè
æå](tutorial/index.md)äžçå°å®åç寊ééäœã
é黿¯ïŒééåšå®äžäœçœ®äœ¿çšæšæºç Python åå¥ïŒèäžæ¯æ°å¢æŽå€é¡å¥ãè£é£ŸåšçïŒïŒ**FastAPI** æå¹«äœ 宿åŸå€å·¥äœã
/// info | è³èš
-åŠæäœ å·²ç¶å®æŽè®å®æŽåæåžïŒäžŠåäŸæ³å€çäžäºéæŒåå¥çå
§å®¹ïŒäžåäžé¯çè³æºæ¯
`mypy` çãå°æãã
+åŠæäœ å·²ç¶å®æŽè®å®æŽåæåžïŒäžŠåäŸæ³å€çäžäºéæŒåå¥çå
§å®¹ïŒäžåäžé¯çè³æºæ¯ [`mypy` çãå°æã](https://mypy.readthedocs.io/en/latest/cheat_sheet_py3.html)ã
///
diff --git a/docs/zh-hant/docs/tutorial/background-tasks.md b/docs/zh-hant/docs/tutorial/background-tasks.md
index 63e4e5a160..216ec88689 100644
--- a/docs/zh-hant/docs/tutorial/background-tasks.md
+++ b/docs/zh-hant/docs/tutorial/background-tasks.md
@@ -61,7 +61,7 @@
## æè¡çŽ°ç¯ { #technical-details }
-é¡å¥ `BackgroundTasks` çŽæ¥äŸèª
`starlette.background`ã
+é¡å¥ `BackgroundTasks` çŽæ¥äŸèª [`starlette.background`](https://www.starlette.dev/background/)ã
å®è¢«çŽæ¥å¯å
¥/å
å«å° FastAPI äžïŒå æ€äœ å¯ä»¥åŸ `fastapi` å¯å
¥å®ïŒäžŠé¿å
äžå°å¿åŸ `starlette.background` å¯å
¥åŠäžåååç `BackgroundTask`ïŒçµå°Ÿæ²æ sïŒã
@@ -69,11 +69,11 @@
åš FastAPI äžä»å¯å®çšäœ¿çš `BackgroundTask`ïŒäœäœ éèŠåšçšåŒç¢Œäžèªè¡å»ºç«è©²ç©ä»¶ïŒäžŠåå³å
å«å®ç Starlette `Response`ã
-æŽå€çްç¯è«åé±
Starlette 宿¹ç Background Tasks æä»¶ã
+æŽå€çްç¯è«åé± [Starlette 宿¹ç Background Tasks æä»¶](https://www.starlette.dev/background/)ã
## 泚æäºé
{ #caveat }
-åŠæäœ éèŠå·è¡ç¹éçèæ¯èšç®ïŒäžäžäžå®èŠç±åäžåè¡çšå·è¡ïŒäŸåŠäžéèŠå
±çšèšæ¶é«ãè®æžçïŒïŒå¯ä»¥èæ
®äœ¿çšæŽå€§åçå·¥å
·ïŒäŸåŠ
Celeryã
+åŠæäœ éèŠå·è¡ç¹éçèæ¯èšç®ïŒäžäžäžå®èŠç±åäžåè¡çšå·è¡ïŒäŸåŠäžéèŠå
±çšèšæ¶é«ãè®æžçïŒïŒå¯ä»¥èæ
®äœ¿çšæŽå€§åçå·¥å
·ïŒäŸåŠ [Celery](https://docs.celeryq.dev)ã
éé¡å·¥å
·éåžžéèŠèŒè€éçèšå®ïŒä»¥åèšæ¯/å·¥äœäœå管çåšïŒåŠ RabbitMQ æ RedisïŒïŒäœå®åå
èš±äœ åšå€åè¡çšïŒçè³å€å°äŒºæåšäžå·è¡èæ¯ä»»åã
diff --git a/docs/zh-hant/docs/tutorial/bigger-applications.md b/docs/zh-hant/docs/tutorial/bigger-applications.md
index d8b8c9bff8..a37c16c39e 100644
--- a/docs/zh-hant/docs/tutorial/bigger-applications.md
+++ b/docs/zh-hant/docs/tutorial/bigger-applications.md
@@ -123,7 +123,7 @@ from app.routers import items
çºäºç°¡åç¯äŸïŒæå䜿çšäºäžåèæ§çæšé ã
-äœåšç寊æ
æ³äžïŒäœ¿çšå
§å»ºç[å®å
šå·¥å
·](security/index.md){.internal-link target=_blank}æææŽå¥œçææã
+äœåšç寊æ
æ³äžïŒäœ¿çšå
§å»ºç [å®å
šå·¥å
·](security/index.md) æææŽå¥œçææã
///
@@ -169,7 +169,7 @@ async def read_item(item_id: str):
/// tip | æç€º
-è«æ³šæïŒå°±ååš[è·¯åŸæäœè£é£ŸåšäžççžäŸæ§](dependencies/dependencies-in-path-operation-decorators.md){.internal-link target=_blank}äžæš£ïŒäžææä»»äœåŒå³éçµŠäœ çè·¯åŸæäœåœåŒïŒpath operation functionïŒã
+è«æ³šæïŒå°±ååš[è·¯åŸæäœè£é£ŸåšäžççžäŸæ§](dependencies/dependencies-in-path-operation-decorators.md)äžæš£ïŒäžææä»»äœåŒå³éçµŠäœ çè·¯åŸæäœåœåŒïŒpath operation functionïŒã
///
@@ -185,8 +185,8 @@ async def read_item(item_id: str):
* å®åéœæå
å«é å
å®çŸ©ç `responses`ã
* éäºè·¯åŸæäœéœæåšå·è¡åè©äŒ° / å·è¡å
¶ `dependencies` æž
å®ã
* åŠæäœ ä¹åšç¹å®çè·¯åŸæäœäžå®£åäºçžäŸæ§ïŒéäºçžäŸæ§ä¹æè¢«å·è¡ã
- * Router ççžäŸæ§æå
å·è¡ïŒç¶åŸæ¯[è£é£Ÿåšäžç `dependencies`](dependencies/dependencies-in-path-operation-decorators.md){.internal-link target=_blank}ïŒæåŸæ¯äžè¬åæžçžäŸæ§ã
- * äœ ä¹å¯ä»¥å å
¥åž¶æ `scopes` ç [`Security` çžäŸæ§](../advanced/security/oauth2-scopes.md){.internal-link target=_blank}ã
+ * Router ççžäŸæ§æå
å·è¡ïŒç¶åŸæ¯[è£é£Ÿåšäžç `dependencies`](dependencies/dependencies-in-path-operation-decorators.md)ïŒæåŸæ¯äžè¬åæžçžäŸæ§ã
+ * äœ ä¹å¯ä»¥å å
¥åž¶æ `scopes` ç [`Security` çžäŸæ§](../advanced/security/oauth2-scopes.md)ã
/// tip | æç€º
@@ -303,7 +303,7 @@ from ...dependencies import get_token_header
ç
§åžžå¯å
¥äžŠå»ºç« `FastAPI` é¡å¥ã
-æåçè³å¯ä»¥å®£å[å
šåçžäŸæ§](dependencies/global-dependencies.md){.internal-link target=_blank}ïŒå®åæèå `APIRouter` ççžäŸæ§å䜵ïŒ
+æåçè³å¯ä»¥å®£å[å
šåçžäŸæ§](dependencies/global-dependencies.md)ïŒå®åæèå `APIRouter` ççžäŸæ§å䜵ïŒ
{* ../../docs_src/bigger_applications/app_an_py310/main.py hl[1,3,7] title["app/main.py"] *}
@@ -353,7 +353,7 @@ from .routers import items, users
from app.routers import items, users
```
-æ³äºè§£æŽå€éæŒ Python å¥ä»¶èæš¡çµïŒè«é±è®
宿¹çæš¡çµèªªææä»¶ã
+æ³äºè§£æŽå€éæŒ Python å¥ä»¶èæš¡çµïŒè«é±è®[宿¹çæš¡çµèªªææä»¶](https://docs.python.org/3/tutorial/modules.html)ã
///
@@ -465,6 +465,37 @@ from .routers.users import router
///
+## åš `pyproject.toml` èšå® `entrypoint` { #configure-the-entrypoint-in-pyproject-toml }
+
+å çºäœ ç FastAPI `app` ç©ä»¶äœåš `app/main.py`ïŒäœ å¯ä»¥åš `pyproject.toml` æªæ¡äžé暣èšå® `entrypoint`ïŒ
+
+```toml
+[tool.fastapi]
+entrypoint = "app.main:app"
+```
+
+éçåæŒéæš£å¯å
¥ïŒ
+
+```python
+from app.main import app
+```
+
+åŠæ€äžäŸ `fastapi` æä»€å°±æç¥éå»åªè£¡æŸå°äœ ç appã
+
+/// Note | 泚æ
+
+äœ ä¹å¯ä»¥æè·¯åŸçŽæ¥å³çµŠæä»€ïŒäŸåŠïŒ
+
+```console
+$ fastapi dev app/main.py
+```
+
+äœäœ æ¯æ¬¡åŒå« `fastapi` æä»€æéœåŸèšåŸå³å
¥æ£ç¢ºçè·¯åŸã
+
+æ€å€ïŒå
¶ä»å·¥å
·å¯èœæŸäžå°å®ïŒäŸåŠ [VS Code æŽå
å¥ä»¶](../editor-support.md) æ [FastAPI Cloud](https://fastapicloud.com)ïŒå æ€å»ºè°åš `pyproject.toml` äžäœ¿çš `entrypoint`ã
+
+///
+
## 檢æ¥èªåç¢çç API æä»¶ { #check-the-automatic-api-docs }
çŸåšïŒå·è¡äœ çæçšïŒ
@@ -472,14 +503,14 @@ from .routers.users import router
```console
-$ fastapi dev app/main.py
+$ fastapi dev
INFO: Uvicorn running on http://127.0.0.1:8000 (Press CTRL+C to quit)
```
-ç¶åŸéåäœæŒ
http://127.0.0.1:8000/docs çæä»¶ã
+ç¶åŸéåäœæŒ [http://127.0.0.1:8000/docs](http://127.0.0.1:8000/docs) çæä»¶ã
äœ æçå°èªåç¢çç API æä»¶ïŒå
å«äŸèªææåæš¡çµçè·¯åŸïŒäœ¿çšæ£ç¢ºçè·¯åŸïŒèåç¶ŽïŒèæ£ç¢ºçæšç±€ïŒ
diff --git a/docs/zh-hant/docs/tutorial/body-nested-models.md b/docs/zh-hant/docs/tutorial/body-nested-models.md
index df4aff6972..f7b8627b4b 100644
--- a/docs/zh-hant/docs/tutorial/body-nested-models.md
+++ b/docs/zh-hant/docs/tutorial/body-nested-models.md
@@ -95,7 +95,7 @@ my_list: list[str]
é€äº `str`ã`int`ã`float` çäžè¬çå®äžåå¥å€ïŒäœ ä¹å¯ä»¥äœ¿çšç¹Œæ¿èª `str` çæŽè€éå®äžåå¥ã
-è¥èŠæ¥çææå¯çšéžé
ïŒè«åé±
Pydantic çåå¥çžœèŠœãäœ æåšäžäžç« çå°äžäºç¯äŸã
+è¥èŠæ¥çææå¯çšéžé
ïŒè«åé± [Pydantic çåå¥çžœèŠœ](https://docs.pydantic.dev/latest/concepts/types/)ãäœ æåšäžäžç« çå°äžäºç¯äŸã
äŸåŠïŒåš `Image` æš¡åäžæäžå `url` æ¬äœïŒæåå¯ä»¥å°å
¶å®£åçº Pydantic ç `HttpUrl`ïŒèäžæ¯ `str`ïŒ
diff --git a/docs/zh-hant/docs/tutorial/body-updates.md b/docs/zh-hant/docs/tutorial/body-updates.md
index a309e3522c..0d48e28424 100644
--- a/docs/zh-hant/docs/tutorial/body-updates.md
+++ b/docs/zh-hant/docs/tutorial/body-updates.md
@@ -2,7 +2,7 @@
## äœ¿çš `PUT` åä»£åŒæŽæ° { #update-replacing-with-put }
-èŠæŽæ°äžåé
ç®ïŒäœ å¯ä»¥äœ¿çš
HTTP `PUT` æäœã
+èŠæŽæ°äžåé
ç®ïŒäœ å¯ä»¥äœ¿çš [HTTP `PUT`](https://developer.mozilla.org/en-US/docs/Web/HTTP/Methods/PUT) æäœã
äœ å¯ä»¥äœ¿çš `jsonable_encoder` å°èŒžå
¥è³æèœæçºå¯å²åçº JSON çè³æïŒäŸåŠçšæŒ NoSQL è³æåº«ïŒãäŸåŠæ `datetime` èœæ `str`ã
@@ -28,7 +28,7 @@
## äœ¿çš `PATCH` é²è¡éšåæŽæ° { #partial-updates-with-patch }
-äœ ä¹å¯ä»¥äœ¿çš
HTTP `PATCH` æäœäŸé²è¡*éšå*æŽæ°ã
+äœ ä¹å¯ä»¥äœ¿çš [HTTP `PATCH`](https://developer.mozilla.org/en-US/docs/Web/HTTP/Methods/PATCH) æäœäŸé²è¡*éšå*æŽæ°ã
éè¡šç€ºäœ åªéå³éæ³èп޿°çè³æïŒå
¶é€ä¿æäžè®ã
@@ -95,6 +95,6 @@
å æ€ïŒåŠæäœ åžææ¥æ¶å¯ä»¥çç¥ææå±¬æ§çéšåæŽæ°ïŒäœ éèŠäžåææå±¬æ§ççºå¯éžïŒå
·é èšåŒæçº `None`ïŒçæš¡åã
-çºäºååçšæŒæŽæ°ïŒå
šéšå¯éžïŒèçšæŒå»ºç«ïŒæ¬äœçºå¿
å¡«ïŒçæš¡åïŒäœ å¯ä»¥åè [é¡å€æš¡å](extra-models.md){.internal-link target=_blank} äžçåæ³ã
+çºäºååçšæŒæŽæ°ïŒå
šéšå¯éžïŒèçšæŒå»ºç«ïŒæ¬äœçºå¿
å¡«ïŒçæš¡åïŒäœ å¯ä»¥åè [é¡å€æš¡å](extra-models.md) äžçåæ³ã
///
diff --git a/docs/zh-hant/docs/tutorial/body.md b/docs/zh-hant/docs/tutorial/body.md
index bddcbbf434..08246f513b 100644
--- a/docs/zh-hant/docs/tutorial/body.md
+++ b/docs/zh-hant/docs/tutorial/body.md
@@ -6,7 +6,7 @@
äœ ç API 幟ä¹çžœæ¯éèŠå³å**åæ**æ¬æãäœçšæ¶ç«¯äžäžå®æ¯æ¬¡éœèŠéåº**è«æ±æ¬æ**ïŒææåªæè«æ±æåè·¯åŸïŒå¯èœåž¶äžäºæ¥è©¢åæžïŒäœäžæå³éæ¬æã
-èŠå®£å**è«æ±**æ¬æïŒäœ æäœ¿çš
Pydantic æš¡åïŒäº«åå
¶å®æŽçåèœèåªé»ã
+èŠå®£å**è«æ±**æ¬æïŒäœ æäœ¿çš [Pydantic](https://docs.pydantic.dev/) æš¡åïŒäº«åå
¶å®æŽçåèœèåªé»ã
/// info
@@ -72,7 +72,7 @@
- è¥è³æç¡æïŒæå峿ž
æ¥ææçé¯èª€ïŒæåºåªè£¡ãåªçè³æäžæ£ç¢ºã
- ææ¥æ¶å°çè³ææŸåšåæž `item` äžæäŸçµŠäœ ã
- ç±æŒäœ åšåœåŒäžå°å
¶å®£åçº `Item` åå¥ïŒäœ 乿ç²åŸå®æŽçç·šèŒ¯åšæ¯æŽïŒèªå宿çïŒä»¥åææå±¬æ§èå
¶åå¥ã
-- çºäœ çæš¡åç¢ç
JSON Schema å®çŸ©ïŒåŠæéèŠïŒäœ ä¹å¯ä»¥åšå°æ¡äžçå
¶ä»å°æ¹äœ¿çšã
+- çºäœ çæš¡åç¢ç [JSON Schema](https://json-schema.org) å®çŸ©ïŒåŠæéèŠïŒäœ ä¹å¯ä»¥åšå°æ¡äžçå
¶ä»å°æ¹äœ¿çšã
- éäº schema ææçºç¢çç OpenAPI schema çäžéšåïŒäžŠç±èªåæä»¶
UIs 䜿çšã
## èªåæä»¶ { #automatic-docs }
@@ -101,15 +101,15 @@
çè³çºäºæ¯æŽéé»ïŒPydantic æ¬èº«ä¹åäºäºä¿®æ¹ã
-åé¢çè¢å¹æªåæ¯äœ¿çš
Visual Studio Code æçã
+åé¢çè¢å¹æªåæ¯äœ¿çš [Visual Studio Code](https://code.visualstudio.com) æçã
-äœäœ åš
PyCharm è倧倿žå
¶å® Python 線茯åšäžä¹æåŸå°çžåçç·šèŒ¯åšæ¯æŽïŒ
+äœäœ åš [PyCharm](https://www.jetbrains.com/pycharm/) è倧倿žå
¶å® Python 線茯åšäžä¹æåŸå°çžåçç·šèŒ¯åšæ¯æŽïŒ

/// tip
-åŠæäœ äœ¿çš
PyCharm äœçºç·šèŒ¯åšïŒå¯ä»¥å®è£
Pydantic PyCharm Pluginã
+åŠæäœ äœ¿çš [PyCharm](https://www.jetbrains.com/pycharm/) äœçºç·šèŒ¯åšïŒå¯ä»¥å®è£ [Pydantic PyCharm Plugin](https://github.com/koxudaxi/pydantic-pycharm-plugin/)ã
å®èœå¢åŒ· Pydantic æš¡åçç·šèŒ¯åšæ¯æŽïŒå
å«ïŒ
@@ -161,4 +161,4 @@ FastAPI æå çºé èšåŒ `= None` èç¥é `q` çåŒäžæ¯å¿
å¡«ã
## äžäœ¿çš Pydantic { #without-pydantic }
-è¥äœ äžæ³äœ¿çš Pydantic æš¡åïŒä¹å¯ä»¥äœ¿çš **Body** åæžãè«åè[Body - å€ååæžïŒæ¬æäžçå®äžåŒ](body-multiple-params.md#singular-values-in-body){.internal-link target=_blank}ã
+è¥äœ äžæ³äœ¿çš Pydantic æš¡åïŒä¹å¯ä»¥äœ¿çš **Body** åæžãè«åè[Body - å€ååæžïŒæ¬æäžçå®äžåŒ](body-multiple-params.md#singular-values-in-body)ã
diff --git a/docs/zh-hant/docs/tutorial/cors.md b/docs/zh-hant/docs/tutorial/cors.md
index 5fa497c081..4fcf9f9418 100644
--- a/docs/zh-hant/docs/tutorial/cors.md
+++ b/docs/zh-hant/docs/tutorial/cors.md
@@ -1,6 +1,6 @@
# CORSïŒè·šäŸæºè³æºå
±çšïŒ { #cors-cross-origin-resource-sharing }
-
CORS æãCross-Origin Resource Sharingãæçæ¯ïŒç¶åšç芜åšäžå·è¡çå端以 JavaScript èåŸç«¯éèšïŒèåŸç«¯èåç«¯äœæŒäžåãäŸæºïŒoriginïŒãæçæ
å¢ã
+[CORS æãCross-Origin Resource Sharingã](https://developer.mozilla.org/en-US/docs/Web/HTTP/CORS)æçæ¯ïŒç¶åšç芜åšäžå·è¡çå端以 JavaScript èåŸç«¯éèšïŒèåŸç«¯èåç«¯äœæŒäžåãäŸæºïŒoriginïŒãæçæ
å¢ã
## äŸæºïŒOriginïŒ { #origin }
@@ -55,10 +55,10 @@
* `allow_origins` - å
èš±é²è¡è·šäŸæºè«æ±çäŸæºæž
å®ãäŸåŠ `['https://example.org', 'https://www.example.org']`ãäœ å¯ä»¥äœ¿çš `['*']` äŸå
蚱任äœäŸæºã
* `allow_origin_regex` - å
èš±é²è¡è·šäŸæºè«æ±çäŸæºïŒäœ¿çšæ£èŠè¡šç€ºåŒåäž²æ¯å°ãäŸåŠ `'https://.*\.example\.org'`ã
* `allow_methods` - å
èš±è·šäŸæºè«æ±ç HTTP æ¹æ³æž
å®ãé èšçº `['GET']`ãäœ å¯ä»¥äœ¿çš `['*']` äŸå
èš±æææšæºæ¹æ³ã
-* `allow_headers` - å
èš±è·šäŸæºè«æ±ææ¯æŽç HTTP è«æ±æšé æž
å®ãé èšçº `[]`ãäœ å¯ä»¥äœ¿çš `['*']` äŸå
èš±æææšé ãå°æŒ
ç°¡å® CORS è«æ±ïŒ`Accept`ã`Accept-Language`ã`Content-Language` è `Content-Type` æšé äžåŸè¢«å
èš±ã
+* `allow_headers` - å
èš±è·šäŸæºè«æ±ææ¯æŽç HTTP è«æ±æšé æž
å®ãé èšçº `[]`ãäœ å¯ä»¥äœ¿çš `['*']` äŸå
èš±æææšé ãå°æŒ[ç°¡å® CORS è«æ±](https://developer.mozilla.org/en-US/docs/Web/HTTP/CORS#simple_requests)ïŒ`Accept`ã`Accept-Language`ã`Content-Language` è `Content-Type` æšé äžåŸè¢«å
èš±ã
* `allow_credentials` - æç€ºæ¯åŠæ¯æŽè·šäŸæºè«æ±ç Cookieãé èšçº `False`ã
- ç¶ `allow_credentials` èšçº `True` æïŒ`allow_origins`ã`allow_methods` è `allow_headers` éœäžèœèšçº `['*']`ãäžè¿°åé
å¿
é
æç¢ºæå®ã
+ ç¶ `allow_credentials` èšçº `True` æïŒ`allow_origins`ã`allow_methods` è `allow_headers` éœäžèœèšçº `['*']`ãäžè¿°åé
å¿
é [æç¢ºæå®](https://developer.mozilla.org/en-US/docs/Web/HTTP/CORS#credentialed_requests_and_wildcards)ã
* `expose_headers` - æç€ºåªäºåææšé æè©²è®ç芜åšå¯ååãé èšçº `[]`ã
* `max_age` - èšå®ç芜åšå¿«å CORS åæçæé·ç§æžãé èšçº `600`ã
@@ -77,7 +77,7 @@
## æŽå€è³èš { #more-info }
-æ³é²äžæ¥äºè§£
CORSïŒè«åè
Mozilla ç CORS æä»¶ã
+æ³é²äžæ¥äºè§£
CORSïŒè«åè [Mozilla ç CORS æä»¶](https://developer.mozilla.org/en-US/docs/Web/HTTP/CORS)ã
/// note | æè¡çްç¯
diff --git a/docs/zh-hant/docs/tutorial/debugging.md b/docs/zh-hant/docs/tutorial/debugging.md
index cb82ee417b..1230ed6ccd 100644
--- a/docs/zh-hant/docs/tutorial/debugging.md
+++ b/docs/zh-hant/docs/tutorial/debugging.md
@@ -59,7 +59,7 @@ $ python myapp.py
```Python
from myapp import app
-# Some more code
+# å
¶ä»çšåŒç¢Œ
```
åšé£çš®æ
æ³äžïŒ`myapp.py` äžèªå建ç«çè®æž `__name__` å°±äžææ¯ `"__main__"`ã
@@ -74,7 +74,7 @@ from myapp import app
/// info | 說æ
-æ³äºè§£æŽå€ïŒåè
Python 宿¹æä»¶ã
+æ³äºè§£æŽå€ïŒåè [Python 宿¹æä»¶](https://docs.python.org/3/library/__main__.html)ã
///
diff --git a/docs/zh-hant/docs/tutorial/dependencies/dependencies-in-path-operation-decorators.md b/docs/zh-hant/docs/tutorial/dependencies/dependencies-in-path-operation-decorators.md
index e30c385375..bd57116245 100644
--- a/docs/zh-hant/docs/tutorial/dependencies/dependencies-in-path-operation-decorators.md
+++ b/docs/zh-hant/docs/tutorial/dependencies/dependencies-in-path-operation-decorators.md
@@ -32,7 +32,7 @@
åšéåç¯äŸäžæå䜿çšäºèªèšçïŒèæ§çïŒæšé `X-Key` è `X-Token`ã
-äœåšå¯Šéæ
æ³äžïŒç¶äœ 寊äœå®å
šæ©å¶æïŒäœ¿çšæŽåç [Security utilitiesïŒäžäžç« ïŒ](../security/index.md){.internal-link target=_blank} æç²åŸæŽå€å¥œèã
+äœåšå¯Šéæ
æ³äžïŒç¶äœ 寊äœå®å
šæ©å¶æïŒäœ¿çšæŽåç [Security utilitiesïŒäžäžç« ïŒ](../security/index.md) æç²åŸæŽå€å¥œèã
///
@@ -62,7 +62,7 @@
## äžçµè·¯åŸæäœçäŸè³Ž { #dependencies-for-a-group-of-path-operations }
-ä¹åŸåšé±è®åŠäœçµç¹èŒå€§çæçšçšåŒïŒ[èŒå€§åæçšçšåŒââå€åæªæ¡](../../tutorial/bigger-applications.md){.internal-link target=_blank}ïŒæïŒäœ æåžå°åŠäœçºäžçµè·¯åŸæäœå®£åäžåå
±åç `dependencies` åæžã
+ä¹åŸåšé±è®åŠäœçµç¹èŒå€§çæçšçšåŒïŒ[èŒå€§åæçšçšåŒââå€åæªæ¡](../../tutorial/bigger-applications.md)ïŒæïŒäœ æåžå°åŠäœçºäžçµè·¯åŸæäœå®£åäžåå
±åç `dependencies` åæžã
## å
šåäŸè³Ž { #global-dependencies }
diff --git a/docs/zh-hant/docs/tutorial/dependencies/dependencies-with-yield.md b/docs/zh-hant/docs/tutorial/dependencies/dependencies-with-yield.md
index 2339c6ef30..8174dca40b 100644
--- a/docs/zh-hant/docs/tutorial/dependencies/dependencies-with-yield.md
+++ b/docs/zh-hant/docs/tutorial/dependencies/dependencies-with-yield.md
@@ -14,8 +14,8 @@ FastAPI æ¯æŽåšå®æåŸå·è¡äžäº
`@contextlib.contextmanager` æ
-* `@contextlib.asynccontextmanager`
+* [`@contextlib.contextmanager`](https://docs.python.org/3/library/contextlib.html#contextlib.contextmanager) æ
+* [`@contextlib.asynccontextmanager`](https://docs.python.org/3/library/contextlib.html#contextlib.asynccontextmanager)
éœå¯ä»¥äœçº **FastAPI** ççžäŸã
@@ -87,7 +87,7 @@ FastAPI æ¯æŽåšå®æåŸå·è¡äžäºContext Managersã
+éèœéäœïŒå€è§äº Python ç [Context Managers](https://docs.python.org/3/library/contextlib.html)ã
**FastAPI** åšå
§éšäœ¿çšå®åäŸéæéé»ã
@@ -111,7 +111,7 @@ FastAPI æ¯æŽåšå®æåŸå·è¡äžäºäœ å¯ä»¥çš `with` äŸè®åæªæ¡ïŒ
+äŸåŠïŒ[äœ å¯ä»¥çš `with` äŸè®åæªæ¡](https://docs.python.org/3/tutorial/inputoutput.html#reading-and-writing-files)ïŒ
```Python
with open("./somefile.txt") as f:
@@ -264,7 +264,7 @@ with open("./somefile.txt") as f:
///
-åš Python äžïŒäœ å¯ä»¥éé建ç«äžåææ `__enter__()` è `__exit__()` å
©åæ¹æ³çé¡å¥äŸå»ºç«æ
å¢ç®¡çåšã
+åš Python äžïŒäœ å¯ä»¥éé[建ç«äžåææ `__enter__()` è `__exit__()` å
©åæ¹æ³çé¡å¥](https://docs.python.org/3/reference/datamodel.html#context-managers)äŸå»ºç«æ
å¢ç®¡çåšã
äœ ä¹å¯ä»¥åš **FastAPI** çå« `yield` çžäŸäžïŒæŒçžäŸåœåŒå
§äœ¿çš `with` æ `async with` é³è¿°åŒäŸäœ¿çšå®åïŒ
@@ -274,8 +274,8 @@ with open("./somefile.txt") as f:
å»ºç«æ
å¢ç®¡çåšçåŠäžçš®æ¹åŒæ¯ïŒ
-* `@contextlib.contextmanager` æ
-* `@contextlib.asynccontextmanager`
+* [`@contextlib.contextmanager`](https://docs.python.org/3/library/contextlib.html#contextlib.contextmanager) æ
+* [`@contextlib.asynccontextmanager`](https://docs.python.org/3/library/contextlib.html#contextlib.asynccontextmanager)
çšå®åè£é£Ÿäžååªå
å«å®äž `yield` çåœåŒã
diff --git a/docs/zh-hant/docs/tutorial/dependencies/global-dependencies.md b/docs/zh-hant/docs/tutorial/dependencies/global-dependencies.md
index 3aac1a228b..e73cf935e2 100644
--- a/docs/zh-hant/docs/tutorial/dependencies/global-dependencies.md
+++ b/docs/zh-hant/docs/tutorial/dependencies/global-dependencies.md
@@ -2,14 +2,14 @@
åšæäºé¡åçæçšçšåŒäžïŒäœ å¯èœæ³çºæŽåæçšçšåŒæ°å¢äŸè³Žã
-é¡äŒŒæŒäœ å¯ä»¥åš[è·¯åŸæäœïŒpath operationïŒçè£é£Ÿåšäžæ°å¢ `dependencies`](dependencies-in-path-operation-decorators.md){.internal-link target=_blank} çæ¹åŒïŒäœ ä¹å¯ä»¥æå®åå å° `FastAPI` æçšçšåŒäžã
+é¡äŒŒæŒäœ å¯ä»¥åš[è·¯åŸæäœïŒpath operationïŒçè£é£Ÿåšäžæ°å¢ `dependencies`](dependencies-in-path-operation-decorators.md) çæ¹åŒïŒäœ ä¹å¯ä»¥æå®åå å° `FastAPI` æçšçšåŒäžã
åšéçš®æ
æ³äžïŒå®åæå¥çšå°æçšçšåŒäžçææè·¯åŸæäœïŒ
{* ../../docs_src/dependencies/tutorial012_an_py310.py hl[17] *}
-èäžïŒåš[å° `dependencies` æ°å¢å°è·¯åŸæäœè£é£Ÿåš](dependencies-in-path-operation-decorators.md){.internal-link target=_blank} é£äžç¯äžçæææŠå¿µäŸç¶é©çšïŒåªæ¯é裡æ¯å¥çšå°æŽåæçšäžçææè·¯åŸæäœã
+èäžïŒåš[å° `dependencies` æ°å¢å°è·¯åŸæäœè£é£Ÿåš](dependencies-in-path-operation-decorators.md) é£äžç¯äžçæææŠå¿µäŸç¶é©çšïŒåªæ¯é裡æ¯å¥çšå°æŽåæçšäžçææè·¯åŸæäœã
## è·¯åŸæäœçŸ€çµçäŸè³Ž { #dependencies-for-groups-of-path-operations }
-ä¹åŸïŒåšé±è®åŠäœçµç¹æŽå€§çæçšçšåŒïŒ[æŽå€§çæçšçšåŒ - å€åæªæ¡](../../tutorial/bigger-applications.md){.internal-link target=_blank}ïŒæïŒå¯èœææå€åæªæ¡ïŒäœ å°æåžå°åŠäœçºäžçµè·¯åŸæäœå®£åå®äžç `dependencies` åæžã
+ä¹åŸïŒåšé±è®åŠäœçµç¹æŽå€§çæçšçšåŒïŒ[æŽå€§çæçšçšåŒ - å€åæªæ¡](../../tutorial/bigger-applications.md)ïŒæïŒå¯èœææå€åæªæ¡ïŒäœ å°æåžå°åŠäœçºäžçµè·¯åŸæäœå®£åå®äžç `dependencies` åæžã
diff --git a/docs/zh-hant/docs/tutorial/dependencies/index.md b/docs/zh-hant/docs/tutorial/dependencies/index.md
index 39c05ab056..86aea50f0a 100644
--- a/docs/zh-hant/docs/tutorial/dependencies/index.md
+++ b/docs/zh-hant/docs/tutorial/dependencies/index.md
@@ -55,7 +55,7 @@ FastAPI åš 0.95.0 çæ°å¢äºå° `Annotated` çæ¯æŽïŒäžŠéå§å»ºè°äœ¿çš
åŠæäœ äœ¿çšèŒèççæ¬ïŒåè©Šäœ¿çš `Annotated` ææåºçŸé¯èª€ã
-åšäœ¿çš `Annotated` ä¹åïŒè«å
[åçŽ FastAPI çæ¬](../../deployment/versions.md#upgrading-the-fastapi-versions){.internal-link target=_blank}å°è³å° 0.95.1ã
+åšäœ¿çš `Annotated` ä¹åïŒè«å
[åçŽ FastAPI çæ¬](../../deployment/versions.md#upgrading-the-fastapi-versions)å°è³å° 0.95.1ã
///
@@ -150,7 +150,7 @@ commons: Annotated[dict, Depends(common_parameters)]
/// note | 泚æ
-åŠæäœ äžçæïŒè«åèæä»¶äžç [Async: "In a hurry?"](../../async.md#in-a-hurry){.internal-link target=_blank} äžç¯ïŒçè§£ `async` è `await`ã
+åŠæäœ äžçæïŒè«åèæä»¶äžç [Async: "In a hurry?"](../../async.md#in-a-hurry) äžç¯ïŒçè§£ `async` è `await`ã
///
diff --git a/docs/zh-hant/docs/tutorial/encoder.md b/docs/zh-hant/docs/tutorial/encoder.md
index 03b7db6394..9b541adce6 100644
--- a/docs/zh-hant/docs/tutorial/encoder.md
+++ b/docs/zh-hant/docs/tutorial/encoder.md
@@ -12,7 +12,7 @@
äŸåŠïŒå®äžæ¥å `datetime` ç©ä»¶ïŒå çºé£è JSON äžçžå®¹ã
-å æ€ïŒå¿
é å° `datetime` ç©ä»¶èœçºäžå以 ISO æ ŒåŒ è¡šç€ºè³æç `str`ã
+å æ€ïŒå¿
é å° `datetime` ç©ä»¶èœçºäžå以 [ISO æ ŒåŒ](https://en.wikipedia.org/wiki/ISO_8601) è¡šç€ºè³æç `str`ã
åæš£å°ïŒéåè³æåº«äžææ¥å Pydantic æš¡åïŒåž¶æå±¬æ§çç©ä»¶ïŒïŒåªæ¥å `dict`ã
@@ -24,7 +24,7 @@
åšæ€ç¯äŸäžïŒå®ææ Pydantic æš¡åèœæ `dict`ïŒäžŠå° `datetime` èœæ `str`ã
-åŒå«åŸççµæå¯ä»¥çš Python æšæºç `json.dumps()` é²è¡ç·šç¢Œã
+åŒå«åŸççµæå¯ä»¥çš Python æšæºç [`json.dumps()`](https://docs.python.org/3/library/json.html#json.dumps) é²è¡ç·šç¢Œã
å®äžæåå³äžåå
å« JSON å
§å®¹ç倧å `str`ïŒåäž²ïŒã宿åå³ Python æšæºçè³æçµæ§ïŒäŸåŠ `dict`ïŒïŒå
¶äžçåŒèååŒéœè JSON çžå®¹ã
diff --git a/docs/zh-hant/docs/tutorial/extra-data-types.md b/docs/zh-hant/docs/tutorial/extra-data-types.md
index f516d965a4..a5573379d8 100644
--- a/docs/zh-hant/docs/tutorial/extra-data-types.md
+++ b/docs/zh-hant/docs/tutorial/extra-data-types.md
@@ -36,7 +36,7 @@
* `datetime.timedelta`ïŒ
* Python ç `datetime.timedelta`ã
* åšè«æ±èåæäžæä»¥çžœç§æžç `float` 衚瀺ã
- * Pydantic ä¹å
èš±çšãISO 8601 time diff encodingãäŸè¡šç€ºïŒè©³æ
èŠæä»¶ã
+ * Pydantic ä¹å
èš±çšãISO 8601 time diff encodingãäŸè¡šç€ºïŒ[詳æ
èŠæä»¶](https://docs.pydantic.dev/latest/concepts/serialization/#custom-serializers)ã
* `frozenset`ïŒ
* åšè«æ±èåæäžè `set` çžåèçïŒ
* åšè«æ±äžïŒæè®åäžå listïŒå»é€éè€äžŠèœçº `set`ã
@@ -49,7 +49,7 @@
* `Decimal`ïŒ
* æšæºç Python `Decimal`ã
* åšè«æ±èåæäžïŒè `float` çèçæ¹åŒçžåã
-* äœ å¯ä»¥å𿀿¥é±ææå¯çšç Pydantic è³æåå¥ïŒPydantic è³æåå¥ã
+* äœ å¯ä»¥å𿀿¥é±ææå¯çšç Pydantic è³æåå¥ïŒ[Pydantic è³æåå¥](https://docs.pydantic.dev/latest/usage/types/types/)ã
## ç¯äŸ { #example }
diff --git a/docs/zh-hant/docs/tutorial/extra-models.md b/docs/zh-hant/docs/tutorial/extra-models.md
index 8aae62f8e1..f5509f531f 100644
--- a/docs/zh-hant/docs/tutorial/extra-models.md
+++ b/docs/zh-hant/docs/tutorial/extra-models.md
@@ -12,7 +12,7 @@
åå¿å²å䜿çšè
çææå¯ç¢Œãåå¿
åªå²åå¯äŸé©èçãå®å
šéæ¹ãã
-è¥äœ éäžæž
æ¥ïŒçšåŸæåš[å®å
šæ§ç« ç¯](security/simple-oauth2.md#password-hashing){.internal-link target=_blank}åžå°ä»éºŒæ¯ãå¯ç¢Œéæ¹ãã
+è¥äœ éäžæž
æ¥ïŒçšåŸæåš[å®å
šæ§ç« ç¯](security/simple-oauth2.md#password-hashing)åžå°ä»éºŒæ¯ãå¯ç¢Œéæ¹ãã
///
@@ -162,11 +162,11 @@ UserInDB(
åš OpenAPI äžæä»¥ `anyOf` å®çŸ©ã
-èŠéæéé»ïŒäœ¿çšæšæºç Python åå¥æç€º `typing.Union`ïŒ
+èŠéæéé»ïŒäœ¿çšæšæºç Python åå¥æç€º [`typing.Union`](https://docs.python.org/3/library/typing.html#typing.Union)ïŒ
/// note
-åšå®çŸ© `Union` æïŒè«å
æŸçœ®ãæŽå
·é«ãçåå¥ïŒåæŸãèŒäžå
·é«ãçåå¥ã以äžç¯äŸäžïŒèŒå
·é«ç `PlaneItem` çœ®æŒ `CarItem` ä¹åïŒ`Union[PlaneItem, CarItem]`ã
+åšå®çŸ© [`Union`](https://docs.pydantic.dev/latest/concepts/types/#unions) æïŒè«å
æŸçœ®ãæŽå
·é«ãçåå¥ïŒåæŸãèŒäžå
·é«ãçåå¥ã以äžç¯äŸäžïŒèŒå
·é«ç `PlaneItem` çœ®æŒ `CarItem` ä¹åïŒ`Union[PlaneItem, CarItem]`ã
///
diff --git a/docs/zh-hant/docs/tutorial/first-steps.md b/docs/zh-hant/docs/tutorial/first-steps.md
index 3aa2d39ae1..d6b1a72e32 100644
--- a/docs/zh-hant/docs/tutorial/first-steps.md
+++ b/docs/zh-hant/docs/tutorial/first-steps.md
@@ -11,7 +11,7 @@
```console
-$
fastapi dev
main.py
+$
fastapi dev
FastAPI Starting development server ð
@@ -58,7 +58,7 @@ INFO: Uvicorn running on http://127.0.0.1:8000 (Press CTRL+C to quit)
### æ¥çå® { #check-it }
-åšç芜åšäžæé
http://127.0.0.1:8000.
+åšç芜åšäžæé [http://127.0.0.1:8000](http://127.0.0.1:8000)ã
äœ å°çå°åŠäžç JSON åæïŒ
@@ -68,17 +68,17 @@ INFO: Uvicorn running on http://127.0.0.1:8000 (Press CTRL+C to quit)
### äºååŒ API æä»¶ { #interactive-api-docs }
-çŸåšïŒååŸ
http://127.0.0.1:8000/docs.
+çŸåšïŒååŸ [http://127.0.0.1:8000/docs](http://127.0.0.1:8000/docs)ã
-äœ å°çå°èªåçäºååŒ API æä»¶ïŒç±
Swagger UI æäŸïŒïŒ
+äœ å°çå°èªåçäºååŒ API æä»¶ïŒç± [Swagger UI](https://github.com/swagger-api/swagger-ui) æäŸïŒïŒ

### æ¿ä»£ API æä»¶ { #alternative-api-docs }
-çŸåšïŒååŸ
http://127.0.0.1:8000/redoc.
+çŸåšïŒååŸ [http://127.0.0.1:8000/redoc](http://127.0.0.1:8000/redoc)ã
-äœ å°çå°åŠäžçš®èªåæä»¶ïŒç±
ReDoc æäŸïŒïŒ
+äœ å°çå°åŠäžçš®èªåæä»¶ïŒç± [ReDoc](https://github.com/Rebilly/ReDoc) æäŸïŒïŒ

@@ -92,7 +92,7 @@ INFO: Uvicorn running on http://127.0.0.1:8000 (Press CTRL+C to quit)
#### API ãschemaã { #api-schema }
-åšéçš®æ
æ³äžïŒ
OpenAPI æ¯äžåèŠç¯ïŒå®èŠå®äºåŠäœå®çŸ© API ç schemaã
+åšéçš®æ
æ³äžïŒ[OpenAPI](https://github.com/OAI/OpenAPI-Specification) æ¯äžåèŠç¯ïŒå®èŠå®äºåŠäœå®çŸ© API ç schemaã
éå schema å®çŸ©å
å«äºäœ ç API è·¯åŸãå¯èœæ¥æ¶çåæžçå
§å®¹ã
@@ -110,7 +110,7 @@ OpenAPI çºäœ ç API å®çŸ©äº API ç schemaãè該 schema æå
å«äœ ç A
åŠæäœ å¥œå¥åå§ç OpenAPI schema é·ä»éºŒæš£åïŒFastAPI æèªåçæäžåå
嫿æ API æè¿°ç JSONïŒschemaïŒã
-äœ å¯ä»¥çŽæ¥åš
http://127.0.0.1:8000/openapi.json æ¥çå®ã
+äœ å¯ä»¥çŽæ¥åš [http://127.0.0.1:8000/openapi.json](http://127.0.0.1:8000/openapi.json) æ¥çå®ã
å®æé¡¯ç€ºäžå JSONïŒé¡äŒŒæŒïŒ
@@ -143,9 +143,58 @@ OpenAPI schema é©
åäºå
©åäºååŒæä»¶ç³»çµ±ã
äœ ä¹å¯ä»¥çšå®èªåçæçšåŒç¢ŒïŒè®çšæ¶ç«¯èäœ ç API éèšãäŸåŠåç«¯ãææ©æç©è¯ç¶²ïŒIoTïŒæçšçšåŒã
+### åš `pyproject.toml` èšå®æçšç `entrypoint` { #configure-the-app-entrypoint-in-pyproject-toml }
+
+äœ å¯ä»¥åš `pyproject.toml` äžèšå®äœ çæçšäœçœ®ïŒäŸåŠïŒ
+
+```toml
+[tool.fastapi]
+entrypoint = "main:app"
+```
+
+éå `entrypoint` æå蚎 `fastapi` æä»€æè©²çšäžé¢çæ¹åŒå¯å
¥ appïŒ
+
+```python
+from main import app
+```
+
+åŠæäœ ççšåŒç¢Œçµæ§åæ¯ïŒ
+
+```
+.
+âââ backend
+â  âââ main.py
+â  âââ __init__.py
+```
+
+é£äœ æè©²æ `entrypoint` èšçºïŒ
+
+```toml
+[tool.fastapi]
+entrypoint = "backend.main:app"
+```
+
+éçåæŒïŒ
+
+```python
+from backend.main import app
+```
+
+### æé
è·¯åŸäœ¿çš `fastapi dev` { #fastapi-dev-with-path }
+
+äœ ä¹å¯ä»¥ææªæ¡è·¯åŸå³çµŠ `fastapi dev` æä»€ïŒå®æèªåçæž¬èŠäœ¿çšç FastAPI app ç©ä»¶ïŒ
+
+```console
+$ fastapi dev main.py
+```
+
+äœéæš£æ¯æ¬¡å·è¡ `fastapi` æä»€æéœèŠèšåŸå³å
¥æ£ç¢ºè·¯åŸã
+
+æ€å€ïŒå
¶ä»å·¥å
·å¯èœæŸäžå°å®ïŒäŸåŠ [VS Code æŽå
å¥ä»¶](../editor-support.md) æ [FastAPI Cloud](https://fastapicloud.com)ïŒå æ€å»ºè°åš `pyproject.toml` äžäœ¿çš `entrypoint`ã
+
### éšçœ²äœ çæçšçšåŒïŒå¯éžïŒ { #deploy-your-app-optional }
-äœ å¯ä»¥éžæå°äœ ç FastAPI æçšçšåŒéšçœ²å°
FastAPI CloudïŒåŠæéæ²æïŒå»å å
¥åè£åå®å§ãð
+äœ å¯ä»¥éžæå°äœ ç FastAPI æçšçšåŒéšçœ²å° [FastAPI Cloud](https://fastapicloud.com)ïŒåŠæéæ²æïŒå»å å
¥åè£åå®å§ãð
åŠæäœ å·²ç¶æ **FastAPI Cloud** åž³èïŒæåå·²åŸåè£åå®éè«äœ ðïŒïŒäœ å¯ä»¥çšäžåæä»€éšçœ²äœ çæçšçšåŒã
@@ -191,7 +240,7 @@ Deploying to FastAPI Cloud...
`FastAPI` æ¯äžåçŽæ¥ç¹Œæ¿èª `Starlette` çé¡å¥ã
-äœ åæš£å¯ä»¥éé `FastAPI` äŸäœ¿çš
Starlette ææçåèœã
+äœ åæš£å¯ä»¥éé `FastAPI` äŸäœ¿çš [Starlette](https://www.starlette.dev/) ææçåèœã
///
@@ -336,7 +385,7 @@ Python äžç `@something` èªæ³è¢«çš±çºãè£é£Ÿåšãã
/// note
-åŠæäœ äžç¥éå·®å¥ïŒè«æ¥ç [Async: *"In a hurry?"*](../async.md#in-a-hurry){.internal-link target=_blank}.
+åŠæäœ äžç¥éå·®å¥ïŒè«æ¥ç [Async: *"In a hurry?"*](../async.md#in-a-hurry)ã
///
@@ -352,11 +401,11 @@ Python äžç `@something` èªæ³è¢«çš±çºãè£é£Ÿåšãã
### 第å
æ¥ïŒéšçœ² { #step-6-deploy-it }
-çšäžè¡æä»€å°äœ çæçšçšåŒéšçœ²å° **
FastAPI Cloud**ïŒ`fastapi deploy`ãð
+çšäžè¡æä»€å°äœ çæçšçšåŒéšçœ²å° **[FastAPI Cloud](https://fastapicloud.com)**ïŒ`fastapi deploy`ãð
#### éæŒ FastAPI Cloud { #about-fastapi-cloud }
-**
FastAPI Cloud** ç± **FastAPI** çäœè
èåéæé ã
+**[FastAPI Cloud](https://fastapicloud.com)** ç± **FastAPI** çäœè
èåéæé ã
å®è®äœ 以æå°çææ¬å®æ API ç**建眮**ã**éšçœ²**è**åå**æµçšã
diff --git a/docs/zh-hant/docs/tutorial/handling-errors.md b/docs/zh-hant/docs/tutorial/handling-errors.md
index f3a7573cd5..b1ffd3e038 100644
--- a/docs/zh-hant/docs/tutorial/handling-errors.md
+++ b/docs/zh-hant/docs/tutorial/handling-errors.md
@@ -81,7 +81,7 @@
## å®è£èªèšäŸå€èçåš { #install-custom-exception-handlers }
-äœ å¯ä»¥äœ¿çš
Starlette ççžåäŸå€å·¥å
· äŸå å
¥èªèšäŸå€èçåšã
+äœ å¯ä»¥äœ¿çš [Starlette ççžåäŸå€å·¥å
·](https://www.starlette.dev/exceptions/) äŸå å
¥èªèšäŸå€èçåšã
åèšäœ æäžåèªèšäŸå€ `UnicornException`ïŒäœ ïŒæäœ äœ¿çšçåœåŒåº«ïŒå¯èœæ `raise` å®ã
diff --git a/docs/zh-hant/docs/tutorial/index.md b/docs/zh-hant/docs/tutorial/index.md
index 5e1961fd7b..e191215113 100644
--- a/docs/zh-hant/docs/tutorial/index.md
+++ b/docs/zh-hant/docs/tutorial/index.md
@@ -15,7 +15,7 @@
```console
-$
fastapi dev
main.py
+$
fastapi dev
FastAPI Starting development server ð
@@ -62,7 +62,7 @@ $
fastapi dev
@@ -76,7 +76,7 @@ $ pip install "fastapi[standard]"
/// note | 泚æ
-ç¶äœ äœ¿çš `pip install "fastapi[standard]"` å®è£æïŒæå
å«äžäºé èšçå¯éžæšæºäŸè³Žé
ïŒå
¶äžå
æ¬ `fastapi-cloud-cli`ïŒå®å¯ä»¥è®äœ éšçœ²å° FastAPI Cloudã
+ç¶äœ äœ¿çš `pip install "fastapi[standard]"` å®è£æïŒæå
å«äžäºé èšçå¯éžæšæºäŸè³Žé
ïŒå
¶äžå
æ¬ `fastapi-cloud-cli`ïŒå®å¯ä»¥è®äœ éšçœ²å° [FastAPI Cloud](https://fastapicloud.com)ã
åŠæäœ äžæ³å
å«é£äºå¯éžçäŸè³Žé
ïŒäœ å¯ä»¥æ¹çºå®è£ `pip install fastapi`ã
@@ -84,6 +84,12 @@ $ pip install "fastapi[standard]"
///
+/// tip
+
+FastAPI æäŸäº [VS Code 宿¹æŽå
åèœ](https://marketplace.visualstudio.com/items?itemName=FastAPILabs.fastapi-vscode)ïŒä»¥å CursorïŒïŒå
å«èš±å€åèœïŒäŸåŠè·¯åŸæäœæ¢çŽ¢åšãè·¯åŸæäœæå°ã枬詊äžç CodeLens å°èªïŒåŸæž¬è©Šè·³å°å®çŸ©ïŒã以å FastAPI Cloud çéšçœ²èæ¥èªïŒå
šéšå¯çŽæ¥åšäœ ç線茯åšäžå®æã
+
+///
+
## é²é䜿çšè
æå { #advanced-user-guide }
éæäžå**é²é䜿çšè
æå**äœ å¯ä»¥åšè®å®éå**æåž - 䜿çšè
æå**åŸåé±è®ã
diff --git a/docs/zh-hant/docs/tutorial/metadata.md b/docs/zh-hant/docs/tutorial/metadata.md
index 3243efa89c..720b5d87cb 100644
--- a/docs/zh-hant/docs/tutorial/metadata.md
+++ b/docs/zh-hant/docs/tutorial/metadata.md
@@ -14,7 +14,7 @@
| `version` | `string` | API ççæ¬èãéæ¯äœ èªå·±çæçšçšåŒçæ¬ïŒäžæ¯ OpenAPI ççæ¬ïŒäŸåŠ `2.5.0`ã |
| `terms_of_service` | `str` | æå API æåæ¢æ¬Ÿç URLãè¥æäŸïŒå¿
é æ¯ URLã |
| `contact` | `dict` | å°å€å
¬éç API è¯çµ¡è³èšãå¯å
å«å€åæ¬äœãcontact æ¬äœ
| åæž | åå¥ | 說æ |
|---|
name | str | è¯çµ¡äººïŒçµç¹çèå¥åçš±ã |
url | str | æåè¯çµ¡è³èšç URLãå¿
é æ¯ URL æ ŒåŒã |
email | str | è¯çµ¡äººïŒçµç¹çé»åéµä»¶å°åãå¿
é æ¯é»åéµä»¶æ ŒåŒã |
|
-| `license_info` | `dict` | å°å€å
¬éç API ææ¬è³èšãå¯å
å«å€åæ¬äœãlicense_info æ¬äœ
| åæž | åå¥ | 說æ |
|---|
name | str | å¿
å¡«ïŒè¥æèšå® license_infoïŒãAPI 䜿çšçææ¬åçš±ã |
identifier | str | API ç SPDX ææ¬è¡šç€ºåŒãidentifier æ¬äœè url æ¬äœäºæ¥ãèª OpenAPI 3.1.0ãFastAPI 0.99.0 èµ·å¯çšã |
url | str | API ææ¡çšææ¬ç URLãå¿
é æ¯ URL æ ŒåŒã |
|
+| `license_info` | `dict` | å°å€å
¬éç API ææ¬è³èšãå¯å
å«å€åæ¬äœãlicense_info æ¬äœ
| åæž | åå¥ | 說æ |
|---|
name | str | å¿
å¡«ïŒè¥æèšå® license_infoïŒãAPI 䜿çšçææ¬åçš±ã |
identifier | str | API ç [SPDX](https://spdx.org/licenses/) ææ¬è¡šç€ºåŒãidentifier æ¬äœè url æ¬äœäºæ¥ãèª OpenAPI 3.1.0ãFastAPI 0.99.0 èµ·å¯çšã |
url | str | API ææ¡çšææ¬ç URLãå¿
é æ¯ URL æ ŒåŒã |
|
äœ å¯ä»¥é暣èšå®å®åïŒ
@@ -76,7 +76,7 @@
/// info | è³èš
-åšïŒ»è·¯åŸæäœèšå®ïŒœäžé±è®æŽå€éæŒæšç±€çå
§å®¹ïŒ[Path Operation Configuration](path-operation-configuration.md#tags){.internal-link target=_blank}ã
+åš [Path Operation Configuration](path-operation-configuration.md#tags) äžé±è®æŽå€éæŒæšç±€çå
§å®¹ã
///
diff --git a/docs/zh-hant/docs/tutorial/middleware.md b/docs/zh-hant/docs/tutorial/middleware.md
index ac6f5367d0..42a922d354 100644
--- a/docs/zh-hant/docs/tutorial/middleware.md
+++ b/docs/zh-hant/docs/tutorial/middleware.md
@@ -15,7 +15,7 @@
åŠæäœ æäœ¿çšåž¶æ `yield` ççžäŸæ§ïŒå
¶éæŸé段ççšåŒç¢Œæåšäžä»è»é«ä¹åŸå·è¡ã
-è¥æèæ¯å·¥äœïŒåš[èæ¯å·¥äœ](background-tasks.md){.internal-link target=_blank}äžç¯æä»ç޹ïŒäœ çšåŸæçå°ïŒïŒå®åæåšææäžä»è»é«ä¹åŸå·è¡ã
+è¥æèæ¯å·¥äœïŒåš[èæ¯å·¥äœ](background-tasks.md)äžç¯æä»ç޹ïŒäœ çšåŸæçå°ïŒïŒå®åæåšææäžä»è»é«ä¹åŸå·è¡ã
///
@@ -35,9 +35,9 @@
/// tip
-è«èšåŸïŒèªèšçéæšæºæšé å¯ä»¥äœ¿çš `X-` åç¶Žã
+è«èšåŸïŒèªèšçéæšæºæšé å¯ä»¥[äœ¿çš `X-` åç¶Ž](https://developer.mozilla.org/en-US/docs/Web/HTTP/Headers)ã
-äœåŠæäœ æèªèšæšé äžŠåžæç芜åšç«¯ççšæ¶ç«¯èœçå°å®åïŒäœ éèŠåš CORS èšå®ïŒ[CORSïŒCross-Origin Resource SharingïŒ](cors.md){.internal-link target=_blank}ïŒäžäœ¿çš Starlette ç CORS æä»¶æèšèŒçåæž `expose_headers` å°å®åå å
¥ã
+äœåŠæäœ æèªèšæšé äžŠåžæç芜åšç«¯ççšæ¶ç«¯èœçå°å®åïŒäœ éèŠåš CORS èšå®ïŒ[CORSïŒè·šäŸæºè³æºå
±çšïŒ](cors.md)ïŒäžäœ¿çš [Starlette ç CORS æä»¶](https://www.starlette.dev/middleware/#corsmiddleware)æèšèŒçåæž `expose_headers` å°å®åå å
¥ã
///
@@ -61,7 +61,7 @@
/// tip
-é裡æåäœ¿çš `time.perf_counter()` èäžæ¯ `time.time()`ïŒå çºåšéäºçšäŸäžå®å¯èœæŽç²Ÿç¢ºãð€
+é裡æåäœ¿çš [`time.perf_counter()`](https://docs.python.org/3/library/time.html#time.perf_counter) èäžæ¯ `time.time()`ïŒå çºåšéäºçšäŸäžå®å¯èœæŽç²Ÿç¢ºãð€
///
@@ -90,6 +90,6 @@ app.add_middleware(MiddlewareB)
## å
¶ä»äžä»è»é« { #other-middlewares }
-äœ ä¹åŸå¯ä»¥åš[é²é䜿çšè
æåïŒé²éäžä»è»é«](../advanced/middleware.md){.internal-link target=_blank}é±è®æŽå€éæŒå
¶ä»äžä»è»é«çå
§å®¹ã
+äœ ä¹åŸå¯ä»¥åš[é²é䜿çšè
æåïŒé²éäžä»è»é«](../advanced/middleware.md)é±è®æŽå€éæŒå
¶ä»äžä»è»é«çå
§å®¹ã
äžäžç¯äœ å°æè®å°åŠäœäœ¿çšäžä»è»é«èç CORSã
diff --git a/docs/zh-hant/docs/tutorial/path-operation-configuration.md b/docs/zh-hant/docs/tutorial/path-operation-configuration.md
index 45c101434d..9ca738a98d 100644
--- a/docs/zh-hant/docs/tutorial/path-operation-configuration.md
+++ b/docs/zh-hant/docs/tutorial/path-operation-configuration.md
@@ -58,7 +58,7 @@
ç±æŒæè¿°åžžåžžèŒé·ãè·šè¶å€è¡ïŒäœ å¯ä»¥åšåœåŒç æä»¶åäž²ïŒdocstringïŒ äžå®£åãè·¯åŸæäœãçæè¿°ïŒ**FastAPI** æåŸé£è£¡è®åã
-äœ å¯ä»¥åš docstring äžæžå¯« MarkdownïŒå®æè¢«æ£ç¢ºè§£æäžŠé¡¯ç€ºïŒæèæ
® docstring ççž®æïŒã
+äœ å¯ä»¥åš docstring äžæžå¯« [Markdown](https://en.wikipedia.org/wiki/Markdown)ïŒå®æè¢«æ£ç¢ºè§£æäžŠé¡¯ç€ºïŒæèæ
® docstring ççž®æïŒã
{* ../../docs_src/path_operation_configuration/tutorial004_py310.py hl[17:25] *}
diff --git a/docs/zh-hant/docs/tutorial/path-params-numeric-validations.md b/docs/zh-hant/docs/tutorial/path-params-numeric-validations.md
index a07f825b05..68eb837e94 100644
--- a/docs/zh-hant/docs/tutorial/path-params-numeric-validations.md
+++ b/docs/zh-hant/docs/tutorial/path-params-numeric-validations.md
@@ -14,7 +14,7 @@ FastAPI åš 0.95.0 çå å
¥äžŠéå§æšèŠäœ¿çš `Annotated`ã
åŠæäœ äœ¿çšæŽèççæ¬ïŒåè©Šäœ¿çš `Annotated` æåºé¯ã
-è«ç¢ºä¿åšäœ¿çš `Annotated` åïŒå
[åçŽ FastAPI çæ¬](../deployment/versions.md#upgrading-the-fastapi-versions){.internal-link target=_blank}å°è³å° 0.95.1ã
+è«ç¢ºä¿åšäœ¿çš `Annotated` åïŒå
[åçŽ FastAPI çæ¬](../deployment/versions.md#upgrading-the-fastapi-versions)å°è³å° 0.95.1ã
///
@@ -122,7 +122,7 @@ Python äžæå°éå `*` åä»»äœäºïŒäœå®æç¥éåŸçºçææåæž
## å°çµ { #recap }
-äœ¿çš `Query`ã`Path`ïŒä»¥åäœ å°æªçå°çå
¶ä»é¡å¥ïŒæïŒäœ å¯ä»¥ååš[æ¥è©¢åæžèåäž²é©è](query-params-str-validations.md){.internal-link target=_blank}äžäžæš£ïŒå®£åäžç¹Œè³æèåäž²é©èã
+äœ¿çš `Query`ã`Path`ïŒä»¥åäœ å°æªçå°çå
¶ä»é¡å¥ïŒæïŒäœ å¯ä»¥ååš[æ¥è©¢åæžèåäž²é©è](query-params-str-validations.md)äžäžæš£ïŒå®£åäžç¹Œè³æèåäž²é©èã
äœ ä¹å¯ä»¥å®£åæžåŒé©èïŒ
diff --git a/docs/zh-hant/docs/tutorial/path-params.md b/docs/zh-hant/docs/tutorial/path-params.md
index 373f430cde..d46e32bb14 100644
--- a/docs/zh-hant/docs/tutorial/path-params.md
+++ b/docs/zh-hant/docs/tutorial/path-params.md
@@ -6,7 +6,7 @@
è·¯åŸåæž `item_id` çåŒæäœçºåŒæž `item_id` å³å
¥äœ çåœåŒã
-æä»¥ïŒåŠæäœ å·è¡éåç¯äŸäžŠååŸ http://127.0.0.1:8000/items/fooïŒäœ æçå°é暣çåæïŒ
+æä»¥ïŒåŠæäœ å·è¡éåç¯äŸäžŠååŸ [http://127.0.0.1:8000/items/foo](http://127.0.0.1:8000/items/foo)ïŒäœ æçå°é暣çåæïŒ
```JSON
{"item_id":"foo"}
@@ -28,7 +28,7 @@
## è³æ èœæ { #data-conversion }
-åŠæäœ å·è¡éåç¯äŸäžŠåšç芜åšéå http://127.0.0.1:8000/items/3ïŒäœ æçå°é暣çåæïŒ
+åŠæäœ å·è¡éåç¯äŸäžŠåšç芜åšéå [http://127.0.0.1:8000/items/3](http://127.0.0.1:8000/items/3)ïŒäœ æçå°é暣çåæïŒ
```JSON
{"item_id":3}
@@ -44,7 +44,7 @@
## è³æé©è { #data-validation }
-äœåŠæäœ åšç芜åšååŸ http://127.0.0.1:8000/items/fooïŒäœ æçå°æŒäº®ç HTTP é¯èª€ïŒ
+äœåŠæäœ åšç芜åšååŸ [http://127.0.0.1:8000/items/foo](http://127.0.0.1:8000/items/foo)ïŒäœ æçå°æŒäº®ç HTTP é¯èª€ïŒ
```JSON
{
@@ -64,7 +64,7 @@
å çºè·¯åŸåæž `item_id` çåŒæ¯ `"foo"`ïŒå®äžæ¯ `int`ã
-åæš£çé¯èª€ä¹æåšäœ æäŸ `float` èäžæ¯ `int` æåºçŸïŒäŸåŠïŒhttp://127.0.0.1:8000/items/4.2
+åæš£çé¯èª€ä¹æåšäœ æäŸ `float` èäžæ¯ `int` æåºçŸïŒäŸåŠïŒ[http://127.0.0.1:8000/items/4.2](http://127.0.0.1:8000/items/4.2)
/// check
@@ -78,7 +78,7 @@
## æä»¶ { #documentation }
-ç¶äœ åšç芜åšéå http://127.0.0.1:8000/docsïŒäœ æçå°èªåç¢çãå¯äºåç API æä»¶ïŒäŸåŠïŒ
+ç¶äœ åšç芜åšéå [http://127.0.0.1:8000/docs](http://127.0.0.1:8000/docs)ïŒäœ æçå°èªåç¢çãå¯äºåç API æä»¶ïŒäŸåŠïŒ
@@ -92,9 +92,9 @@
## åºæŒæšæºçåªå¢èæ¿ä»£æä»¶ { #standards-based-benefits-alternative-documentation }
-èäžå çºç¢çç schema äŸèª OpenAPI æšæºïŒæåŸå€çžå®¹çå·¥å
·å¯çšã
+èäžå çºç¢çç schema äŸèª [OpenAPI](https://github.com/OAI/OpenAPI-Specification/blob/master/versions/3.1.0.md) æšæºïŒæåŸå€çžå®¹çå·¥å
·å¯çšã
-å æ€ïŒ**FastAPI** æ¬èº«ä¹æäŸåŠäžçš® API æä»¶ïŒäœ¿çš ReDocïŒïŒäœ å¯ä»¥åš http://127.0.0.1:8000/redoc ååïŒ
+å æ€ïŒ**FastAPI** æ¬èº«ä¹æäŸåŠäžçš® API æä»¶ïŒäœ¿çš ReDocïŒïŒäœ å¯ä»¥åš [http://127.0.0.1:8000/redoc](http://127.0.0.1:8000/redoc) ååïŒ
@@ -102,7 +102,7 @@
## Pydantic { #pydantic }
-ææè³æé©èéœç± Pydantic åšåºå±€èçïŒå æ€äœ èœçŽæ¥åæ ãèäžäœ å¯ä»¥æŸå¿äœ¿çšã
+ææè³æé©èéœç± [Pydantic](https://docs.pydantic.dev/) åšåºå±€èçïŒå æ€äœ èœçŽæ¥åæ ãèäžäœ å¯ä»¥æŸå¿äœ¿çšã
äœ å¯ä»¥çšçžåçåå¥å®£åæé
`str`ã`float`ã`bool` èèš±å€æŽè€éçè³æåå¥ã
diff --git a/docs/zh-hant/docs/tutorial/query-params-str-validations.md b/docs/zh-hant/docs/tutorial/query-params-str-validations.md
index ea84234c0e..0932c8d90f 100644
--- a/docs/zh-hant/docs/tutorial/query-params-str-validations.md
+++ b/docs/zh-hant/docs/tutorial/query-params-str-validations.md
@@ -35,13 +35,13 @@ FastAPI èª 0.95.0 çèµ·å å
¥äžŠéå§æšèŠäœ¿çš `Annotated`ã
åŠæäœ ççæ¬èŒèïŒåè©Šäœ¿çš `Annotated` æåºé¯ã
-è«å
è³å° [åçŽ FastAPI çæ¬](../deployment/versions.md#upgrading-the-fastapi-versions){.internal-link target=_blank} å° 0.95.1 åäœ¿çš `Annotated`ã
+è«å
è³å° [åçŽ FastAPI çæ¬](../deployment/versions.md#upgrading-the-fastapi-versions) å° 0.95.1 åäœ¿çš `Annotated`ã
///
## åš `q` åæžçåå¥äžäœ¿çš `Annotated` { #use-annotated-in-the-type-for-the-q-parameter }
-éèšåŸå
ååš [Python åå¥ä»ç޹](../python-types.md#type-hints-with-metadata-annotations){.internal-link target=_blank} æå°å¯ä»¥çš `Annotated` çºåæžå å
¥äžç¹Œè³æåïŒ
+éèšåŸå
ååš [Python åå¥ä»ç޹](../python-types.md#type-hints-with-metadata-annotations) æå°å¯ä»¥çš `Annotated` çºåæžå å
¥äžç¹Œè³æåïŒ
çŸåšå°±çšåš FastAPI äžå§ãð
@@ -157,7 +157,7 @@ q: str = Query(default="rick")
è¥äžäœ¿çš `Annotated`ãæ¹çšãïŒèåŒïŒé èšåŒã寫æ³ïŒäœ åšæ²æ FastAPI çãå
¶ä»å°æ¹ãåŒå«è©²åœåŒæïŒå°±åŸãèšåŸãå³å
¥æ£ç¢ºåæžïŒåŠååŒæåé æäžåïŒäŸåŠæåŸå° `QueryInfo` æé¡äŒŒçæ±è¥¿ïŒèäžæ¯ `str`ïŒãäœ ç線茯åšäžææç€ºïŒPython å·è¡è©²åœåŒæä¹äžææ±æšïŒåªæåšå
§éšæäœå€±ææææåºé¯ã
-å çº `Annotated` å¯ä»¥æå€åäžç¹Œè³æèš»è§£ïŒäœ çè³å¯ä»¥çšåäžååœåŒé
åå
¶ä»å·¥å
·ïŒäŸåŠ Typerãð
+å çº `Annotated` å¯ä»¥æå€åäžç¹Œè³æèš»è§£ïŒäœ çè³å¯ä»¥çšåäžååœåŒé
åå
¶ä»å·¥å
·ïŒäŸåŠ [Typer](https://typer.tiangolo.com/)ãð
## å å
¥æŽå€é©è { #add-more-validations }
@@ -369,11 +369,11 @@ http://127.0.0.1:8000/items/?item-query=foobaritems
éçš®æ
æ³äžïŒäœ å¯ä»¥äœ¿çšãèªèšé©èåœåŒãïŒå®æåšäžè¬é©èä¹åŸå¥çšïŒäŸåŠå
確èªåŒæ¯ `str` ä¹åŸïŒã
-äœ å¯ä»¥åš `Annotated` äžäœ¿çš Pydantic ç `AfterValidator` äŸéæã
+äœ å¯ä»¥åš `Annotated` äžäœ¿çš [Pydantic ç `AfterValidator`](https://docs.pydantic.dev/latest/concepts/validators/#field-after-validator) äŸéæã
/// tip | æç€º
-Pydantic 乿 `BeforeValidator` ççãð€
+Pydantic 乿 [`BeforeValidator`](https://docs.pydantic.dev/latest/concepts/validators/#field-before-validator) ççãð€
///
diff --git a/docs/zh-hant/docs/tutorial/query-params.md b/docs/zh-hant/docs/tutorial/query-params.md
index f21bf40506..89c0834565 100644
--- a/docs/zh-hant/docs/tutorial/query-params.md
+++ b/docs/zh-hant/docs/tutorial/query-params.md
@@ -182,6 +182,6 @@ http://127.0.0.1:8000/items/foo-item?needy=sooooneedy
/// tip | æç€º
-äœ ä¹å¯ä»¥ååš[è·¯åŸåæž](path-params.md#predefined-values){.internal-link target=_blank}äžäžæš£äœ¿çš `Enum`ã
+äœ ä¹å¯ä»¥ååš[è·¯åŸåæž](path-params.md#predefined-values)äžäžæš£äœ¿çš `Enum`ã
///
diff --git a/docs/zh-hant/docs/tutorial/request-files.md b/docs/zh-hant/docs/tutorial/request-files.md
index c8606a3f23..4e20544ea4 100644
--- a/docs/zh-hant/docs/tutorial/request-files.md
+++ b/docs/zh-hant/docs/tutorial/request-files.md
@@ -4,9 +4,9 @@
/// info
-è¥èŠæ¥æ¶äžå³çæªæ¡ïŒè«å
å®è£ `python-multipart`ã
+è¥èŠæ¥æ¶äžå³çæªæ¡ïŒè«å
å®è£ [`python-multipart`](https://github.com/Kludex/python-multipart)ã
-è«å
建ç«äžŠåçšäžå[èæ¬ç°å¢](../virtual-environments.md){.internal-link target=_blank}ïŒç¶åŸå®è£ïŒäŸåŠïŒ
+è«å
建ç«äžŠåçšäžå[èæ¬ç°å¢](../virtual-environments.md)ïŒç¶åŸå®è£ïŒäŸåŠïŒ
```console
$ pip install python-multipart
@@ -63,8 +63,8 @@ $ pip install python-multipart
* æªæ¡åšèšæ¶é«äžä¿åå°æå倧å°äžéïŒè¶
éäžéåŸæåå°ç£ç¢ã
* å æ€é©åèçå€§åæªæ¡ïŒäŸåŠåçã圱çã倧åäºé²äœæªçïŒïŒèäžæèç¡èšæ¶é«ã
* äœ å¯ä»¥ååŸäžå³æªæ¡çäžç¹Œè³æã
-* 宿äŸäžå顿ªæ¡ç `async` ä»é¢ã
-* 宿æäŸå¯Šéç Python `SpooledTemporaryFile` ç©ä»¶ïŒäœ å¯ä»¥çŽæ¥å³çµŠéèŠé¡æªæ¡ç©ä»¶çå
¶ä»åœåŒæåœåŒåº«ã
+* 宿äŸäžå[file-like](https://docs.python.org/3/glossary.html#term-file-like-object) ç `async` ä»é¢ã
+* 宿æäŸå¯Šéç Python [`SpooledTemporaryFile`](https://docs.python.org/3/library/tempfile.html#tempfile.SpooledTemporaryFile) ç©ä»¶ïŒäœ å¯ä»¥çŽæ¥å³çµŠéèŠé¡æªæ¡ç©ä»¶çå
¶ä»åœåŒæåœåŒåº«ã
### `UploadFile` { #uploadfile }
@@ -72,13 +72,13 @@ $ pip install python-multipart
* `filename`ïŒäžå `str`ïŒçºäžå³çåå§æªåïŒäŸåŠ `myimage.jpg`ïŒã
* `content_type`ïŒäžå `str`ïŒçºå
§å®¹é¡åïŒMIME type / media typeïŒïŒäŸåŠ `image/jpeg`ïŒã
-* `file`ïŒäžå `SpooledTemporaryFile`ïŒé¡æªæ¡ç©ä»¶ïŒãéæ¯çæ£ç Python æªæ¡ç©ä»¶ïŒäœ å¯ä»¥çŽæ¥å³çµŠæåŸ
ã顿ªæ¡ãç©ä»¶çå
¶ä»åœåŒæåœåŒåº«ã
+* `file`ïŒäžå [`SpooledTemporaryFile`](https://docs.python.org/3/library/tempfile.html#tempfile.SpooledTemporaryFile)ïŒäžå[file-like](https://docs.python.org/3/glossary.html#term-file-like-object) ç©ä»¶ïŒãéæ¯çæ£ç Python æªæ¡ç©ä»¶ïŒäœ å¯ä»¥çŽæ¥å³çµŠæåŸ
ã顿ªæ¡ãç©ä»¶çå
¶ä»åœåŒæåœåŒåº«ã
`UploadFile` æä»¥äž `async` æ¹æ³ãå®ååºå±€æåŒå«å°æçæªæ¡æ¹æ³ïŒäœ¿çšå
§éšç `SpooledTemporaryFile`ïŒã
-* `write(data)`ïŒå° `data`ïŒ`str` æ `bytes`ïŒå¯«å
¥æªæ¡ã
-* `read(size)`ïŒè®åæªæ¡ç `size`ïŒ`int`ïŒåäœå
çµ/åå
ã
-* `seek(offset)`ïŒç§»åå°æªæ¡äžçäœå
çµäœçœ® `offset`ïŒ`int`ïŒã
+* `write(data)`ïŒå° `data` (`str` æ `bytes`) 寫å
¥æªæ¡ã
+* `read(size)`ïŒè®åæªæ¡ç `size` (`int`) åäœå
çµ/åå
ã
+* `seek(offset)`ïŒç§»åå°æªæ¡äžçäœå
çµäœçœ® `offset` (`int`)ã
* äŸåŠïŒ`await myfile.seek(0)` æç§»å°æªæ¡éé ã
* ç¶äœ å·²ç¶å·è¡é `await myfile.read()`ïŒä¹åŸéèŠå次è®åå
§å®¹æç¹å¥æçšã
* `close()`ïŒééæªæ¡ã
@@ -121,7 +121,7 @@ HTML 衚å®ïŒ``ïŒéå°äŒºæåšçè³æé垞䜿çšäžçš®ãç¹
äœç¶è¡šå®å
嫿ªæ¡æïŒæäœ¿çš `multipart/form-data` 線碌ãè¥äœ äœ¿çš `File`ïŒ**FastAPI** æç¥éèŠåŸè«æ±æ¬æçæ£ç¢ºéšåååŸæªæ¡ã
-è¥æ³é²äžæ¥äºè§£éäºç·šç¢Œèè¡šå®æ¬äœïŒè«åè MDN Web Docs ç POSTã
+è¥æ³é²äžæ¥äºè§£éäºç·šç¢Œèè¡šå®æ¬äœïŒè«åè [MDN web docs ç `POST`](https://developer.mozilla.org/en-US/docs/Web/HTTP/Methods/POST)ã
///
diff --git a/docs/zh-hant/docs/tutorial/request-form-models.md b/docs/zh-hant/docs/tutorial/request-form-models.md
index 8cf4a7c5e8..f8a0e8c6c5 100644
--- a/docs/zh-hant/docs/tutorial/request-form-models.md
+++ b/docs/zh-hant/docs/tutorial/request-form-models.md
@@ -4,9 +4,9 @@
/// info | 說æ
-èŠäœ¿çšè¡šå®ïŒéŠå
å®è£ `python-multipart`ã
+èŠäœ¿çšè¡šå®ïŒéŠå
å®è£ [`python-multipart`](https://github.com/Kludex/python-multipart)ã
-è«å
建ç«[èæ¬ç°å¢](../virtual-environments.md){.internal-link target=_blank}ãåçšåŸåå®è£ïŒäŸåŠïŒ
+è«å
建ç«[èæ¬ç°å¢](../virtual-environments.md)ãåçšåŸåå®è£ïŒäŸåŠïŒ
```console
$ pip install python-multipart
diff --git a/docs/zh-hant/docs/tutorial/request-forms-and-files.md b/docs/zh-hant/docs/tutorial/request-forms-and-files.md
index 6dcc1c260f..c508bf7f7b 100644
--- a/docs/zh-hant/docs/tutorial/request-forms-and-files.md
+++ b/docs/zh-hant/docs/tutorial/request-forms-and-files.md
@@ -4,9 +4,9 @@
/// info
-èŠæ¥æ¶äžå³çæªæ¡è/æè¡šå®è³æïŒè«å
å®è£ `python-multipart`ã
+èŠæ¥æ¶äžå³çæªæ¡è/æè¡šå®è³æïŒè«å
å®è£ [`python-multipart`](https://github.com/Kludex/python-multipart)ã
-è«å
建ç«äžŠåçšäžå [èæ¬ç°å¢](../virtual-environments.md){.internal-link target=_blank}ïŒç¶åŸåå®è£ïŒäŸåŠïŒ
+è«å
建ç«äžŠåçšäžå [èæ¬ç°å¢](../virtual-environments.md)ïŒç¶åŸåå®è£ïŒäŸåŠïŒ
```console
$ pip install python-multipart
diff --git a/docs/zh-hant/docs/tutorial/request-forms.md b/docs/zh-hant/docs/tutorial/request-forms.md
index 733a3e2869..d38db96f1a 100644
--- a/docs/zh-hant/docs/tutorial/request-forms.md
+++ b/docs/zh-hant/docs/tutorial/request-forms.md
@@ -4,9 +4,9 @@
/// info
-èŠäœ¿çšè¡šå®ïŒè«å
å®è£ `python-multipart`ã
+èŠäœ¿çšè¡šå®ïŒè«å
å®è£ [`python-multipart`](https://github.com/Kludex/python-multipart)ã
-è«å
建ç«äžŠåçšäžå[èæ¬ç°å¢](../virtual-environments.md){.internal-link target=_blank}ïŒç¶åŸåå®è£ïŒäŸåŠïŒ
+è«å
建ç«äžŠåçšäžå[èæ¬ç°å¢](../virtual-environments.md)ïŒç¶åŸåå®è£ïŒäŸåŠïŒ
```console
$ pip install python-multipart
@@ -56,7 +56,7 @@ HTML 衚å®ïŒ``ïŒå䌺æåšå³éè³ææïŒéåžžæäœ¿çšäž
äœç¶è¡šå®å
嫿ªæ¡æïŒæäœ¿çš `multipart/form-data`ãäœ æåšäžäžç« é±è®åŠäœèçæªæ¡ã
-è¥æ³é²äžæ¥äºè§£éäºç·šç¢Œèè¡šå®æ¬äœïŒè«åè MDN ç POST ç¶²é æä»¶ã
+è¥æ³é²äžæ¥äºè§£éäºç·šç¢Œèè¡šå®æ¬äœïŒè«åè [MDN web docs ç `POST`](https://developer.mozilla.org/en-US/docs/Web/HTTP/Methods/POST)ã
///
diff --git a/docs/zh-hant/docs/tutorial/response-model.md b/docs/zh-hant/docs/tutorial/response-model.md
index d22402e180..d9ad9d9d15 100644
--- a/docs/zh-hant/docs/tutorial/response-model.md
+++ b/docs/zh-hant/docs/tutorial/response-model.md
@@ -13,6 +13,7 @@ FastAPI æäœ¿çšéååå³åå¥äŸïŒ
* åš OpenAPI çãè·¯åŸæäœãäžçºåææ°å¢ JSON Schemaã
* éæè¢«èªåæä»¶äœ¿çšã
* ä¹æè¢«èªåçšæ¶ç«¯çšåŒç¢Œç¢çå·¥å
·äœ¿çšã
+* äœ¿çš Pydantic å°åå³è³æ**åºåå**çº JSONïŒè Pydantic æ¯çš **Rust** æ°å¯«çïŒå æ€æ **æŽå¿«åŸå€**ã
äœæŽéèŠçæ¯ïŒ
@@ -73,9 +74,9 @@ FastAPI æäœ¿çšéå `response_model` äŸåææçè³ææä»¶ãé©èç
/// info | 說æ
-èŠäœ¿çš `EmailStr`ïŒè«å
å®è£ `email-validator`ã
+èŠäœ¿çš `EmailStr`ïŒè«å
å®è£ [`email-validator`](https://github.com/JoshData/python-email-validator)ã
-è«å
建ç«äžå[èæ¬ç°å¢](../virtual-environments.md){.internal-link target=_blank}ãåçšå®ïŒç¶åŸå®è£ïŒäŸåŠïŒ
+è«å
建ç«äžå[èæ¬ç°å¢](../virtual-environments.md)ãåçšå®ïŒç¶åŸå®è£ïŒäŸåŠïŒ
```console
$ pip install email-validator
@@ -181,7 +182,7 @@ FastAPI åšå
§éšææé
Pydantic åäžäºäºæ
ïŒäŸç¢ºä¿äžææé¡å¥
### çŽæ¥åå³ Response { #return-a-response-directly }
-æåžžèŠçæ
æ³æ¯[çŽæ¥åå³ ResponseïŒåšé²éæä»¶äžçšåŸæè§£éïŒ](../advanced/response-directly.md){.internal-link target=_blank}ã
+æåžžèŠçæ
æ³æ¯[çŽæ¥åå³ ResponseïŒåšé²éæä»¶äžçšåŸæè§£éïŒ](../advanced/response-directly.md)ã
{* ../../docs_src/response_model/tutorial003_02_py310.py hl[8,10:11] *}
@@ -257,7 +258,7 @@ FastAPI åšå
§éšææé
Pydantic åäžäºäºæ
ïŒäŸç¢ºä¿äžææé¡å¥
* `response_model_exclude_defaults=True`
* `response_model_exclude_none=True`
-åŠ Pydantic æä»¶äžå° `exclude_defaults` è `exclude_none` ç說æã
+åŠ [Pydantic æä»¶](https://docs.pydantic.dev/1.10/usage/exporting_models/#modeldict)äžå° `exclude_defaults` è `exclude_none` ç說æã
///
diff --git a/docs/zh-hant/docs/tutorial/response-status-code.md b/docs/zh-hant/docs/tutorial/response-status-code.md
index cbcc67ca55..9ac2e41dab 100644
--- a/docs/zh-hant/docs/tutorial/response-status-code.md
+++ b/docs/zh-hant/docs/tutorial/response-status-code.md
@@ -20,7 +20,7 @@
/// info | è³èš
-`status_code` ä¹å¯ä»¥æ¥æ¶äžå `IntEnum`ïŒäŸåŠ Python ç `http.HTTPStatus`ã
+`status_code` ä¹å¯ä»¥æ¥æ¶äžå `IntEnum`ïŒäŸåŠ Python ç [`http.HTTPStatus`](https://docs.python.org/3/library/http.html#http.HTTPStatus)ã
///
@@ -66,7 +66,7 @@ FastAPI ç¥ééé»ïŒäžŠæç¢çè²æãç¡åææ¬æãç OpenAPI æä»¶
/// tip | æç€º
-æ³æ·±å
¥çè§£åçæ
碌èå
¶çšéïŒè«åè MDN éæŒ HTTP çæ
碌çæä»¶ã
+æ³æ·±å
¥çè§£åçæ
碌èå
¶çšéïŒè«åè [MDN éæŒ HTTP çæ
碌çæä»¶](https://developer.mozilla.org/en-US/docs/Web/HTTP/Status)ã
///
@@ -98,4 +98,4 @@ FastAPI ç¥ééé»ïŒäžŠæç¢çè²æãç¡åææ¬æãç OpenAPI æä»¶
## è®æŽé èšåŒ { #changing-the-default }
-çšåŸåš [é²é䜿çšè
æå](../advanced/response-change-status-code.md){.internal-link target=_blank} äžïŒäœ æçå°åŠäœåå³äžåäžåæŒæ€èæå®£åé èšåŒççæ
碌ã
+çšåŸåš [é²é䜿çšè
æå](../advanced/response-change-status-code.md) äžïŒäœ æçå°åŠäœåå³äžåäžåæŒæ€èæå®£åé èšåŒççæ
碌ã
diff --git a/docs/zh-hant/docs/tutorial/schema-extra-example.md b/docs/zh-hant/docs/tutorial/schema-extra-example.md
index 661938ac26..1c2caef85b 100644
--- a/docs/zh-hant/docs/tutorial/schema-extra-example.md
+++ b/docs/zh-hant/docs/tutorial/schema-extra-example.md
@@ -12,7 +12,7 @@
éäºé¡å€è³èšæåå°äžåå å
¥è©²æš¡å茞åºç JSON SchemaïŒäžŠäžæçšåš API æä»¶è£¡ã
-äœ å¯ä»¥äœ¿çšå±¬æ§ `model_config`ïŒæ¥æ¶äžå `dict`ïŒïŒè©³èŠ Pydantic æä»¶ïŒConfigurationã
+äœ å¯ä»¥äœ¿çšå±¬æ§ `model_config`ïŒæ¥æ¶äžå `dict`ïŒïŒè©³èŠ [Pydantic æä»¶ïŒConfiguration](https://docs.pydantic.dev/latest/api/config/)ã
äœ å¯ä»¥å° `"json_schema_extra"` èšçºäžå `dict`ïŒå
¶äžå
å«äœ æ³åšç¢çç JSON Schema äžåºçŸçä»»äœé¡å€è³æïŒå
æ¬ `examples`ã
@@ -145,12 +145,12 @@ OpenAPI 3.1.0ïŒèª FastAPI 0.99.0 起䜿çšïŒæ°å¢äºå° `examples` çæ¯æŽ
OpenAPI ä¹åšèŠç¯çå
¶ä»éšåæ°å¢äº `example` è `examples` æ¬äœïŒ
-* `Parameter Object`ïŒèŠç¯ïŒïŒå°æå° FastAPI çïŒ
+* [`Parameter Object`ïŒèŠç¯ïŒ](https://github.com/OAI/OpenAPI-Specification/blob/main/versions/3.1.0.md#parameter-object)ïŒå°æå° FastAPI çïŒ
* `Path()`
* `Query()`
* `Header()`
* `Cookie()`
-* `Request Body Object` äžç `content` æ¬äœè£¡ç `Media Type Object`ïŒèŠç¯ïŒïŒå°æå° FastAPI çïŒ
+* [`Request Body Object` äžç `content` æ¬äœè£¡ç `Media Type Object`ïŒèŠç¯ïŒ](https://github.com/OAI/OpenAPI-Specification/blob/main/versions/3.1.0.md#media-type-object)ïŒå°æå° FastAPI çïŒ
* `Body()`
* `File()`
* `Form()`
@@ -163,7 +163,7 @@ OpenAPI ä¹åšèŠç¯çå
¶ä»éšåæ°å¢äº `example` è `examples` æ¬äœïŒ
### JSON Schema ç `examples` æ¬äœ { #json-schemas-examples-field }
-åŸäŸ JSON Schema åšæ°çæ¬èŠç¯äžæ°å¢äº `examples` æ¬äœã
+åŸäŸ JSON Schema åšæ°çæ¬èŠç¯äžæ°å¢äº [`examples`](https://json-schema.org/draft/2019-09/json-schema-validation.html#rfc.section.9.5) æ¬äœã
æ¥èæ°ç OpenAPI 3.1.0 ä»¥ææ°çæ¬ïŒJSON Schema 2020-12ïŒçºåºç€ïŒè©²çæ¬å°±å
å«éåæ°ç `examples` æ¬äœã
diff --git a/docs/zh-hant/docs/tutorial/security/first-steps.md b/docs/zh-hant/docs/tutorial/security/first-steps.md
index 109f59a37a..7f12ec1a3a 100644
--- a/docs/zh-hant/docs/tutorial/security/first-steps.md
+++ b/docs/zh-hant/docs/tutorial/security/first-steps.md
@@ -26,11 +26,11 @@
/// info
-ç¶äœ äœ¿çš `pip install "fastapi[standard]"` æä»€å®è£æïŒ`python-multipart` å¥ä»¶æéš FastAPI èªåå®è£ã
+ç¶äœ äœ¿çš `pip install "fastapi[standard]"` æä»€å®è£æïŒ[`python-multipart`](https://github.com/Kludex/python-multipart) å¥ä»¶æéš FastAPI èªåå®è£ã
äžéè¥åªå·è¡ `pip install fastapi`ïŒé èšäžæå
å« `python-multipart`ã
-è¥èŠæåå®è£ïŒè«å
建ç«äžŠåçšäžå[èæ¬ç°å¢](../../virtual-environments.md){.internal-link target=_blank}ïŒæ¥èå·è¡ïŒ
+è¥èŠæåå®è£ïŒè«å
建ç«äžŠåçšäžå[èæ¬ç°å¢](../../virtual-environments.md)ïŒæ¥èå·è¡ïŒ
```console
$ pip install python-multipart
@@ -45,7 +45,7 @@ $ pip install python-multipart
```console
-$ fastapi dev main.py
+$ fastapi dev
INFO: Uvicorn running on http://127.0.0.1:8000 (Press CTRL+C to quit)
```
@@ -54,7 +54,7 @@ $ fastapi dev main.py
## æª¢æ¥ { #check-it }
-éåäºååŒæä»¶ïŒ
http://127.0.0.1:8000/docsã
+éåäºååŒæä»¶ïŒ[http://127.0.0.1:8000/docs](http://127.0.0.1:8000/docs)ã
äœ æçå°é¡äŒŒé暣ïŒ
@@ -140,7 +140,7 @@ FastAPI æäŸå€å±€æœè±¡çå·¥å
·äŸå¯Šäœéäºå®å
šæ©å¶ã
ç±æŒäœ¿çšäºçžå° URLïŒè¥äœ ç API äœæŒ `https://example.com/`ïŒé£å®ææå `https://example.com/token`ïŒäœè¥äœ ç API äœæŒ `https://example.com/api/v1/`ïŒé£å®ææå `https://example.com/api/v1/token`ã
-䜿çšçžå° URL åŸéèŠïŒèœç¢ºä¿äœ çæçšåšåæ¯[åš Proxy åŸæ¹](../../advanced/behind-a-proxy.md){.internal-link target=_blank}éé¡é²éæ
å¢äžä»èœæ£åžžéäœã
+䜿çšçžå° URL åŸéèŠïŒèœç¢ºä¿äœ çæçšåšåæ¯[åš Proxy åŸæ¹](../../advanced/behind-a-proxy.md)éé¡é²éæ
å¢äžä»èœæ£åžžéäœã
///
diff --git a/docs/zh-hant/docs/tutorial/security/oauth2-jwt.md b/docs/zh-hant/docs/tutorial/security/oauth2-jwt.md
index d6761a0051..abd920ce6f 100644
--- a/docs/zh-hant/docs/tutorial/security/oauth2-jwt.md
+++ b/docs/zh-hant/docs/tutorial/security/oauth2-jwt.md
@@ -24,13 +24,13 @@ eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJzdWIiOiIxMjM0NTY3ODkwIiwibmFtZSI6IkpvaG4
äžé±åŸïŒæ¬ææéæïŒäœ¿çšè
å°±äžåè¢«ææ¬ïŒéèŠå次ç»å
¥ä»¥ååŸæ°çæ¬æãèåŠæäœ¿çšè
ïŒæç¬¬äžæ¹ïŒè©Šåä¿®æ¹æ¬æäŸæ¹è®æææïŒäœ ä¹èœçŒçŸïŒå çºç°œåäžæçžç¬Šã
-åŠæäœ æ³ç©ç©ç JWT æ¬æäžŠäºè§£å
¶éäœïŒè«åè
https://jwt.ioã
+åŠæäœ æ³ç©ç©ç JWT æ¬æäžŠäºè§£å
¶éäœïŒè«åè [https://jwt.io](https://jwt.io/)ã
## å®è£ `PyJWT` { #install-pyjwt }
æåéèŠå®è£ `PyJWT` æèœåš Python äžç¢çèé©è JWT æ¬æã
-è«å
建ç«äžŠåçšäžå[èæ¬ç°å¢](../../virtual-environments.md){.internal-link target=_blank}ïŒç¶åŸå®è£ `pyjwt`ïŒ
+è«å
建ç«äžŠåçšäžå[èæ¬ç°å¢](../../virtual-environments.md)ïŒç¶åŸå®è£ `pyjwt`ïŒ
@@ -46,7 +46,7 @@ $ pip install pyjwt
åŠæäœ æç®äœ¿çšå RSA æ ECDSA éé¡çæžäœç°œç« æŒç®æ³ïŒæè©²å®è£åž¶æå å¯åœåŒåº«çžäŸç `pyjwt[crypto]`ã
-æŽå€å
§å®¹å¯åè
PyJWT å®è£æä»¶ã
+æŽå€å
§å®¹å¯åè [PyJWT å®è£æä»¶](https://pyjwt.readthedocs.io/en/latest/installation.html)ã
///
@@ -72,7 +72,7 @@ pwdlib æ¯äžååŸæ£ç Python å¥ä»¶ïŒçšäŸèçå¯ç¢Œéæ¹ã
建è°äœ¿çšçæŒç®æ³æ¯ãArgon2ãã
-è«å
建ç«äžŠåçšäžå[èæ¬ç°å¢](../../virtual-environments.md){.internal-link target=_blank}ïŒç¶åŸä»¥ Argon2 æ¯æŽå®è£ pwdlibïŒ
+è«å
建ç«äžŠåçšäžå[èæ¬ç°å¢](../../virtual-environments.md)ïŒç¶åŸä»¥ Argon2 æ¯æŽå®è£ pwdlibïŒ
@@ -200,7 +200,7 @@ JWT é€äºçšäŸèå¥äœ¿çšè
䞊å
èš±ä»çŽæ¥å°äœ ç API å·è¡æäœå€
## 詊詊ç { #check-it }
-åå䌺æåšäžŠååŸæä»¶é ïŒ
http://127.0.0.1:8000/docsã
+åå䌺æåšäžŠååŸæä»¶é ïŒ[http://127.0.0.1:8000/docs](http://127.0.0.1:8000/docs)ã
äœ æçå°é暣çä»é¢ïŒ
diff --git a/docs/zh-hant/docs/tutorial/security/simple-oauth2.md b/docs/zh-hant/docs/tutorial/security/simple-oauth2.md
index 3b9aae3416..251848aa5a 100644
--- a/docs/zh-hant/docs/tutorial/security/simple-oauth2.md
+++ b/docs/zh-hant/docs/tutorial/security/simple-oauth2.md
@@ -146,7 +146,7 @@ UserInDB(
/// info
-æ³æŽå®æŽå°äºè§£ `**user_dict`ïŒè«åå°[**é¡å€æš¡å** çæä»¶](../extra-models.md#about-user-in-dict){.internal-link target=_blank}ã
+æ³æŽå®æŽå°äºè§£ `**user_dict`ïŒè«åå°[**é¡å€æš¡å** çæä»¶](../extra-models.md#about-user-in-dict)ã
///
@@ -216,7 +216,7 @@ UserInDB(
## 寊éæäœçç { #see-it-in-action }
-éåäºååŒæä»¶ïŒ
http://127.0.0.1:8000/docsã
+éåäºååŒæä»¶ïŒ[http://127.0.0.1:8000/docs](http://127.0.0.1:8000/docs)ã
### é©è身å { #authenticate }
diff --git a/docs/zh-hant/docs/tutorial/server-sent-events.md b/docs/zh-hant/docs/tutorial/server-sent-events.md
new file mode 100644
index 0000000000..ced91e358a
--- /dev/null
+++ b/docs/zh-hant/docs/tutorial/server-sent-events.md
@@ -0,0 +1,120 @@
+# Server-Sent EventsïŒSSEïŒ { #server-sent-events-sse }
+
+äœ å¯ä»¥äœ¿çš Server-Sent EventsïŒSSEïŒæè³æäž²æµå³éçµŠçšæ¶ç«¯ã
+
+éè[äž²æµ JSON Lines](stream-json-lines.md)é¡äŒŒïŒäœäœ¿çšç芜åšåçæ¯æŽãéé [`EventSource` API](https://developer.mozilla.org/en-US/docs/Web/API/EventSource) ç `text/event-stream` æ ŒåŒã
+
+/// info
+
+åš FastAPI 0.135.0 æ°å¢ã
+
+///
+
+## ä»éºŒæ¯ Server-Sent EventsïŒ { #what-are-server-sent-events }
+
+SSE æ¯äžçš®éé HTTP åŸäŒºæåšåçšæ¶ç«¯äž²æµå³éè³æçæšæºã
+
+æ¯åäºä»¶éœæ¯äžåå°åæååå¡ïŒå
å« `data`ã`event`ã`id` å `retry` çãæ¬äœãïŒäžŠä»¥ç©ºçœè¡åéã
+
+çèµ·äŸåéæš£ïŒ
+
+```
+data: {"name": "Portal Gun", "price": 999.99}
+
+data: {"name": "Plumbus", "price": 32.99}
+
+```
+
+SSE åžžçšæŒ AI è倩䞲æµã峿éç¥ãæ¥èªèå¯è§å¯æ§ïŒä»¥åå
¶ä»ç±äŒºæåšäž»åæšéæŽæ°çµŠçšæ¶ç«¯çæ
å¢ã
+
+/// tip
+
+åŠæäœ èŠäž²æµäºé²äœè³æïŒäŸåŠåœ±çæé³èšïŒè«åèé²éæåïŒ[äž²æµè³æ](../advanced/stream-data.md)ã
+
+///
+
+## äœ¿çš FastAPI äž²æµ SSE { #stream-sse-with-fastapi }
+
+èŠåš FastAPI äžäž²æµ SSEïŒè«åšäœ çè·¯åŸæäœåœåŒïŒpath operation functionïŒäžäœ¿çš `yield`ïŒäžŠèšå® `response_class=EventSourceResponse`ã
+
+åŸ `fastapi.sse` å¯å
¥ `EventSourceResponse`ïŒ
+
+{* ../../docs_src/server_sent_events/tutorial001_py310.py ln[1:25] hl[4,22] *}
+
+æ¯å `yield` çé
ç®éœæä»¥ JSON 線碌䞊æŸåš SSE äºä»¶ç `data:` æ¬äœäžéåºã
+
+åŠæäœ æåå³åå¥å®£åçº `AsyncIterable[Item]`ïŒFastAPI æçšå®äŸéé Pydantic é²è¡**é©è**ã**æä»¶å**è**åºåå**ã
+
+{* ../../docs_src/server_sent_events/tutorial001_py310.py ln[1:25] hl[10:12,23] *}
+
+/// tip
+
+å çº Pydantic æåš **Rust** 端é²è¡åºååïŒåŠæäœ æå®£ååå³åå¥ïŒæèœææ¯æªå®£åæé«åŸå€ã
+
+///
+
+### é async çè·¯åŸæäœåœåŒ { #non-async-path-operation-functions }
+
+äœ ä¹å¯ä»¥äœ¿çšäžè¬ç `def` åœåŒïŒæ²æ `async`ïŒïŒäžŠåæš£äœ¿çš `yield`ã
+
+FastAPI æç¢ºä¿æ£ç¢ºå·è¡ïŒäžæé»å¡äºä»¶è¿Žåã
+
+ç±æŒæ€åœåŒäžæ¯ asyncïŒæ£ç¢ºçåå³å奿¯ `Iterable[Item]`ïŒ
+
+{* ../../docs_src/server_sent_events/tutorial001_py310.py ln[28:31] hl[29] *}
+
+### ç¡åå³åå¥ { #no-return-type }
+
+äœ ä¹å¯ä»¥çç¥åå³åå¥ãFastAPI æäœ¿çš [`jsonable_encoder`](./encoder.md) èœæè³æäžŠéåºã
+
+{* ../../docs_src/server_sent_events/tutorial001_py310.py ln[34:37] hl[35] *}
+
+## `ServerSentEvent` { #serversentevent }
+
+åŠæäœ éèŠèšå® `event`ã`id`ã`retry` æ `comment` ç SSE æ¬äœïŒäœ å¯ä»¥æ¹çº `yield` åº `ServerSentEvent` ç©ä»¶ïŒèäžæ¯å®çŽçè³æã
+
+åŸ `fastapi.sse` å¯å
¥ `ServerSentEvent`ïŒ
+
+{* ../../docs_src/server_sent_events/tutorial002_py310.py hl[4,26] *}
+
+`data` æ¬äœäžåŸæä»¥ JSON 線碌ãäœ å¯ä»¥å³å
¥ä»»äœå¯åºååçº JSON çåŒïŒå
æ¬ Pydantic æš¡åã
+
+## åå§è³æ { #raw-data }
+
+åŠæäœ éèŠåš**äž**é²è¡ JSON 線碌çæ
æ³äžå³éè³æïŒè«äœ¿çš `raw_data` å代 `data`ã
+
+éå°æŒå³éå·²æ ŒåŒåçæåãæ¥èªè¡æç¹æ®ç
"åšå
µ" åŒïŒäŸåŠ `[DONE]`ïŒåŸæçšã
+
+{* ../../docs_src/server_sent_events/tutorial003_py310.py hl[17] *}
+
+/// note
+
+`data` è `raw_data` äºæ¥ãæ¯å `ServerSentEvent` åªèœèšå®å
¶äžäžåã
+
+///
+
+## äœ¿çš `Last-Event-ID` ç¹Œçº { #resuming-with-last-event-id }
+
+ç¶ç芜åšåšé£ç·äžæ·åŸéæ°é£ç·æïŒæåš `Last-Event-ID` æšé äžå³éæåŸæ¥æ¶å°ç `id`ã
+
+äœ å¯ä»¥å°å®äœçºæšé åæžè®åïŒäžŠçšäŸåŸçšæ¶ç«¯äžæ·è繌çºäž²æµïŒ
+
+{* ../../docs_src/server_sent_events/tutorial004_py310.py hl[25,27,31] *}
+
+## äœ¿çš POST ç SSE { #sse-with-post }
+
+SSE 坿é
**ä»»äœ HTTP æ¹æ³**ïŒäžå
éæŒ `GET`ã
+
+éå°æŒåæ¯éé `POST` äž²æµ SSE çåå®ïŒäŸåŠ [MCP](https://modelcontextprotocol.io)ïŒåŸæçšïŒ
+
+{* ../../docs_src/server_sent_events/tutorial005_py310.py hl[14] *}
+
+## æè¡çŽ°ç¯ { #technical-details }
+
+FastAPI å
§å»ºå¯Šäœäºäžäº SSE çæäœ³å¯Šåã
+
+- ç¶ 15 ç§å
§æ²æä»»äœè𿝿ïŒå³éäžæ¬¡**ãä¿æŽ»ã`ping` 蚻解**ïŒä»¥é¿å
æäºä»£ç䌺æåšééé£ç·ïŒæ€äœæ³æºèªæŒ[HTML èŠç¯ïŒServer-Sent Events](https://html.spec.whatwg.org/multipage/server-sent-events.html#authoring-notes)äžç建è°ã
+- èšå® `Cache-Control: no-cache` æšé ïŒä»¥**鲿¢å¿«å**äž²æµå
§å®¹ã
+- èšå®ç¹æ®æšé `X-Accel-Buffering: no`ïŒä»¥**é¿å
**åšå Nginx éé¡ä»£çäžè¢«**ç·©è¡**ã
+
+äœ äžéèŠåä»»äœäºïŒéç®±å³çšãð€
diff --git a/docs/zh-hant/docs/tutorial/sql-databases.md b/docs/zh-hant/docs/tutorial/sql-databases.md
index 930dc4e8a5..a37e164321 100644
--- a/docs/zh-hant/docs/tutorial/sql-databases.md
+++ b/docs/zh-hant/docs/tutorial/sql-databases.md
@@ -2,9 +2,9 @@
FastAPI äžåŒ·å¶äœ äœ¿çš SQLïŒéè¯åŒïŒè³æåº«ãäœ å¯ä»¥äœ¿çšä»»äœäœ æ³èŠçè³æåº«ã
-é裡æåæçš
SQLModel äœçºç¯äŸã
+é裡æåæçš [SQLModel](https://sqlmodel.tiangolo.com/) äœçºç¯äŸã
-SQLModel 建ç«åš
SQLAlchemy è Pydantic ä¹äžãå®ç± FastAPI çäœè
éçŒïŒéåžžé©åéèŠäœ¿çš SQL è³æåº«ç FastAPI æçšã
+SQLModel 建ç«åš [SQLAlchemy](https://www.sqlalchemy.org/) è Pydantic ä¹äžãå®ç± FastAPI çäœè
éçŒïŒéåžžé©åéèŠäœ¿çš SQL è³æåº«ç FastAPI æçšã
/// tip | æç€º
@@ -26,15 +26,15 @@ SQLModel 建ç«åš
https://github.com/fastapi/full-stack-fastapi-template
+æäžåå
å« FastAPI è PostgreSQL ç宿¹å°æ¡è
³ææ¶ïŒéæåç«¯èæŽå€å·¥å
·ïŒ[https://github.com/fastapi/full-stack-fastapi-template](https://github.com/fastapi/full-stack-fastapi-template)
///
-鿝äžä»œéåžžç°¡ççæåžïŒåŠæäœ æ³æŽå
šé¢åžç¿è³æåº«ãSQLïŒææŽé²éçåèœïŒè«åè
SQLModel æä»¶ã
+鿝äžä»œéåžžç°¡ççæåžïŒåŠæäœ æ³æŽå
šé¢åžç¿è³æåº«ãSQLïŒææŽé²éçåèœïŒè«åè [SQLModel æä»¶](https://sqlmodel.tiangolo.com/)ã
## å®è£ `SQLModel` { #install-sqlmodel }
-éŠå
ïŒè«å
建ç«äœ ç[èæ¬ç°å¢](../virtual-environments.md){.internal-link target=_blank}ãåçšå®ïŒç¶åŸå®è£ `sqlmodel`ïŒ
+éŠå
ïŒè«å
建ç«äœ ç[èæ¬ç°å¢](../virtual-environments.md)ãåçšå®ïŒç¶åŸå®è£ `sqlmodel`ïŒ
@@ -65,7 +65,7 @@ $ pip install sqlmodel
* `Field(primary_key=True)` å蚎 SQLModelïŒ`id` æ¯ SQL è³æåº«äžçãäž»éµãã ïŒäœ å¯ä»¥åš SQLModel æä»¶äžé²äžæ¥äºè§£ SQL äž»éµïŒ
- 泚æïŒæååšäž»éµæ¬äœäœ¿çš `int | None`ïŒéæš£åš Python çšåŒç¢Œäžæåå¯ä»¥ãåšæ²æ `id` çæ
æ³äžå»ºç«ç©ä»¶ãïŒ`id=None`ïŒïŒåèšè³æåº«åšå²åææãèªåç¢çããSQLModel çè§£è³æåº«ææäŸ `id`ïŒäžŠäžåšè³æåº«ç¶±èŠäžãå°è©²æ¬äœå®çŸ©çºé空ç `INTEGER`ãã詳æ
è«èŠ
SQLModel æä»¶ïŒäž»éµã
+ 泚æïŒæååšäž»éµæ¬äœäœ¿çš `int | None`ïŒéæš£åš Python çšåŒç¢Œäžæåå¯ä»¥ãåšæ²æ `id` çæ
æ³äžå»ºç«ç©ä»¶ãïŒ`id=None`ïŒïŒåèšè³æåº«åšå²åææãèªåç¢çããSQLModel çè§£è³æåº«ææäŸ `id`ïŒäžŠäžåšè³æåº«ç¶±èŠäžãå°è©²æ¬äœå®çŸ©çºé空ç `INTEGER`ãã詳æ
è«èŠ [SQLModel æä»¶ïŒäž»éµ](https://sqlmodel.tiangolo.com/tutorial/create-db-and-table/#primary-key-id)ã
* `Field(index=True)` å蚎 SQLModel æçºæ€æ¬äœå»ºç«ãSQL 玢åŒãïŒä»¥äŸ¿åšç𿀿¬äœé濟è®åè³æææŽå¿«æ¥è©¢ã
@@ -111,7 +111,7 @@ SQLModel ç `engine`ïŒåºå±€å¯Šéäžæ¯ SQLAlchemy ç `engine`ïŒæ¯çšäŸ
/// tip | æç€º
-SQLModel ä¹åŸææäŸå
è£ Alembic çé·ç§»å·¥å
·ïŒäœç®åäœ å¯ä»¥çŽæ¥äœ¿çš
Alembicã
+SQLModel ä¹åŸææäŸå
è£ Alembic çé·ç§»å·¥å
·ïŒäœç®åäœ å¯ä»¥çŽæ¥äœ¿çš [Alembic](https://alembic.sqlalchemy.org/en/latest/)ã
///
@@ -152,7 +152,7 @@ SQLModel ä¹åŸææäŸå
è£ Alembic çé·ç§»å·¥å
·ïŒäœç®åäœ å¯ä»¥çŽ
```console
-$ fastapi dev main.py
+$ fastapi dev
INFO: Uvicorn running on http://127.0.0.1:8000 (Press CTRL+C to quit)
```
@@ -337,7 +337,7 @@ $ fastapi dev main.py
```console
-$ fastapi dev main.py
+$ fastapi dev
INFO: Uvicorn running on http://127.0.0.1:8000 (Press CTRL+C to quit)
```
@@ -352,6 +352,6 @@ $ fastapi dev main.py
## çžœçµ { #recap }
-äœ å¯ä»¥äœ¿çš
SQLModel è SQL è³æåº«äºåïŒäžŠçšãè³ææš¡åãèãè³æè¡šæš¡åãè®çšåŒç¢ŒæŽç°¡æœã
+äœ å¯ä»¥äœ¿çš [SQLModel](https://sqlmodel.tiangolo.com/) è SQL è³æåº«äºåïŒäžŠçšãè³ææš¡åãèãè³æè¡šæš¡åãè®çšåŒç¢ŒæŽç°¡æœã
-äœ å¯ä»¥åš SQLModel æä»¶åžå°æŽå€å
§å®¹ïŒé裡éæäžä»œæŽé·ç
äœ¿çš SQLModel è FastAPI çæåžãð
+äœ å¯ä»¥åš SQLModel æä»¶åžå°æŽå€å
§å®¹ïŒé裡éæäžä»œæŽé·ç [äœ¿çš SQLModel è FastAPI çæåž](https://sqlmodel.tiangolo.com/tutorial/fastapi/)ãð
diff --git a/docs/zh-hant/docs/tutorial/static-files.md b/docs/zh-hant/docs/tutorial/static-files.md
index 06b6176760..1b9e92a1c9 100644
--- a/docs/zh-hant/docs/tutorial/static-files.md
+++ b/docs/zh-hant/docs/tutorial/static-files.md
@@ -23,7 +23,7 @@
éèäœ¿çš `APIRouter` äžåïŒå çºè¢«æèŒçæçšæ¯å®å
šçšç«çãäž»æçšç OpenAPI èæä»¶äžæå
å«æèŒæçšçä»»äœå
§å®¹ïŒççã
-äœ å¯ä»¥åš[é²é䜿çšè
æå](../advanced/index.md){.internal-link target=_blank}äžé±è®æŽå€çžéå
§å®¹ã
+äœ å¯ä»¥åš[é²é䜿çšè
æå](../advanced/index.md)äžé±è®æŽå€çžéå
§å®¹ã
## çŽ°ç¯ { #details }
@@ -37,4 +37,4 @@
## æŽå€è³èš { #more-info }
-åŠéæŽå€çްç¯èéžé
ïŒè«åè
Starlette éæŒéæ
æªæ¡çæä»¶ã
+åŠéæŽå€çްç¯èéžé
ïŒè«åè [Starlette éæŒéæ
æªæ¡çæä»¶](https://www.starlette.dev/staticfiles/)ã
diff --git a/docs/zh-hant/docs/tutorial/stream-json-lines.md b/docs/zh-hant/docs/tutorial/stream-json-lines.md
new file mode 100644
index 0000000000..204d32ffd3
--- /dev/null
+++ b/docs/zh-hant/docs/tutorial/stream-json-lines.md
@@ -0,0 +1,111 @@
+# äž²æµ JSON Lines { #stream-json-lines }
+
+ç¶äœ æäžé£äž²è³ææ³ä»¥ã**äž²æµ**ãæ¹åŒå³éæïŒå¯ä»¥äœ¿çš **JSON Lines**ã
+
+/// info
+
+åš FastAPI 0.134.0 æ°å¢ã
+
+///
+
+## ä»éºŒæ¯äž²æµïŒ { #what-is-a-stream }
+
+ã**Streaming**ãè³æè¡šç€ºäœ çæçšæåšæŽåè³æåºåå°æªå®å
šæºå奜ä¹åïŒå°±éå§å°è³æé
ç®å³éçµŠçšæ¶ç«¯ã
+
+ä¹å°±æ¯èªªïŒå®æå
éåºç¬¬äžåé
ç®ïŒçšæ¶ç«¯æ¥æ¶äžŠéå§èçæïŒäœ çæçšå¯èœä»åšç¢çäžäžåé
ç®ã
+
+```mermaid
+sequenceDiagram
+ participant App
+ participant Client
+
+ App->>App: Produce Item 1
+ App->>Client: Send Item 1
+ App->>App: Produce Item 2
+ Client->>Client: Process Item 1
+ App->>Client: Send Item 2
+ App->>App: Produce Item 3
+ Client->>Client: Process Item 2
+ App->>Client: Send Item 3
+ Client->>Client: Process Item 3
+ Note over App: Keeps producing...
+ Note over Client: Keeps consuming...
+```
+
+å®çè³å¯ä»¥æ¯ç¡éäž²æµïŒäœ å¯ä»¥äžçŽæçºå³éè³æã
+
+## JSON Lines { #json-lines }
+
+åšéäºæ
æ³äžïŒåžžèŠåæ³æ¯å³éã**JSON Lines**ãïŒéæ¯äžç𮿝äžè¡åå
å«äžå JSON ç©ä»¶çæ ŒåŒã
+
+åæç content type ææ¯ `application/jsonl`ïŒèäžæ¯ `application/json`ïŒïŒèæ¬é«å
§å®¹æåéæš£ïŒ
+
+```json
+{"name": "Plumbus", "description": "A multi-purpose household device."}
+{"name": "Portal Gun", "description": "A portal opening device."}
+{"name": "Meeseeks Box", "description": "A box that summons a Meeseeks."}
+```
+
+å®å JSON é£åïŒçžç¶æŒ Python ç listïŒåŸåïŒäœäžåæŒçš `[]` å
èµ·äŸäžŠä»¥ `,` åéé
ç®ïŒå®æ¯æ¯äžè¡åæŸäžå JSON ç©ä»¶ïŒåœŒæ€ä»¥æè¡åå
åéã
+
+/// info
+
+éé»åšæŒäœ çæçšèœå€ éè¡ç¢çè³æïŒåæçšæ¶ç«¯åšæ¶èåäžè¡çè³æã
+
+///
+
+/// note | æè¡çްç¯
+
+ç±æŒæ¯å JSON ç©ä»¶æä»¥æè¡åéïŒå®åçå
§å®¹äžäžèœå
å«å¯Šéçæè¡åå
ïŒäœå¯ä»¥å
å«è·³è«åŸçæè¡ïŒ`\n`ïŒïŒéæ¯ JSON æšæºçäžéšåã
+
+äžééåžžäœ äžéèŠçºæ€ç
©æ±ïŒéäºéœæèªåèçïŒç¹ŒçºåŸäžçå§ãð€
+
+///
+
+## äœ¿çšæ
å¢ { #use-cases }
+
+äœ å¯ä»¥çšéçš®æ¹åŒåŸ **AI LLM** æåã**æ¥èª**æ**éæž¬**äž²æµè³æïŒæä»»äœèœä»¥ **JSON** é
ç®çµæ§åçå
¶ä»åæ
è³æã
+
+/// tip
+
+åŠæäœ æ³äž²æµäºé²äœè³æïŒäŸåŠåœ±åæé³èšïŒè«åèé²éæåïŒ[äž²æµè³æ](../advanced/stream-data.md)ã
+
+///
+
+## äœ¿çš FastAPI äž²æµ JSON Lines { #stream-json-lines-with-fastapi }
+
+èŠçš FastAPI äž²æµ JSON LinesïŒäœ å¯ä»¥åšäœ ç*è·¯åŸæäœåœåŒ*äžæ¹çš `yield` éäžç¢çé
ç®ïŒèäžæ¯çš `return`ã
+
+{* ../../docs_src/stream_json_lines/tutorial001_py310.py ln[1:24] hl[24] *}
+
+åŠæäœ èŠåå³çæ¯å JSON é
ç®åå¥éœæ¯ `Item`ïŒäžå Pydantic æš¡åïŒïŒèäžè©²åœåŒæ¯ asyncïŒäœ å¯ä»¥å°åå³åå¥å®£åçº `AsyncIterable[Item]`ïŒ
+
+{* ../../docs_src/stream_json_lines/tutorial001_py310.py ln[1:24] hl[9:11,22] *}
+
+åŠæäœ å®£åäºåå³åå¥ïŒFastAPI æçšå®äŸé²è¡è³æç**é©è**ãåš OpenAPI äž**æä»¶å**ã**éæ¿Ÿ**ïŒäžŠäœ¿çš Pydantic é²è¡**åºåå**ã
+
+/// tip
+
+ç±æŒ Pydantic æåš **Rust** 端é²è¡åºååïŒå®£ååå³åå¥å¯ç²åŸæ¯æªå®£åæé«åŸå€ç**æèœ**ã
+
+///
+
+### é async ç*è·¯åŸæäœåœåŒ* { #non-async-path-operation-functions }
+
+äœ ä¹å¯ä»¥çšäžè¬ç `def` åœåŒïŒæ²æ `async`ïŒïŒåæš£çš `yield`ã
+
+FastAPI æç¢ºä¿æ£ç¢ºå·è¡ïŒäžæé»å¡äºä»¶è¿Žåã
+
+å çºéçš®æ
æ³äžåœåŒäžæ¯ asyncïŒæ£ç¢ºçåå³åå¥ææ¯ `Iterable[Item]`ïŒ
+
+{* ../../docs_src/stream_json_lines/tutorial001_py310.py ln[27:30] hl[28] *}
+
+### äžå®£ååå³åå¥ { #no-return-type }
+
+äœ ä¹å¯ä»¥çç¥åå³åå¥ãæ€æ FastAPI æäœ¿çš [`jsonable_encoder`](./encoder.md) å°è³æèœæçºå¯åºååçº JSON ç圢åŒïŒç¶åŸä»¥ JSON Lines å³éã
+
+{* ../../docs_src/stream_json_lines/tutorial001_py310.py ln[33:36] hl[34] *}
+
+## 䌺æåšæšæäºä»¶ïŒSSEïŒ { #server-sent-events-sse }
+
+FastAPI ä¹åçæ¯æŽ Server-Sent EventsïŒSSEïŒïŒå®åèæ€çžç¶é¡äŒŒïŒäœå€äºå¹Ÿå现ç¯ãäœ å¯ä»¥åšäžäžç« åžå°æŽå€ïŒ[䌺æåšæšæäºä»¶ïŒSSEïŒ](server-sent-events.md)ãð€
diff --git a/docs/zh-hant/docs/tutorial/testing.md b/docs/zh-hant/docs/tutorial/testing.md
index 0d49fd5d7b..f6bef5d962 100644
--- a/docs/zh-hant/docs/tutorial/testing.md
+++ b/docs/zh-hant/docs/tutorial/testing.md
@@ -1,18 +1,18 @@
# 枬詊 { #testing }
-å€è§äº
StarletteïŒæž¬è©Š **FastAPI** æçšæ¢ç°¡å®å奜çšã
+å€è§äº [Starlette](https://www.starlette.dev/testclient/)ïŒæž¬è©Š **FastAPI** æçšæ¢ç°¡å®å奜çšã
-宿¯åºæŒ
HTTPX æé ïŒè HTTPX çèšèšååèäº RequestsïŒæä»¥çšèµ·äŸéåžžçæãçŽèŠºã
+宿¯åºæŒ [HTTPX](https://www.python-httpx.org) æé ïŒè HTTPX çèšèšååèäº RequestsïŒæä»¥çšèµ·äŸéåžžçæãçŽèŠºã
-åå©å®ïŒäœ å¯ä»¥çŽæ¥çš
pytest äŸæž¬è©Š **FastAPI**ã
+åå©å®ïŒäœ å¯ä»¥çŽæ¥çš [pytest](https://docs.pytest.org/) äŸæž¬è©Š **FastAPI**ã
## äœ¿çš `TestClient` { #using-testclient }
/// info
-èŠäœ¿çš `TestClient`ïŒè«å
å®è£
`httpx`ã
+èŠäœ¿çš `TestClient`ïŒè«å
å®è£ [`httpx`](https://www.python-httpx.org)ã
-è«å
建ç«äžŠåçšäžå[èæ¬ç°å¢](../virtual-environments.md){.internal-link target=_blank}ïŒç¶åŸå®è£ïŒäŸåŠïŒ
+è«å
建ç«äžŠåçšäžå[èæ¬ç°å¢](../virtual-environments.md)ïŒç¶åŸå®è£ïŒäŸåŠïŒ
```console
$ pip install httpx
@@ -52,7 +52,7 @@ $ pip install httpx
/// tip
-åŠæäœ æ³åšæž¬è©ŠäžåŒå«å
¶ä» `async` åœåŒïŒèäžåªæ¯å° FastAPI æçšçŒéè«æ±ïŒäŸåŠé忥çè³æåº«åœåŒïŒïŒè«åèé²éæåžäžç[éåæ¥æž¬è©Š](../advanced/async-tests.md){.internal-link target=_blank}ã
+åŠæäœ æ³åšæž¬è©ŠäžåŒå«å
¶ä» `async` åœåŒïŒèäžåªæ¯å° FastAPI æçšçŒéè«æ±ïŒäŸåŠé忥çè³æåº«åœåŒïŒïŒè«åèé²éæåžäžç[éåæ¥æž¬è©Š](../advanced/async-tests.md)ã
///
@@ -64,7 +64,7 @@ $ pip install httpx
### **FastAPI** æçšæªæ¡ { #fastapi-app-file }
-åèšäœ çæªæ¡çµæ§åŠ[æŽå€§åçæçš](bigger-applications.md){.internal-link target=_blank}æè¿°ïŒ
+åèšäœ çæªæ¡çµæ§åŠ[æŽå€§åçæçš](bigger-applications.md)æè¿°ïŒ
```
.
@@ -142,13 +142,13 @@ $ pip install httpx
* èŠå³éæšé ïŒheadersïŒïŒåš `headers` åæžäžæŸäžå `dict`ã
* å°æŒ CookieïŒcookiesïŒïŒåš `cookies` åæžäžæŸäžå `dict`ã
-éæŒåŠäœæè³æå³çµŠåŸç«¯ïŒäœ¿çš `httpx` æ `TestClient`ïŒïŒæŽå€è³èšè«åè
HTTPX æä»¶ã
+éæŒåŠäœæè³æå³çµŠåŸç«¯ïŒäœ¿çš `httpx` æ `TestClient`ïŒïŒæŽå€è³èšè«åè [HTTPX æä»¶](https://www.python-httpx.org)ã
/// info
è«æ³šæïŒ`TestClient` æ¥æ¶çæ¯å¯èœçº JSON çè³æïŒèäžæ¯ Pydantic modelsã
-åŠæäœ çæž¬è©Šè£¡æäžå Pydantic modelïŒäžŠæ³åšæž¬è©Šææå®çè³æé絊æçšïŒäœ å¯ä»¥äœ¿çš[JSON çžå®¹ç·šç¢Œåš](encoder.md){.internal-link target=_blank}äžä»ç޹ç `jsonable_encoder`ã
+åŠæäœ çæž¬è©Šè£¡æäžå Pydantic modelïŒäžŠæ³åšæž¬è©Šææå®çè³æé絊æçšïŒäœ å¯ä»¥äœ¿çš[JSON çžå®¹ç·šç¢Œåš](encoder.md)äžä»ç޹ç `jsonable_encoder`ã
///
@@ -156,7 +156,7 @@ $ pip install httpx
æ¥äžäŸïŒäœ åªéèŠå®è£ `pytest`ã
-è«å
建ç«äžŠåçšäžå[èæ¬ç°å¢](../virtual-environments.md){.internal-link target=_blank}ïŒç¶åŸå®è£ïŒäŸåŠïŒ
+è«å
建ç«äžŠåçšäžå[èæ¬ç°å¢](../virtual-environments.md)ïŒç¶åŸå®è£ïŒäŸåŠïŒ
diff --git a/docs/zh-hant/docs/virtual-environments.md b/docs/zh-hant/docs/virtual-environments.md
index 74b8b9f8c8..908303dcfd 100644
--- a/docs/zh-hant/docs/virtual-environments.md
+++ b/docs/zh-hant/docs/virtual-environments.md
@@ -22,7 +22,7 @@
éåé é¢å°æäœ åŠäœäœ¿çš**èæ¬ç°å¢**以åäºè§£å®åçå·¥äœåçã
-åŠæäœ èšç«äœ¿çšäžå**å¯ä»¥çºäœ 管çäžåçå·¥å
·**ïŒå
æ¬å®è£ PythonïŒïŒè©Šè©Š
uvã
+åŠæäœ èšç«äœ¿çšäžå**å¯ä»¥çºäœ 管çäžåçå·¥å
·**ïŒå
æ¬å®è£ PythonïŒïŒè©Šè©Š [uv](https://github.com/astral-sh/uv)ã
///
@@ -86,7 +86,7 @@ $ python -m venv .venv
//// tab | `uv`
-åŠæäœ å®è£äº
`uv`ïŒäœ ä¹å¯ä»¥äœ¿çšå®äŸå»ºç«äžåèæ¬ç°å¢ã
+åŠæäœ å®è£äº [`uv`](https://github.com/astral-sh/uv)ïŒäœ ä¹å¯ä»¥äœ¿çšå®äŸå»ºç«äžåèæ¬ç°å¢ã
@@ -150,7 +150,7 @@ $ .venv\Scripts\Activate.ps1
//// tab | Windows Bash
-æè
ïŒåŠæäœ åš Windows äžäœ¿çš BashïŒäŸåŠ
Git BashïŒïŒ
+æè
ïŒåŠæäœ åš Windows äžäœ¿çš BashïŒäŸåŠ [Git Bash](https://gitforwindows.org/)ïŒïŒ
@@ -216,7 +216,7 @@ C:\Users\user\code\awesome-project\.venv\Scripts\python
/// tip
-åŠæäœ äœ¿çš
`uv` äŸå®è£å
§å®¹ïŒèäžæ¯ `pip`ïŒé£éºŒäœ å°±äžéèŠåçŽ `pip`ãð
+åŠæäœ äœ¿çš [`uv`](https://github.com/astral-sh/uv) äŸå®è£å
§å®¹ïŒèäžæ¯ `pip`ïŒé£éºŒäœ å°±äžéèŠåçŽ `pip`ãð
///
@@ -268,7 +268,7 @@ $ python -m ensurepip --upgrade
/// tip
-åŠæäœ äœ¿çš
`uv` äŸå»ºç«èæ¬ç°å¢ïŒå®æèªåçºäœ 宿éåæäœïŒäœ å¯ä»¥è·³ééäžæ¥ãð
+åŠæäœ äœ¿çš [`uv`](https://github.com/astral-sh/uv) äŸå»ºç«èæ¬ç°å¢ïŒå®æèªåçºäœ 宿éåæäœïŒäœ å¯ä»¥è·³ééäžæ¥ãð
///
@@ -340,7 +340,7 @@ $ pip install "fastapi[standard]"
//// tab | `uv`
-åŠæäœ æ
`uv`:
+åŠæäœ æ [`uv`](https://github.com/astral-sh/uv):
@@ -372,7 +372,7 @@ $ pip install -r requirements.txt
//// tab | `uv`
-åŠæäœ æ
`uv`:
+åŠæäœ æ [`uv`](https://github.com/astral-sh/uv):
@@ -416,8 +416,8 @@ Hello World
äŸåŠïŒ
-*
VS Code
-*
PyCharm
+* [VS Code](https://code.visualstudio.com/docs/python/environments#_select-and-activate-an-environment)
+* [PyCharm](https://www.jetbrains.com/help/pycharm/creating-virtual-environment.html)
/// tip
@@ -455,7 +455,7 @@ $ deactivate
## çºä»éºŒèŠäœ¿çšèæ¬ç°å¢ { #why-virtual-environments }
-äœ éèŠå®è£
Python æèœäœ¿çš FastAPIã
+äœ éèŠå®è£ [Python](https://www.python.org/) æèœäœ¿çš FastAPIã
æ¥äžäŸïŒäœ éèŠ**å®è£** FastAPI 以åäœ æ³äœ¿çšçå
¶ä»**å¥ä»¶**ã
@@ -564,7 +564,7 @@ $ pip install "fastapi[standard]"
-éæåŸ
PyPI äžèŒäžåå£çž®æªæ¡ïŒå
¶äžå
å« FastAPI ççšåŒç¢Œã
+éæåŸ [PyPI](https://pypi.org/project/fastapi/) äžèŒäžåå£çž®æªæ¡ïŒå
¶äžå
å« FastAPI ççšåŒç¢Œã
å®éæ**äžèŒ** FastAPI æäŸè³Žçå
¶ä»å¥ä»¶çæªæ¡ã
@@ -627,7 +627,7 @@ $ .venv\Scripts\Activate.ps1
//// tab | Windows Bash
-æè
åŠæäœ åš Windows äžäœ¿çš BashïŒäŸåŠ
Git BashïŒïŒ
+æè
åŠæäœ åš Windows äžäœ¿çš BashïŒäŸåŠ [Git Bash](https://gitforwindows.org/)ïŒïŒ
@@ -639,13 +639,13 @@ $ source .venv/Scripts/activate
////
-éååœä»€æå»ºç«æä¿®æ¹äžäº[ç°å¢è®æž](environment-variables.md){.internal-link target=_blank}ïŒéäºç°å¢è®æžå°åšæ¥äžäŸçæä»€äžå¯çšã
+éååœä»€æå»ºç«æä¿®æ¹äžäº[ç°å¢è®æž](environment-variables.md)ïŒéäºç°å¢è®æžå°åšæ¥äžäŸçæä»€äžå¯çšã
å
¶äžä¹äžæ¯ `PATH` è®æžã
/// tip
-äœ å¯ä»¥åš [ç°å¢è®æž](environment-variables.md#path-environment-variable){.internal-link target=_blank} éšåäºè§£æŽå€éæŒ `PATH` ç°å¢è®æžçå
§å®¹ã
+äœ å¯ä»¥åš [ç°å¢è®æž](environment-variables.md#path-environment-variable) éšåäºè§£æŽå€éæŒ `PATH` ç°å¢è®æžçå
§å®¹ã
///
@@ -819,7 +819,7 @@ Traceback (most recent call last):
-äœåŠæäœ åçšèæ¬ç°å¢äžŠåçš `prisoner-of-askaban` çæ°èæ¬ç°å¢ïŒé£éºŒç¶äœ å·è¡ `python` æïŒå®æäœ¿çš `prisoner-of-askaban` äžèæ¬ç°å¢ç Pythonã
+äœåŠæäœ åçšèæ¬ç°å¢äžŠåçš `prisoner-of-azkaban` çæ°èæ¬ç°å¢ïŒé£éºŒç¶äœ å·è¡ `python` æïŒå®æäœ¿çš `prisoner-of-azkaban` äžèæ¬ç°å¢ç Pythonã
@@ -846,7 +846,7 @@ I solemnly swear ðº
æèš±å€**æ¿ä»£æ¹æ¡**äŸç®¡çèæ¬ç°å¢ãå¥ä»¶äŸè³ŽïŒrequirementsïŒãå°æ¡ã
-ç¶äœ æºå奜䞊æ³èŠäœ¿çšäžåå·¥å
·äŸ**ç®¡çæŽåå°æ¡**ãå¥ä»¶äŸè³Žãèæ¬ç°å¢çïŒå»ºè°äœ å詊
uvã
+ç¶äœ æºå奜䞊æ³èŠäœ¿çšäžåå·¥å
·äŸ**ç®¡çæŽåå°æ¡**ãå¥ä»¶äŸè³Žãèæ¬ç°å¢çïŒå»ºè°äœ å詊 [uv](https://github.com/astral-sh/uv)ã
`uv` å¯ä»¥å·è¡èš±å€æäœïŒå®å¯ä»¥ïŒ
diff --git a/docs/zh/docs/_llm-test.md b/docs/zh/docs/_llm-test.md
index 05c512e99b..2e9e7816e0 100644
--- a/docs/zh/docs/_llm-test.md
+++ b/docs/zh/docs/_llm-test.md
@@ -11,7 +11,7 @@
* æ£æ¥ç¿»è¯æ¯åŠæ£ç¡®ã
* åŠæéèŠïŒæ¹è¿äœ çè¯èšç¹å®æç€ºãéçšæç€ºïŒæè±æææ¡£ã
* ç¶åæåšä¿®æ£ç¿»è¯äžå©äœçé®é¢ïŒç¡®ä¿è¿æ¯äžäžªäŒç§çè¯æã
-* éæ°ç¿»è¯ïŒåšå·²æçäŒç§è¯æåºç¡äžè¿è¡ãçæ³æ
嵿¯ LLM äžåå¯¹è¯æåä»»äœæŽæ¹ãè¿æå³çéçšæç€ºåäœ çè¯èšç¹å®æç€ºå·²ç»å°œå¯èœå®åïŒææ¶å®ä»äŒåäžäºçäŒŒéæºçæ¹åšïŒåå æ¯
LLM äžæ¯ç¡®å®æ§ç®æ³ïŒã
+* éæ°ç¿»è¯ïŒåšå·²æçäŒç§è¯æåºç¡äžè¿è¡ãçæ³æ
嵿¯ LLM äžåå¯¹è¯æåä»»äœæŽæ¹ãè¿æå³çéçšæç€ºåäœ çè¯èšç¹å®æç€ºå·²ç»å°œå¯èœå®åïŒææ¶å®ä»äŒåäžäºçäŒŒéæºçæ¹åšïŒåå æ¯[LLM äžæ¯ç¡®å®æ§ç®æ³](https://doublespeak.chat/#/handbook#deterministic-output)ïŒã
æµè¯åŠäžïŒ
@@ -169,15 +169,15 @@ Some text
éŸæ¥ææ¬åºè¢«ç¿»è¯ïŒéŸæ¥å°ååºä¿æäžåïŒ
* [éŸæ¥å°äžé¢çæ é¢](#code-snippets)
-* [å
éšéŸæ¥](index.md#installation){.internal-link target=_blank}
-*
å€éšéŸæ¥
-*
æ ·åŒéŸæ¥
-*
èæ¬éŸæ¥
-*
åŸçéŸæ¥
+* [å
éšéŸæ¥](index.md#installation)
+* [å€éšéŸæ¥](https://sqlmodel.tiangolo.com/)
+* [æ ·åŒéŸæ¥](https://fastapi.tiangolo.com/css/styles.css)
+* [èæ¬éŸæ¥](https://fastapi.tiangolo.com/js/logic.js)
+* [åŸçéŸæ¥](https://fastapi.tiangolo.com/img/foo.jpg)
éŸæ¥ææ¬åºè¢«ç¿»è¯ïŒäžéŸæ¥å°ååºæå对åºçè¯æé¡µé¢ïŒ
-*
FastAPI éŸæ¥
+* [FastAPI éŸæ¥](https://fastapi.tiangolo.com/zh/)
////
@@ -501,255 +501,3 @@ Hello again.
åè§äŸåŠ `docs/de/llm-prompt.md` äžç `### List of English terms and their preferred German translations` éšåã
////
-
-////
-
-ç¿»è¯ïŒæ¯è¯ïŒå¯¹ç
§ïŒ
-
-//// tab | æµè¯ïŒè¯æïŒ
-
-* äœ
-* äœ ç
-
-* äŸåŠ
-* çç
-
-* å° `foo` äœäžº `int`
-* å° `bar` äœäžº `str`
-* å° `baz` äœäžº `list`
-
-* æçš - çšæ·æå
-* é«çº§çšæ·æå
-* SQLModel ææ¡£
-* API ææ¡£
-* èªåšææ¡£
-
-* æ°æ®ç§åŠ
-* 深床åŠä¹
-* æºåšåŠä¹
-* äŸèµæ³šå
¥
-* HTTP åºæ¬è®€è¯
-* HTTP æèŠè®€è¯
-* ISO æ ŒåŒ
-* JSON Schema æ å
-* JSON æš¡åŒ
-* æš¡åŒå®ä¹
-* å¯ç æµ
-* ç§»åšç«¯
-
-* å·²åŒçš
-* 讟计ç
-* æ æ
-* 峿¶
-* æ åç
-* é»è®€ç
-* åºå倧å°å
-* äžåºå倧å°å
-
-* 䞺åºçšæäŸæå¡
-* äžºé¡µé¢æäŸæå¡
-
-* åºçš
-* åºçšçšåº
-
-* 请æ±
-* ååº
-* é误ååº
-
-* è·¯åŸæäœ
-* è·¯åŸæäœè£
饰åš
-* è·¯åŸæäœåœæ°
-
-* äž»äœ
-* 请æ±äœ
-* ååºäœ
-* JSON äœ
-* 衚åäœ
-* æä»¶äœ
-* åœæ°äœ
-
-* åæ°
-* 请æ±äœåæ°
-* è·¯åŸåæ°
-* æ¥è¯¢åæ°
-* Cookie åæ°
-* Header åæ°
-* 衚ååæ°
-* åœæ°åæ°
-
-* äºä»¶
-* å¯åšäºä»¶
-* æå¡åšçå¯åš
-* å
³éäºä»¶
-* çåœåšæäºä»¶
-
-* å€çåš
-* äºä»¶å€çåš
-* åŒåžžå€çåš
-* å€ç
-
-* æš¡å
-* Pydantic æš¡å
-* æ°æ®æš¡å
-* æ°æ®åºæš¡å
-* è¡šåæš¡å
-* æš¡å对象
-
-* ç±»
-* åºç±»
-* ç¶ç±»
-* åç±»
-* åç±»
-* å
åŒç±»
-* ç±»æ¹æ³
-
-* 请æ±å€Ž
-* 请æ±å€Ž
-* ææå€Ž
-* `Authorization` 倎
-* 蜬å倎
-
-* äŸèµæ³šå
¥ç³»ç»
-* äŸèµ
-* å¯äŸèµå¯¹è±¡
-* äŸèµé¡¹
-
-* I/O åé
-* CPU åé
-* å¹¶å
-* å¹¶è¡
-* å€è¿çš
-
-* ç¯å¢åé
-* ç¯å¢åé
-* `PATH`
-* `PATH` åé
-
-* 讀è¯
-* è®€è¯æäŸæ¹
-* ææ
-* ææè¡šå
-* æææäŸæ¹
-* çšæ·è¿è¡è®€è¯
-* ç³»ç»å¯¹çšæ·è¿è¡è®€è¯
-
-* CLI
-* åœä»€è¡çé¢
-
-* æå¡åš
-* 客æ·ç«¯
-
-* äºæå¡æäŸå
-* äºæå¡
-
-* åŒå
-* åŒåé¶æ®µ
-
-* dict
-* åå
ž
-* æäžŸ
-* æäžŸ
-* æäžŸæå
-
-* çŒç åš
-* è§£ç åš
-* çŒç
-* è§£ç
-
-* åŒåžž
-* æåº
-
-* 衚蟟åŒ
-* è¯å¥
-
-* å端
-* å端
-
-* GitHub 讚论
-* GitHub Issue
-
-* æ§èœ
-* æ§èœäŒå
-
-* è¿åç±»å
-* è¿ååŒ
-
-* å®å
š
-* å®å
𿹿¡
-
-* ä»»å¡
-* åå°ä»»å¡
-* ä»»å¡åœæ°
-
-* æš¡æ¿
-* æš¡æ¿åŒæ
-
-* ç±»åæ³šè§£
-* ç±»åæç€º
-
-* æå¡åš worker
-* Uvicorn worker
-* Gunicorn worker
-* worker è¿çš
-* worker ç±»
-* å·¥äœèŽèœœ
-
-* éšçœ²
-* éšçœ²
-
-* SDK
-* 蜯件åŒåå·¥å
·å
-
-* `APIRouter`
-* `requirements.txt`
-* Bearer Token
-* ç Žåæ§åæŽ
-* Bug
-* æé®
-* å¯è°çšå¯¹è±¡
-* 代ç
-* æäº€
-* äžäžæç®¡çåš
-* åçš
-* æ°æ®åºäŒè¯
-* ç£ç
-* åå
-* åŒæ
-* å X
-* HTTP GET æ¹æ³
-* 项
-* åº
-* çåœåšæ
-* é
-* äžéŽä»¶
-* ç§»åšåºçš
-* æš¡å
-* æèœœ
-* çœç»
-* æº
-* èŠç
-* èŽèœœ
-* å€çåš
-* 屿§
-* 代ç
-* Pull Request
-* æ¥è¯¢
-* RAM
-* è¿çšæºåš
-* ç¶æç
-* å笊䞲
-* æ çŸ
-* Web æ¡æ¶
-* éé
笊
-* è¿å
-* æ ¡éª
-
-////
-
-//// tab | ä¿¡æ¯ïŒè¯æïŒ
-
-æ€æž
忝äžå®æŽäžéè§èæ§çïŒååºïŒäž»èŠæ¯ïŒææ¡£äžåºç°çææ¯æ¯è¯ã宿å©äºæç€ºè¯è®Ÿè®¡è
ç¡®å®åªäºæ¯è¯éèŠé¢å€çæåŒãäŸåŠåœ LLM æ»æ¯ææŽå¥œçè¯æ³æ¹å次äŒè¯æ³ïŒæåšäœ çè¯èšäžéŸä»¥æ£ç¡®å圢æ¶ã
-
-ä¹å¯åè§ `docs/de/llm-prompt.md` äžç `### List of English terms and their preferred German translations` éšåã
-
-////
diff --git a/docs/zh/docs/advanced/additional-responses.md b/docs/zh/docs/advanced/additional-responses.md
index aa3d22d1c7..365ba3db4f 100644
--- a/docs/zh/docs/advanced/additional-responses.md
+++ b/docs/zh/docs/advanced/additional-responses.md
@@ -243,5 +243,5 @@ new_dict = {**old_dict, "new key": "new value"}
èŠæ¥çååºäžç©¶ç«å¯ä»¥å
å«ä»ä¹ïŒäœ å¯ä»¥æ¥ç OpenAPI è§èäžç以äžéšåïŒ
-*
OpenAPI Responses 对象ïŒå®å
å« `Response Object`ã
-*
OpenAPI Response 对象ïŒäœ å¯ä»¥æè¿éçä»»äœå
å®¹çŽæ¥å
å«å° `responses` åæ°äžçæ¯äžªååºéãå
æ¬ `description`ã`headers`ã`content`ïŒåšè¿é声æäžåçåªäœç±»åå JSON SchemasïŒïŒä»¥å `links`ã
+* [OpenAPI Responses 对象](https://github.com/OAI/OpenAPI-Specification/blob/master/versions/3.1.0.md#responses-object)ïŒå®å
å« `Response Object`ã
+* [OpenAPI Response 对象](https://github.com/OAI/OpenAPI-Specification/blob/master/versions/3.1.0.md#response-object)ïŒäœ å¯ä»¥æè¿éçä»»äœå
å®¹çŽæ¥å
å«å° `responses` åæ°äžçæ¯äžªååºéãå
æ¬ `description`ã`headers`ã`content`ïŒåšè¿é声æäžåçåªäœç±»åå JSON SchemasïŒïŒä»¥å `links`ã
diff --git a/docs/zh/docs/advanced/additional-status-codes.md b/docs/zh/docs/advanced/additional-status-codes.md
index 7eeffaf532..af212ad8b1 100644
--- a/docs/zh/docs/advanced/additional-status-codes.md
+++ b/docs/zh/docs/advanced/additional-status-codes.md
@@ -16,7 +16,7 @@
{* ../../docs_src/additional_status_codes/tutorial001_an_py310.py hl[4,25] *}
-/// warning | èŠå
+/// warning
åœäœ çŽæ¥è¿åäžäžªåäžé¢äŸåäžç `Response` 对象æ¶ïŒå®äŒçŽæ¥è¿åã
@@ -26,7 +26,7 @@
///
-/// note | 泚æ
+/// note | ææ¯ç»è
äœ ä¹å¯ä»¥äœ¿çš `from starlette.responses import JSONResponse`ãã
@@ -38,4 +38,4 @@
åŠæäœ çŽæ¥è¿åé¢å€çç¶æç åååºïŒå®ä»¬äžäŒå
å«åš OpenAPI æ¹æ¡ïŒAPI ææ¡£ïŒäžïŒå 䞺 FastAPI æ²¡åæ³é¢å
ç¥éäœ èŠè¿åä»ä¹ã
-äœæ¯äœ å¯ä»¥äœ¿çš [é¢å€çååº](additional-responses.md){.internal-link target=_blank} åšä»£ç äžè®°åœè¿äºå
容ã
+äœæ¯äœ å¯ä»¥äœ¿çš [é¢å€çååº](additional-responses.md) åšä»£ç äžè®°åœè¿äºå
容ã
diff --git a/docs/zh/docs/advanced/advanced-dependencies.md b/docs/zh/docs/advanced/advanced-dependencies.md
index a547e88814..edaf964c93 100644
--- a/docs/zh/docs/advanced/advanced-dependencies.md
+++ b/docs/zh/docs/advanced/advanced-dependencies.md
@@ -132,7 +132,7 @@ checker(q="somequery")
è¿æ ·äŒè¯äŒéæŸæ°æ®åºè¿æ¥ïŒè®©å
¶ä»è¯·æ±å¯ä»¥äœ¿çšã
-åŠæäœ è¿æå
¶ä»éèŠåš `yield` äŸèµé¡¹äžæåéåºççšäŸïŒè¯·å建äžäžª
GitHub 讚论é®é¢ïŒè¯Žæäœ çå
·äœçšäŸä»¥åäžºäœæåå
³éäŒå¯¹äœ æåž®å©ã
+åŠæäœ è¿æå
¶ä»éèŠåš `yield` äŸèµé¡¹äžæåéåºççšäŸïŒè¯·å建äžäžª [GitHub 讚论é®é¢](https://github.com/fastapi/fastapi/discussions/new?category=questions)ïŒè¯Žæäœ çå
·äœçšäŸä»¥åäžºäœæåå
³éäŒå¯¹äœ æåž®å©ã
åŠæç¡®ææåççšäŸéèŠæåå
³éïŒæäŒèèæ°å¢äžç§éæ©æ§å¯çšæåå
³éçæ¹åŒã
@@ -144,7 +144,7 @@ checker(q="somequery")
### åå°ä»»å¡äžåžŠ `yield` çäŸèµé¡¹ïŒææ¯ç»èïŒ { #background-tasks-and-dependencies-with-yield-technical-details }
-åš FastAPI 0.106.0 ä¹åïŒ`yield` ä¹åæåºåŒåžžæ¯äžå¯è¡çïŒå 䞺垊 `yield` çäŸèµé¡¹äžçéåºä»£ç äŒåšååºåéä¹åææ§è¡ïŒæ€æ¶[åŒåžžå€çåš](../tutorial/handling-errors.md#install-custom-exception-handlers){.internal-link target=_blank}å·²ç»è¿è¡å®æ¯ã
+åš FastAPI 0.106.0 ä¹åïŒ`yield` ä¹åæåºåŒåžžæ¯äžå¯è¡çïŒå 䞺垊 `yield` çäŸèµé¡¹äžçéåºä»£ç äŒåšååºåéä¹åææ§è¡ïŒæ€æ¶[åŒåžžå€çåš](../tutorial/handling-errors.md#install-custom-exception-handlers)å·²ç»è¿è¡å®æ¯ã
ä¹æä»¥è¿æ ·è®Ÿè®¡ïŒäž»èŠæ¯äžºäºå
讞åšåå°ä»»å¡äžç»§ç»äœ¿çšäŸèµé¡¹éè¿ `yield`â产åºâç对象ïŒå 䞺éåºä»£ç äŒåšåå°ä»»å¡å®æä¹åææ§è¡ã
diff --git a/docs/zh/docs/advanced/async-tests.md b/docs/zh/docs/advanced/async-tests.md
index 16b8a8c813..2030bb11e2 100644
--- a/docs/zh/docs/advanced/async-tests.md
+++ b/docs/zh/docs/advanced/async-tests.md
@@ -16,11 +16,11 @@
`TestClient` åšå
éšéè¿äžäºâéæ³âæäœïŒäœ¿åŸæšå¯ä»¥åšæ®éç `def` æµè¯åœæ°äžè°çšåŒæ¥ç FastAPI åºçšçšåºïŒå¹¶äœ¿çšæ åç pytestãäœåœæä»¬åšåŒæ¥åœæ°äžäœ¿çšå®æ¶ïŒè¿ç§âéæ³âå°±äžåçæäºãç±äºæµè¯ä»¥åŒæ¥æ¹åŒè¿è¡ïŒæä»¬æ æ³åšæµè¯åœæ°äžç»§ç»äœ¿çš `TestClient`ã
-`TestClient` æ¯åºäº
HTTPX çã幞è¿çæ¯ïŒæä»¬å¯ä»¥çŽæ¥äœ¿çšå®æ¥æµè¯APIã
+`TestClient` æ¯åºäº [HTTPX](https://www.python-httpx.org) çã幞è¿çæ¯ïŒæä»¬å¯ä»¥çŽæ¥äœ¿çšå®æ¥æµè¯ APIã
## ç€ºäŸ { #example }
-䞟䞪ç®åçäŸåïŒè®©æä»¬æ¥çäžäžª[æŽå€§çåºçš](../tutorial/bigger-applications.md){.internal-link target=_blank}å[æµè¯](../tutorial/testing.md){.internal-link target=_blank}äžæè¿°ç类䌌æä»¶ç»æïŒ
+䞟䞪ç®åçäŸåïŒè®©æä»¬æ¥çäžäžªäž[æŽå€§çåºçš](../tutorial/bigger-applications.md)å[æµè¯](../tutorial/testing.md)äžæè¿°ç类䌌æä»¶ç»æïŒ
```
.
@@ -84,7 +84,7 @@ response = client.get('/')
/// warning | èŠå
-åŠææšçåºçšçšåºäŸèµäºçåœåšæäºä»¶ïŒ `AsyncClient` å°äžäŒè§Šåè¿äºäºä»¶ã䞺äºç¡®ä¿å®ä»¬è¢«è§ŠåïŒè¯·äœ¿çš
florimondmanca/asgi-lifespan äžç `LifespanManager` ã
+åŠææšçåºçšçšåºäŸèµäºçåœåšæäºä»¶ïŒ `AsyncClient` å°äžäŒè§Šåè¿äºäºä»¶ã䞺äºç¡®ä¿å®ä»¬è¢«è§ŠåïŒè¯·äœ¿çš [florimondmanca/asgi-lifespan](https://github.com/florimondmanca/asgi-lifespan#usage) äžç `LifespanManager` ã
///
@@ -94,6 +94,6 @@ response = client.get('/')
/// tip | æç€º
-åŠææšåšæµè¯çšåºäžéæåŒæ¥åœæ°è°çšçæ¶åéå°äžäžª `RuntimeError: Task attached to a different loop` çæ¥éïŒäŸåŠïŒäœ¿çš
MongoDB ç MotorClient æ¶ïŒïŒè¯·è®°äœïŒåªèœåšåŒæ¥åœæ°äžå®äŸåéèŠäºä»¶åŸªç¯ç对象ïŒäŸåŠåš `@app.on_event("startup")` åè°äžåå§åã
+åŠææšåšæµè¯çšåºäžéæåŒæ¥åœæ°è°çšçæ¶åéå°äžäžª `RuntimeError: Task attached to a different loop` çæ¥éïŒäŸåŠïŒäœ¿çš [MongoDB ç MotorClient](https://stackoverflow.com/questions/41584243/runtimeerror-task-attached-to-a-different-loop) æ¶ïŒïŒè¯·è®°äœïŒåªèœåšåŒæ¥åœæ°äžå®äŸåéèŠäºä»¶åŸªç¯ç对象ïŒäŸåŠåš `@app.on_event("startup")` åè°äžåå§åã
///
diff --git a/docs/zh/docs/advanced/behind-a-proxy.md b/docs/zh/docs/advanced/behind-a-proxy.md
index 3ccc65f292..b3c91eb06a 100644
--- a/docs/zh/docs/advanced/behind-a-proxy.md
+++ b/docs/zh/docs/advanced/behind-a-proxy.md
@@ -16,9 +16,9 @@
è¿äºä»£ççžå
³ç请æ±å€Žå
æ¬ïŒ
--
X-Forwarded-For
--
X-Forwarded-Proto
--
X-Forwarded-Host
+* [X-Forwarded-For](https://developer.mozilla.org/en-US/docs/Web/HTTP/Reference/Headers/X-Forwarded-For)
+* [X-Forwarded-Proto](https://developer.mozilla.org/en-US/docs/Web/HTTP/Reference/Headers/X-Forwarded-Proto)
+* [X-Forwarded-Host](https://developer.mozilla.org/en-US/docs/Web/HTTP/Reference/Headers/X-Forwarded-Host)
///
@@ -60,7 +60,7 @@ https://mysuperapp.com/items/
/// tip | æç€º
-åŠæäœ æ³äºè§£æŽå€å
³äº HTTPS çå
å®¹ïŒæ¥çæåïŒ[å
³äº HTTPS](../deployment/https.md){.internal-link target=_blank}ã
+åŠæäœ æ³äºè§£æŽå€å
³äº HTTPS çå
å®¹ïŒæ¥çæåïŒ[å
³äº HTTPS](../deployment/https.md)ã
///
@@ -228,7 +228,7 @@ $ fastapi run main.py --forwarded-allow-ips="*" --root-path /api/v1
请泚æïŒæå¡åšïŒUvicornïŒäžäŒçšè¿äžª `root_path` åå«çäºæ
ïŒåªäŒæå®äŒ ç»åºçšã
-äœæ¯ïŒåŠæäœ çšæµè§åšæåŒ
http://127.0.0.1:8000/appïŒäœ äŒçå°æ£åžžçååºïŒ
+äœæ¯ïŒåŠæäœ çšæµè§åšæåŒ [http://127.0.0.1:8000/app](http://127.0.0.1:8000/app)ïŒäœ äŒçå°æ£åžžçååºïŒ
```JSON
{
@@ -251,9 +251,9 @@ Uvicorn äŒææä»£ç以 `http://127.0.0.1:8000/app` è®¿é® UvicornïŒèåš
## äœ¿çš Traefik è¿è¡æ¬å°æµè¯ { #testing-locally-with-traefik }
-äœ å¯ä»¥åŸå®¹æå°äœ¿çš
Traefik åšæ¬å°è¿è¡äžäžªç§»é€è·¯åŸåçŒçå®éªã
+äœ å¯ä»¥åŸå®¹æå°äœ¿çš [Traefik](https://docs.traefik.io/) åšæ¬å°è¿è¡äžäžªç§»é€è·¯åŸåçŒçå®éªã
-
äžèœœ TraefikïŒå®æ¯äžäžªåç¬çäºè¿å¶æä»¶ïŒäœ å¯ä»¥è§£åå猩å
å¹¶çŽæ¥åšç»ç«¯äžè¿è¡ã
+[äžèœœ Traefik](https://github.com/containous/traefik/releases)ïŒå®æ¯äžäžªåç¬çäºè¿å¶æä»¶ïŒäœ å¯ä»¥è§£åå猩å
å¹¶çŽæ¥åšç»ç«¯äžè¿è¡ã
ç¶åå建äžäžª `traefik.toml` æä»¶ïŒå
容åŠäžïŒ
@@ -330,7 +330,7 @@ $ fastapi run main.py --forwarded-allow-ips="*" --root-path /api/v1
### æ¥çååº { #check-the-responses }
-ç°åšïŒåŠæäœ è®¿é® Uvicorn 端å£å¯¹åºç URLïŒ
http://127.0.0.1:8000/appïŒäœ äŒçå°æ£åžžååºïŒ
+ç°åšïŒåŠæäœ è®¿é® Uvicorn 端å£å¯¹åºç URLïŒ[http://127.0.0.1:8000/app](http://127.0.0.1:8000/app)ïŒäœ äŒçå°æ£åžžååºïŒ
```JSON
{
@@ -345,7 +345,7 @@ $ fastapi run main.py --forwarded-allow-ips="*" --root-path /api/v1
///
-ç°åšæåŒå
å«è·¯åŸåçŒãäœ¿çš Traefik 端å£ç URLïŒ
http://127.0.0.1:9999/api/v1/appã
+ç°åšæåŒå
å«è·¯åŸåçŒãäœ¿çš Traefik 端å£ç URLïŒ[http://127.0.0.1:9999/api/v1/app](http://127.0.0.1:9999/api/v1/app)ã
æä»¬åŸå°çžåçååºïŒ
@@ -370,13 +370,13 @@ $ fastapi run main.py --forwarded-allow-ips="*" --root-path /api/v1
访é®åºçšçâ宿¹âæ¹åŒåºè¯¥æ¯éè¿æä»¬å®ä¹ç垊æè·¯åŸåçŒç代çãå æ€ïŒæ£åŠé¢æç飿 ·ïŒåŠæäœ å°è¯äžåžŠè·¯åŸåçŒãçŽæ¥ç± Uvicorn æäŸçææ¡£çé¢ïŒå®å°æ æ³å·¥äœïŒå äžºå®ææéè¿ä»£ç访é®ã
-äœ å¯ä»¥åš
http://127.0.0.1:8000/docs æ¥çïŒ
+äœ å¯ä»¥åš [http://127.0.0.1:8000/docs](http://127.0.0.1:8000/docs) æ¥çïŒ

äœåŠææä»¬åšâ宿¹âURLïŒä»£ç端å£äžº `9999`ïŒç `/api/v1/docs` è®¿é®ææ¡£çé¢ïŒå®å°±èœæ£åžžå·¥äœïŒð
-äœ å¯ä»¥åš
http://127.0.0.1:9999/api/v1/docs æ¥çïŒ
+äœ å¯ä»¥åš [http://127.0.0.1:9999/api/v1/docs](http://127.0.0.1:9999/api/v1/docs) æ¥çïŒ

@@ -433,7 +433,7 @@ $ fastapi run main.py --forwarded-allow-ips="*" --root-path /api/v1
///
-åš
http://127.0.0.1:9999/api/v1/docs çææ¡£çé¢äžïŒå®çèµ·æ¥æ¯è¿æ ·çïŒ
+åšææ¡£çé¢ [http://127.0.0.1:9999/api/v1/docs](http://127.0.0.1:9999/api/v1/docs) äžïŒå®çèµ·æ¥æ¯è¿æ ·çïŒ

@@ -461,6 +461,6 @@ OpenAPI è§èäžç `servers` 屿§æ¯å¯éçã
## æèœœååºçš { #mounting-a-sub-application }
-åŠæäœ éèŠåšäœ¿çšåžŠæ `root_path` çä»£çæ¶æèœœäžäžªååºçšïŒåè§ [ååºçš - æèœœ](sub-applications.md){.internal-link target=_blank}ïŒïŒäœ å¯ä»¥å颿ç飿 ·æ£åžžæäœã
+åŠæäœ éèŠåšäœ¿çšåžŠæ `root_path` çä»£çæ¶æèœœäžäžªååºçšïŒåè§ [ååºçš - æèœœ](sub-applications.md)ïŒïŒäœ å¯ä»¥å颿ç飿 ·æ£åžžæäœã
FastAPI äŒåšå
éšæºèœå°äœ¿çš `root_path`ïŒå æ€å®å¯ä»¥çŽæ¥æ£åžžå·¥äœãâš
diff --git a/docs/zh/docs/advanced/custom-response.md b/docs/zh/docs/advanced/custom-response.md
index 7c19b73fbc..ce595572dd 100644
--- a/docs/zh/docs/advanced/custom-response.md
+++ b/docs/zh/docs/advanced/custom-response.md
@@ -1,52 +1,36 @@
# èªå®ä¹ååº - HTMLãæµãæä»¶ç { #custom-response-html-stream-file-others }
-**FastAPI** é»è®€äŒäœ¿çš `JSONResponse` è¿åååºã
+é»è®€æ
åµäžïŒ**FastAPI** äŒè¿å JSON ååºã
-äœ å¯ä»¥éè¿çŽæ¥è¿å `Response` æ¥é蜜å®ïŒåè§ [çŽæ¥è¿åååº](response-directly.md){.internal-link target=_blank}ã
+äœ å¯ä»¥ååš [çŽæ¥è¿åååº](response-directly.md) äžé£æ ·ïŒçŽæ¥è¿å `Response` æ¥é蜜å®ã
-äœåŠæäœ çŽæ¥è¿åäžäžª `Response`ïŒæå
¶ä»»æåç±»ïŒæ¯åŠ `JSONResponse`ïŒïŒè¿åæ°æ®äžäŒèªåšèœ¬æ¢ïŒå³äœ¿äœ 声æäº `response_model`ïŒïŒä¹äžäŒèªåšçæææ¡£ïŒäŸåŠïŒåšçæç OpenAPI äžïŒHTTP 倎 `Content-Type` éçç¹å®ãåªäœç±»åãäžäŒè¢«å
å«ïŒã
+äœåŠæäœ çŽæ¥è¿åäžäžª `Response`ïŒæå
¶ä»»æåç±»ïŒæ¯åŠ `JSONResponse`ïŒïŒè¿åçæ°æ®äžäŒèªåšèœ¬æ¢ïŒå³äœ¿äœ 声æäº `response_model`ïŒïŒä¹äžäŒèªåšçæææ¡£ïŒäŸåŠïŒåšçæç OpenAPI äžïŒHTTP 倎 `Content-Type` éçç¹å®ãåªäœç±»åãäžäŒè¢«å
å«ïŒã
äœ è¿å¯ä»¥åš *è·¯åŸæäœè£
饰åš* äžéè¿ `response_class` 忰声æèŠäœ¿çšç `Response`ïŒäŸåŠä»»æ `Response` åç±»ïŒã
äœ ä» *è·¯åŸæäœåœæ°* äžè¿åçå
容å°è¢«æŸåšè¯¥ `Response` äžã
-å¹¶äžåŠæè¯¥ `Response` æäžäžª JSON åªäœç±»åïŒ`application/json`ïŒïŒæ¯åŠäœ¿çš `JSONResponse` æ `UJSONResponse` çæ¶åïŒè¿åçæ°æ®å°äœ¿çšäœ åšè·¯åŸæäœè£
饰åšäžå£°æçä»»äœ Pydantic ç `response_model` èªåšèœ¬æ¢ïŒåè¿æ»€ïŒã
-
/// note | 泚æ
-åŠæäœ äœ¿çšäžåžŠæä»»äœåªäœç±»åçååºç±»ïŒFastAPI äŒè®€äžºäœ çååºæ²¡æä»»äœå
å®¹ïŒæä»¥äžäŒåšçæç OpenAPI ææ¡£äžè®°åœååºæ ŒåŒã
+åŠæäœ äœ¿çšäžåžŠæåªäœç±»åçååºç±»ïŒFastAPI äŒè®€äžºäœ çååºæ²¡æä»»äœå
å®¹ïŒæä»¥äžäŒåšçæç OpenAPI ææ¡£äžè®°åœååºæ ŒåŒã
///
-## äœ¿çš `ORJSONResponse` { #use-orjsonresponse }
-
-äŸåŠïŒåŠæäœ éèŠå抚æ§èœïŒäœ å¯ä»¥å®è£
并䜿çš
`orjson` å¹¶å°ååºè®Ÿçœ®äžº `ORJSONResponse`ã
-
-富å
¥äœ æ³èŠäœ¿çšç `Response` ç±»ïŒåç±»ïŒç¶ååš *è·¯åŸæäœè£
饰åš* äžå£°æå®ã
-
-对äºèŸå€§çååºïŒçŽæ¥è¿åäžäžª `Response` äŒæ¯è¿åäžäžªåå
žå¿«åŸå€ã
-
-è¿æ¯å 䞺é»è®€æ
åµäžïŒFastAPI äŒæ£æ¥å
¶äžçæ¯äžé¡¹å¹¶ç¡®ä¿å®å¯ä»¥è¢«åºåå䞺 JSONïŒäœ¿çšæçšäžè§£éççžå [JSON å
Œå®¹çŒç åš](../tutorial/encoder.md){.internal-link target=_blank}ãè¿æ£æ¯å®å
è®žäœ è¿åãä»»æå¯¹è±¡ãçåå ïŒäŸåŠæ°æ®åºæš¡åã
-
-äœåŠæäœ ç¡®å®äœ è¿åçå
容æ¯ãå¯ä»¥çš JSON åºååãçïŒäœ å¯ä»¥å°å®çŽæ¥äŒ ç»ååºç±»ïŒä»èé¿å
åšäŒ ç»ååºç±»ä¹åå
éè¿ `jsonable_encoder` 垊æ¥çé¢å€åŒéã
+## JSON ååº { #json-responses }
-{* ../../docs_src/custom_response/tutorial001b_py310.py hl[2,7] *}
+é»è®€æ
åµäž FastAPI è¿å JSON ååºã
-/// info | ä¿¡æ¯
-
-åæ° `response_class` ä¹äŒçšæ¥å®ä¹ååºçãåªäœç±»åãã
+åŠæäœ å£°æäºäžäžª[ååºæš¡å](../tutorial/response-model.md)ïŒFastAPI äŒäœ¿çš Pydantic å°æ°æ®åºåå䞺 JSONã
-åšè¿äžªäŸåäžïŒHTTP 倎ç `Content-Type` äŒè¢«è®Ÿçœ®æ `application/json`ã
+åŠæäœ æ²¡æå£°æååºæš¡åïŒFastAPI äŒäœ¿çš [JSON å
Œå®¹çŒç åš](../tutorial/encoder.md) äžè§£éç `jsonable_encoder`ïŒå¹¶æç»ææŸè¿äžäžª `JSONResponse`ã
-å¹¶äžåš OpenAPI ææ¡£äžä¹äŒè¿æ ·è®°åœã
+åŠæäœ åš `response_class` äžå£°æäºäžäžª JSON åªäœç±»åïŒ`application/json`ïŒçç±»ïŒæ¯åŠ `JSONResponse`ïŒïŒäœ è¿åçæ°æ®äŒäœ¿çšäœ åš *è·¯åŸæäœè£
饰åš* äžå£°æçä»»æ Pydantic `response_model` èªåšèœ¬æ¢ïŒåè¿æ»€ïŒãäœæ°æ®äžäŒç± Pydantic åºåå䞺 JSON åèïŒèæ¯å
çš `jsonable_encoder` 蜬æ¢åäŒ ç» `JSONResponse`ïŒç±å®äœ¿çš Python æ å JSON åºåºåå䞺åèã
-///
+### JSON æ§èœ { #json-performance }
-/// tip | æç€º
+ç®èèšä¹ïŒåŠæäœ æ³èŠè·åŸæå€§æ§èœïŒè¯·äœ¿çš[ååºæš¡å](../tutorial/response-model.md)ïŒå¹¶äžäžèŠåš *è·¯åŸæäœè£
饰åš* äžå£°æ `response_class`ã
-`ORJSONResponse` ç®ååªåš FastAPI äžå¯çšïŒèåš Starlette äžäžå¯çšã
-
-///
+{* ../../docs_src/response_model/tutorial001_01_py310.py ln[15:17] hl[16] *}
## HTML ååº { #html-response }
@@ -69,7 +53,7 @@
### è¿åäžäžª `Response` { #return-a-response }
-æ£åŠäœ åš [çŽæ¥è¿åååº](response-directly.md){.internal-link target=_blank} äžäºè§£å°çïŒäœ ä¹å¯ä»¥éè¿çŽæ¥è¿åååºåš *è·¯åŸæäœ* äžçŽæ¥é蜜ååºã
+æ£åŠäœ åš [çŽæ¥è¿åååº](response-directly.md) äžäºè§£å°çïŒäœ ä¹å¯ä»¥éè¿çŽæ¥è¿åååºåš *è·¯åŸæäœ* äžçŽæ¥é蜜ååºã
åäžé¢äžæ ·çäŸåïŒè¿åäžäžª `HTMLResponse` çèµ·æ¥å¯èœæ¯è¿æ ·ïŒ
@@ -154,37 +138,11 @@ FastAPIïŒå®é
äžæ¯ StarletteïŒå°èªåšå
å« Content-Length ç倎ãå®
åŠäžææè¿°ïŒè¿æ¯ **FastAPI** äžäœ¿çšçé»è®€ååºã
-### `ORJSONResponse` { #orjsonresponse }
-
-åŠäžææè¿°ïŒ`ORJSONResponse` æ¯äžäžªäœ¿çš
`orjson` çå¿«éçå¯é JSON ååºã
-
-/// info | ä¿¡æ¯
-
-è¿éèŠå
å®è£
`orjson`ïŒäŸåŠäœ¿çš `pip install orjson`ã
-
-///
-
-### `UJSONResponse` { #ujsonresponse }
-
-`UJSONResponse` æ¯äžäžªäœ¿çš
`ujson` çå¯é JSON ååºã
-
-/// info | ä¿¡æ¯
-
-è¿éèŠå
å®è£
`ujson`ïŒäŸåŠäœ¿çš `pip install ujson`ã
-
-///
-
-/// warning | èŠå
-
-åšå€çæäºèŸ¹çŒæ
嵿¶ïŒ`ujson` äžåŠ Python çå
眮å®ç°é£ä¹è°šæ
ã
-
-///
-
-{* ../../docs_src/custom_response/tutorial001_py310.py hl[2,7] *}
+/// note | ææ¯ç»è
-/// tip | æç€º
+äœåŠæäœ å£°æäºååºæš¡åæè¿åç±»åïŒå°çŽæ¥äœ¿çšå®æ¥ææ°æ®åºåå䞺 JSONïŒå¹¶çŽæ¥è¿åäžäžªå
·å€æ£ç¡® JSON åªäœç±»åçååºïŒèäžäŒäœ¿çš `JSONResponse` ç±»ã
-`ORJSONResponse` å¯èœæ¯äžäžªæŽå¿«çéæ©ã
+è¿æ¯è·åŸæäœ³æ§èœççæ³æ¹åŒã
///
@@ -214,31 +172,25 @@ FastAPIïŒå®é
äžæ¯ StarletteïŒå°èªåšå
å« Content-Length ç倎ãå®
### `StreamingResponse` { #streamingresponse }
-éçšåŒæ¥çæåšææ®éçæåš/è¿ä»£åšïŒç¶åæµåŒäŒ èŸååºäž»äœã
-
-{* ../../docs_src/custom_response/tutorial007_py310.py hl[2,14] *}
-
-#### 对类䌌æä»¶çå¯¹è±¡äœ¿çš `StreamingResponse` { #using-streamingresponse-with-file-like-objects }
+éçšåŒæ¥çæåšææ®éçæåš/è¿ä»£åšïŒåžŠæ `yield` çåœæ°ïŒïŒç¶åæµåŒäŒ èŸååºäž»äœã
-åŠææšæäžäžª
ç±»æä»¶å¯¹è±¡ïŒäŸåŠç± `open()` è¿åç对象ïŒïŒäœ å¯ä»¥å建äžäžªçæåšåœæ°æ¥è¿ä»£è¯¥ç±»æä»¶å¯¹è±¡ã
+{* ../../docs_src/custom_response/tutorial007_py310.py hl[3,16] *}
-è¿æ ·ïŒäœ å°±äžå¿
å
æå®å
šéšè¯»å
¥å
åïŒå¯ä»¥å°è¯¥çæåšåœæ°äŒ ç» `StreamingResponse` å¹¶è¿åå®ã
-
-è¿ä¹å
æ¬è®žå€äžäºååšãè§é¢å€çç亀äºçåºã
+/// note | ææ¯ç»è
-{* ../../docs_src/custom_response/tutorial008_py310.py hl[2,10:12,14] *}
+äžäžª `async` ä»»å¡åªæåšå°èŸŸ `await` æ¶æèœè¢«åæ¶ãåŠææ²¡æ `await`ïŒçæåšïŒåžŠæ `yield` çåœæ°ïŒæ æ³è¢«æ£ç¡®åæ¶ïŒå³äœ¿å·²è¯·æ±åæ¶ä¹å¯èœç»§ç»è¿è¡ã
-1. è¿æ¯çæåšåœæ°ã乿以æ¯ãçæåšåœæ°ãïŒæ¯å 䞺å®å
éšå
å« `yield` è¯å¥ã
-2. éè¿äœ¿çš `with` 代ç åïŒæä»¬å¯ä»¥ç¡®ä¿åšçæåšåœæ°å®æåå
³éç±»æä»¶å¯¹è±¡ãå æ€ïŒåšå®å®æåéååºä¹åäŒè¢«å
³éã
-3. è¿äžª `yield from` åè¯åœæ°å»è¿ä»£å䞺 `file_like` çé£äžªå¯¹è±¡ãç¶åïŒå¯¹äºæ¯äžªè¢«è¿ä»£åºæ¥çéšåïŒéœæè¯¥éšåäœäžºæ¥èªè¿äžªçæåšåœæ°ïŒ`iterfile`ïŒçåŒå `yield` åºå»ã
+ç±äºè¿äžªå°ç€ºäŸäžéèŠä»»äœ `await` è¯å¥ïŒæä»¬æ·»å `await anyio.sleep(0)`ïŒç»äºä»¶åŸªç¯äžäžªå€çåæ¶çæºäŒã
- å æ€ïŒå®æ¯äžäžªæãçæãå·¥äœå
éšèœ¬äº€ç»å
¶ä»äžè¥¿ççæåšåœæ°ã
+对äºå€§åææ éæµïŒè¿äžç¹æŽäžºéèŠã
- éè¿è¿ç§æ¹åŒïŒæä»¬å¯ä»¥æå®æŸåš `with` 代ç åäžïŒä»èç¡®ä¿ç±»æä»¶å¯¹è±¡åšç»æå被å
³éã
+///
/// tip | æç€º
-泚æåšè¿éïŒå 䞺æä»¬äœ¿çšçæ¯äžæ¯æ `async` å `await` çæ å `open()`ïŒæä»¬äœ¿çšæ®éç `def` 声æäºè·¯åŸæäœã
+äžå
¶çŽæ¥è¿å `StreamingResponse`ïŒæŽæšèéµåŸª [æµåŒæ°æ®](./stream-data.md) çåæ³ïŒå®æŽæ¹äŸ¿å¹¶åšå¹åäžºäœ å€çåæ¶ã
+
+åŠæäœ åšæµåŒäŒ èŸ JSON LinesïŒè¯·åé
æçšïŒ[æµåŒäŒ èŸ JSON Lines](../tutorial/stream-json-lines.md)ã
///
@@ -267,11 +219,11 @@ FastAPIïŒå®é
äžæ¯ StarletteïŒå°èªåšå
å« Content-Length ç倎ãå®
äœ å¯ä»¥åå»ºäœ èªå·±çèªå®ä¹ååºç±»ïŒç»§æ¿èª `Response` 并䜿çšå®ã
-äŸåŠïŒåè®Ÿäœ æ³äœ¿çš
`orjson`ïŒäœèŠäœ¿çšå
眮 `ORJSONResponse` 类没æå¯çšçäžäºèªå®ä¹è®Ÿçœ®ã
+äŸåŠïŒåè®Ÿäœ æ³çšäžäºè®Ÿçœ®æ¥äœ¿çš [`orjson`](https://github.com/ijl/orjson)ã
åè®Ÿäœ æ³è®©å®è¿å垊猩è¿ãæ ŒåŒåç JSONïŒå æ€äœ æ³äœ¿çš orjson é项 `orjson.OPT_INDENT_2`ã
-äœ å¯ä»¥å建äžäžª `CustomORJSONResponse`ãäœ éèŠåçäž»èŠäºæ
æ¯å®ç°äžäžªè¿å `bytes` ç `Response.render(content)` æ¹æ³ïŒ
+äœ å¯ä»¥å建äžäžª `CustomORJSONResponse`ãäœ éèŠåçäž»èŠäºæ
æ¯å®ç°äžäžª `Response.render(content)` æ¹æ³ïŒå¹¶è¿å `bytes`ïŒ
{* ../../docs_src/custom_response/tutorial009c_py310.py hl[9:14,17] *}
@@ -291,13 +243,21 @@ FastAPIïŒå®é
äžæ¯ StarletteïŒå°èªåšå
å« Content-Length ç倎ãå®
åœç¶ïŒäœ åŸå¯èœäŒæŸå°æ¯æ ŒåŒå JSON æŽå¥œçæ¹åŒæ¥å©çšè¿äžç¹ãð
+### `orjson` æååºæš¡å { #orjson-or-response-model }
+
+åŠæäœ è¿œæ±çæ¯æ§èœïŒäœ¿çš[ååºæš¡å](../tutorial/response-model.md) åŸåŸæ¯è¿å `orjson` ååºæŽå¥œã
+
+䜿çšååºæš¡åæ¶ïŒFastAPI äŒäœ¿çš Pydantic çŽæ¥ææ°æ®åºåå䞺 JSONïŒäžéèŠè¯žåŠéè¿ `jsonable_encoder` 蜬æ¢è¿æ ·çäžéŽæ¥éª€ïŒå
¶ä»æ
åµäžäŒåçïŒã
+
+å¹¶äžåšåºå±ïŒPydantic 䜿çšäž `orjson` çžåç Rust æºå¶æ¥åºåå JSONïŒæä»¥äœ¿çšååºæš¡åäœ å·²ç»å¯ä»¥è·åŸæäœ³æ§èœã
+
## é»è®€ååºç±» { #default-response-class }
åšå建 **FastAPI** ç±»å®äŸæ `APIRouter` æ¶ïŒäœ å¯ä»¥æå®é»è®€èŠäœ¿çšçååºç±»ã
çšäºå®ä¹å®çåæ°æ¯ `default_response_class`ã
-åšäžé¢ç瀺äŸäžïŒ**FastAPI** äŒåšææ *è·¯åŸæäœ* äžé»è®€äœ¿çš `ORJSONResponse`ïŒèäžæ¯ `JSONResponse`ã
+åšäžé¢ç瀺äŸäžïŒ**FastAPI** äŒåšææ *è·¯åŸæäœ* äžé»è®€äœ¿çš `HTMLResponse`ïŒèäžæ¯ JSONã
{* ../../docs_src/custom_response/tutorial010_py310.py hl[2,4] *}
@@ -309,4 +269,4 @@ FastAPIïŒå®é
äžæ¯ StarletteïŒå°èªåšå
å« Content-Length ç倎ãå®
## é¢å€ææ¡£ { #additional-documentation }
-äœ è¿å¯ä»¥äœ¿çš `responses` åš OpenAPI äžå£°æåªäœç±»åå讞å€å
¶ä»è¯Šç»ä¿¡æ¯ïŒ[OpenAPI äžçé¢å€ææ¡£](additional-responses.md){.internal-link target=_blank}ã
+äœ è¿å¯ä»¥äœ¿çš `responses` åš OpenAPI äžå£°æåªäœç±»åå讞å€å
¶ä»è¯Šç»ä¿¡æ¯ïŒ[OpenAPI äžçé¢å€ååº](additional-responses.md)ã
diff --git a/docs/zh/docs/advanced/dataclasses.md b/docs/zh/docs/advanced/dataclasses.md
index f552d779fb..42b4e4cc4d 100644
--- a/docs/zh/docs/advanced/dataclasses.md
+++ b/docs/zh/docs/advanced/dataclasses.md
@@ -2,11 +2,11 @@
FastAPI åºäº **Pydantic** æå»ºïŒæå·²ç»åäœ å±ç€ºè¿åŠäœäœ¿çš Pydantic æš¡å声æè¯·æ±äžååºã
-äœ FastAPI 乿¯æä»¥çžåæ¹åŒäœ¿çš
`dataclasses`ïŒ
+äœ FastAPI 乿¯æä»¥çžåæ¹åŒäœ¿çš [`dataclasses`](https://docs.python.org/3/library/dataclasses.html)ïŒ
{* ../../docs_src/dataclasses_/tutorial001_py310.py hl[1,6:11,18:19] *}
-è¿ä»ç¶åŸçäº **Pydantic**ïŒå 䞺å®å¯¹
`dataclasses` çå
çœ®æ¯æã
+è¿ä»ç¶åŸçäº **Pydantic**ïŒå 䞺å®å¯¹ [`dataclasses` çå
çœ®æ¯æ](https://docs.pydantic.dev/latest/concepts/dataclasses/#use-of-stdlib-dataclasses-with-basemodel)ã
å æ€ïŒå³äŸ¿äžé¢çä»£ç æ²¡ææŸåŒäœ¿çš PydanticïŒFastAPI ä¹äŒäœ¿çš Pydantic å°é£äºæ åæ°æ®ç±»èœ¬æ¢äžº Pydantic 飿 Œç dataclassesã
@@ -67,7 +67,7 @@ FastAPI åºäº **Pydantic** æå»ºïŒæå·²ç»åäœ å±ç€ºè¿åŠäœäœ¿çš Pydant
äžåŠæ¢åŸïŒåš FastAPI äžäœ å¯ä»¥æéç»å `def` å `async def`ã
- åŠæéèŠåé¡Ÿäœæ¶çšåªäžäžªïŒè¯·æ¥çå
³äº [`async` å `await`](../async.md#in-a-hurry){.internal-link target=_blank} çææ¡£äžç _âæ¥äžå¯åŸ
ïŒâ_ äžèã
+ åŠæéèŠåé¡Ÿäœæ¶çšåªäžäžªïŒè¯·æ¥çå
³äº [`async` å `await`](../async.md#in-a-hurry) çææ¡£äžç _âæ¥äžå¯åŸ
ïŒâ_ äžèã
9. è¿äžª *è·¯åŸæäœåœæ°* è¿åçäžæ¯æ°æ®ç±»ïŒåœç¶ä¹å¯ä»¥è¿åæ°æ®ç±»ïŒïŒèæ¯å
å«å
éšæ°æ®çåå
žå衚ã
FastAPI äŒäœ¿çšïŒå
嫿°æ®ç±»çïŒ`response_model` åæ°æ¥èœ¬æ¢ååºã
@@ -80,7 +80,7 @@ FastAPI åºäº **Pydantic** æå»ºïŒæå·²ç»åäœ å±ç€ºè¿åŠäœäœ¿çš Pydant
äœ è¿å¯ä»¥æ `dataclasses` äžå
¶å® Pydantic æš¡åç»åãä»å®ä»¬ç»§æ¿ãæå®ä»¬å
å«å°äœ èªå·±çæš¡åäžçã
-æ³äºè§£æŽå€ïŒè¯·æ¥ç
Pydantic å
³äº dataclasses çææ¡£ã
+æ³äºè§£æŽå€ïŒè¯·æ¥ç [Pydantic å
³äº dataclasses çææ¡£](https://docs.pydantic.dev/latest/concepts/dataclasses/)ã
## çæ¬ { #version }
diff --git a/docs/zh/docs/advanced/events.md b/docs/zh/docs/advanced/events.md
index 71ad1ae383..0b647a4388 100644
--- a/docs/zh/docs/advanced/events.md
+++ b/docs/zh/docs/advanced/events.md
@@ -150,11 +150,11 @@ async with lifespan(app):
åªæ¯äžºå¥œå¥è
æäŸçææ¯ç»èãð€
-åšåºå±ïŒè¿éšåæ¯ ASGI ææ¯è§èäžç
Lifespan åè®®çäžéšåïŒå®ä¹äºç§°äžº `startup` å `shutdown` çäºä»¶ã
+åšåºå±ïŒè¿éšåæ¯ ASGI ææ¯è§èäžç [Lifespan åè®®](https://asgi.readthedocs.io/en/latest/specs/lifespan.html)çäžéšåïŒå®ä¹äºç§°äžº `startup` å `shutdown` çäºä»¶ã
/// info | ä¿¡æ¯
-äœ å¯ä»¥åš
Starlette ç Lifespan ææ¡£ äžé
读æŽå€å
³äº `lifespan` å€çåšçå
容ã
+äœ å¯ä»¥åš [Starlette ç Lifespan ææ¡£](https://www.starlette.dev/lifespan/) äžé
读æŽå€å
³äº `lifespan` å€çåšçå
容ã
å
æ¬åŠäœå€ççåœåšæç¶æïŒä»¥äŸ¿åšä»£ç çå
¶ä»éšå䜿çšã
@@ -162,4 +162,4 @@ async with lifespan(app):
## ååºçš { #sub-applications }
-ðš 请泚æïŒè¿äºçåœåšæäºä»¶ïŒstartup å shutdownïŒåªäŒåšäž»åºçšäžæ§è¡ïŒäžäŒåš[ååºçš - æèœœ](sub-applications.md){.internal-link target=_blank}äžæ§è¡ã
+ðš 请泚æïŒè¿äºçåœåšæäºä»¶ïŒstartup å shutdownïŒåªäŒåšäž»åºçšäžæ§è¡ïŒäžäŒåš[ååºçš - æèœœ](sub-applications.md)äžæ§è¡ã
diff --git a/docs/zh/docs/advanced/generate-clients.md b/docs/zh/docs/advanced/generate-clients.md
index e8a3b20558..5f53aa4347 100644
--- a/docs/zh/docs/advanced/generate-clients.md
+++ b/docs/zh/docs/advanced/generate-clients.md
@@ -8,11 +8,11 @@
## åŒæº SDK çæåš { #open-source-sdk-generators }
-äžäžªåèœå€æ ·çéæ©æ¯
OpenAPI GeneratorïŒå®æ¯æ**å€ç§çŒçšè¯èš**ïŒå¯ä»¥æ ¹æ®äœ ç OpenAPI è§èçæ SDKã
+äžäžªåèœå€æ ·çéæ©æ¯ [OpenAPI Generator](https://openapi-generator.tech/)ïŒå®æ¯æ**å€ç§çŒçšè¯èš**ïŒå¯ä»¥æ ¹æ®äœ ç OpenAPI è§èçæ SDKã
-å¯¹äº **TypeScript 客æ·ç«¯**ïŒ
Hey API æ¯äžº TypeScript çææé çäžç𿹿¡ïŒæäŸäŒåç䜿çšäœéªã
+å¯¹äº **TypeScript 客æ·ç«¯**ïŒ[Hey API](https://heyapi.dev/) æ¯äžº TypeScript çææé çäžç𿹿¡ïŒæäŸäŒåç䜿çšäœéªã
-äœ è¿å¯ä»¥åš
OpenAPI.Tools äžåç°æŽå€ SDK çæåšã
+äœ è¿å¯ä»¥åš [OpenAPI.Tools](https://openapi.tools/#sdk) äžåç°æŽå€ SDK çæåšã
/// tip | æç€º
@@ -24,15 +24,15 @@ FastAPI äŒèªåšçæ **OpenAPI 3.1** è§èïŒå æ€äœ 䜿çšçä»»äœå·¥å
·
æ¬èä»ç»çæ¯ç±èµå© FastAPI çå
¬åžæäŸçãå
·å€**é£é©æèµèæ¯**æ**å
¬åžæ¯æ**çæ¹æ¡ãè¿äºäº§ååšé«èŽšéçæç SDK ä¹äžïŒæäŸäº**æŽå€ç¹æ§**å**éæ**ã
-éè¿ âš [**èµå© FastAPI**](../help-fastapi.md#sponsor-the-author){.internal-link target=_blank} âšïŒè¿äºå
¬åžåž®å©ç¡®ä¿æ¡æ¶åå
¶**çæ**ä¿æå¥åº·å¹¶äž**坿ç»**ã
+éè¿ âš [**èµå© FastAPI**](../help-fastapi.md#sponsor-the-author) âšïŒè¿äºå
¬åžåž®å©ç¡®ä¿æ¡æ¶åå
¶**çæ**ä¿æå¥åº·å¹¶äž**坿ç»**ã
ä»ä»¬çèµå©ä¹äœç°äºå¯¹ FastAPI **瀟åº**ïŒä¹å°±æ¯äœ ïŒçé«åºŠæ¿è¯ºïŒäžä»
å
³æ³šæäŸ**äŒç§çæå¡**ïŒä¹æ¯æäžäžª**å¥å£®äžç¹è£çæ¡æ¶**ââFastAPIãð
äŸåŠïŒäœ å¯ä»¥å°è¯ïŒ
-*
Speakeasy
-*
Stainless
-*
liblab
+* [Speakeasy](https://speakeasy.com/editor?utm_source=fastapi+repo&utm_medium=github+sponsorship)
+* [Stainless](https://www.stainless.com/?utm_source=fastapi&utm_medium=referral)
+* [liblab](https://developers.liblab.com/tutorials/sdk-for-fastapi?utm_source=fastapi)
å
¶äžäžäºæ¹æ¡ä¹å¯èœæ¯åŒæºçææäŸå
莹å±çº§ïŒäœ å¯ä»¥äžè±é±å°±å
è¯çšãå
¶ä»åäž SDK çæåšä¹å¯åšçœäžæŸå°ãð€
@@ -66,7 +66,7 @@ npx @hey-api/openapi-ts -i http://localhost:8000/openapi.json -o src/client
è¿äŒåš `./src/client` çæäžäžª TypeScript SDKã
-äœ å¯ä»¥åšå
¶å®çœäºè§£åŠäœ
å®è£
`@hey-api/openapi-ts`ïŒä»¥åé
读
çæç»æç诎æã
+äœ å¯ä»¥åšå
¶å®çœäºè§£åŠäœ[å®è£
`@hey-api/openapi-ts`](https://heyapi.dev/openapi-ts/get-started)ïŒä»¥åé
读[çæç»æ](https://heyapi.dev/openapi-ts/output)ç诎æã
### äœ¿çš SDK { #using-the-sdk }
diff --git a/docs/zh/docs/advanced/index.md b/docs/zh/docs/advanced/index.md
index 610c187137..24b4d076fc 100644
--- a/docs/zh/docs/advanced/index.md
+++ b/docs/zh/docs/advanced/index.md
@@ -2,13 +2,13 @@
## éå åèœ { #additional-features }
-äž»èŠç[æçš - çšæ·æå](../tutorial/index.md){.internal-link target=_blank}è¶³ä»¥åžŠäœ äºè§£ **FastAPI** çææäž»èŠç¹æ§ã
+äž»èŠç[æçš - çšæ·æå](../tutorial/index.md)è¶³ä»¥åžŠäœ äºè§£ **FastAPI** çææäž»èŠç¹æ§ã
åšæ¥äžæ¥çç« èäžïŒäœ å°çå°å
¶ä»é项ãé
眮åéå åèœã
/// tip | æç€º
-æ¥äžæ¥çç« èäžäžå®æ¯âé«çº§âçã
+æ¥äžæ¥çç« è**äžäžå®æ¯âé«çº§âç**ã
对äºäœ ççšäŸïŒè§£å³æ¹æ¡åŸå¯èœå°±åšå
¶äžä¹äžã
@@ -16,6 +16,6 @@
## å
é
读æçš { #read-the-tutorial-first }
-ä»
åäž»èŠ[æçš - çšæ·æå](../tutorial/index.md){.internal-link target=_blank}äžçç¥è¯ïŒäœ å·²ç»å¯ä»¥äœ¿çš **FastAPI** ç倧倿°åèœã
+ä»
åäž»èŠ[æçš - çšæ·æå](../tutorial/index.md)äžçç¥è¯ïŒäœ å·²ç»å¯ä»¥äœ¿çš **FastAPI** ç倧倿°åèœã
æ¥äžæ¥çç« èé»è®€äœ å·²ç»è¯»è¿å®ïŒå¹¶çè§£å
¶äžçæ žå¿æŠå¿µã
diff --git a/docs/zh/docs/advanced/json-base64-bytes.md b/docs/zh/docs/advanced/json-base64-bytes.md
new file mode 100644
index 0000000000..7792282c72
--- /dev/null
+++ b/docs/zh/docs/advanced/json-base64-bytes.md
@@ -0,0 +1,63 @@
+# åš JSON äžäœ¿çš Base64 衚瀺åè { #json-with-bytes-as-base64 }
+
+åŠæäœ çåºçšéèŠæ¥æ¶ååé JSON æ°æ®ïŒäœå
¶äžéèŠå
å«äºè¿å¶æ°æ®ïŒå¯ä»¥å°å
¶çŒç 䞺 base64ã
+
+## Base64 äžæä»¶ { #base64-vs-files }
+
+请å
èèæ¯åŠå¯ä»¥äœ¿çš [è¯·æ±æä»¶](../tutorial/request-files.md) æ¥äžäŒ äºè¿å¶æ°æ®ïŒå¹¶äœ¿çš [èªå®ä¹ååº - FileResponse](./custom-response.md#fileresponse--fileresponse-) æ¥åéäºè¿å¶æ°æ®ïŒèäžæ¯æå®çŒç è¿ JSONã
+
+JSON åªèœå
å« UTF-8 çŒç çå笊䞲ïŒå æ€æ æ³çŽæ¥å
å«åå§åèã
+
+Base64 å¯ä»¥æäºè¿å¶æ°æ®çŒç 䞺å笊䞲ïŒäœäžºæ€äŒäœ¿çšæ¯åå§äºè¿å¶æŽå€çå笊ïŒå æ€éåžžæ¯çŽæ¥äœ¿çšæä»¶çæçæŽäœã
+
+ä»
åœäœ ç¡®å®éèŠåš JSON äžå
å«äºè¿å¶æ°æ®äžæ æ³äœ¿çšæä»¶æ¶ïŒæäœ¿çš base64ã
+
+## Pydantic `bytes` { #pydantic-bytes }
+
+äœ å¯ä»¥å£°æåžŠæ `bytes` åæ®µç Pydantic æš¡åïŒç¶ååšæš¡åé
眮äžäœ¿çš `val_json_bytes` æå®çš base64 æ¥éªè¯èŸå
¥ç JSON æ°æ®ïŒäœäžºéªè¯çäžéšåïŒå®äŒå°è¯¥ base64 å笊䞲解ç 䞺åèã
+
+{* ../../docs_src/json_base64_bytes/tutorial001_py310.py ln[1:9,29:35] hl[9] *}
+
+æ¥ç `/docs` æ¶ïŒäœ äŒçå°å段 `data` æææ¥æ¶ base64 çŒç çåèïŒ
+
+
+

+
+
+äœ å¯ä»¥åéåŠäžè¯·æ±ïŒ
+
+```json
+{
+ "description": "Some data",
+ "data": "aGVsbG8="
+}
+```
+
+/// tip | æç€º
+
+`aGVsbG8=` æ¯ `hello` ç base64 çŒç ã
+
+///
+
+éå Pydantic äŒè§£ç 该 base64 å笊䞲ïŒå¹¶åšæš¡åç `data` åæ®µäžæäŸåå§åèã
+
+äœ å°äŒæ¶å°ç±»äŒŒçååºïŒ
+
+```json
+{
+ "description": "Some data",
+ "content": "hello"
+}
+```
+
+## çšäºèŸåºæ°æ®ç Pydantic `bytes` { #pydantic-bytes-for-output-data }
+
+对äºèŸåºæ°æ®ïŒäœ ä¹å¯ä»¥åšæš¡åé
眮äžäžº `bytes` åæ®µäœ¿çš `ser_json_bytes`ïŒPydantic äŒåšçæ JSON ååºæ¶å°åè以 base64 è¿è¡åºååã
+
+{* ../../docs_src/json_base64_bytes/tutorial001_py310.py ln[1:2,12:16,29,38:41] hl[16] *}
+
+## çšäºèŸå
¥åèŸåºæ°æ®ç Pydantic `bytes` { #pydantic-bytes-for-input-and-output-data }
+
+åœç¶ïŒäœ ä¹å¯ä»¥äœ¿çšåäžäžªé
çœ®äº base64 çæš¡åïŒå𿥿¶ååé JSON æ°æ®æ¶ïŒåæ¶å€çèŸå
¥ïŒäœ¿çš `val_json_bytes` è¿è¡éªè¯ïŒåèŸåºïŒäœ¿çš `ser_json_bytes` è¿è¡åºååïŒã
+
+{* ../../docs_src/json_base64_bytes/tutorial001_py310.py ln[1:2,19:26,29,44:46] hl[23:26] *}
diff --git a/docs/zh/docs/advanced/middleware.md b/docs/zh/docs/advanced/middleware.md
index de4a3fcb13..4077ec094c 100644
--- a/docs/zh/docs/advanced/middleware.md
+++ b/docs/zh/docs/advanced/middleware.md
@@ -1,8 +1,8 @@
# é«çº§äžéŽä»¶ { #advanced-middleware }
-çšæ·æåä»ç»äºåŠäœäžºåºçšæ·»å [èªå®ä¹äžéŽä»¶](../tutorial/middleware.md){.internal-link target=_blank} ã
+çšæ·æåä»ç»äºåŠäœäžºåºçšæ·»å [èªå®ä¹äžéŽä»¶](../tutorial/middleware.md)ã
-以ååŠäœ[äœ¿çš `CORSMiddleware` å€ç CORS](../tutorial/cors.md){.internal-link target=_blank}ã
+以ååŠäœ[äœ¿çš `CORSMiddleware` å€ç CORS](../tutorial/cors.md)ã
æ¬ç« åŠä¹ åŠäœäœ¿çšå
¶å®äžéŽä»¶ã
@@ -87,11 +87,11 @@ app.add_middleware(UnicornMiddleware, some_config="rainbow")
## å
¶å®äžéŽä»¶ { #other-middlewares }
-é€äºäžè¿°äžéŽä»¶å€ïŒFastAPI è¿æ¯æå
¶å®ASGI äžéŽä»¶ã
+é€äºäžè¿°äžéŽä»¶å€ïŒFastAPI è¿æ¯æå
¶å® ASGI äžéŽä»¶ã
äŸåŠïŒ
-*
Uvicorn ç `ProxyHeadersMiddleware`
-*
MessagePack
+* [Uvicorn ç `ProxyHeadersMiddleware`](https://github.com/encode/uvicorn/blob/master/uvicorn/middleware/proxy_headers.py)
+* [MessagePack](https://github.com/florimondmanca/msgpack-asgi)
-å
¶å®å¯çšäžéŽä»¶è¯Šè§
Starlette 宿¡£ - äžéŽä»¶ å
ASGI Awesome å衚ã
+å
¶å®å¯çšäžéŽä»¶è¯Šè§ [Starlette 宿¡£ - äžéŽä»¶](https://www.starlette.dev/middleware/) å [ASGI Awesome å衚](https://github.com/florimondmanca/awesome-asgi)ã
diff --git a/docs/zh/docs/advanced/openapi-callbacks.md b/docs/zh/docs/advanced/openapi-callbacks.md
index cc9f5c28e1..49cef36481 100644
--- a/docs/zh/docs/advanced/openapi-callbacks.md
+++ b/docs/zh/docs/advanced/openapi-callbacks.md
@@ -35,7 +35,7 @@ API ççšæ·ïŒå€éšåŒåè
ïŒèŠåšæšç API å
äœ¿çš POST 请æ±å建
/// tip | æç€º
-`callback_url` æ¥è¯¢åæ°äœ¿çš Pydantic ç
Url ç±»åã
+`callback_url` æ¥è¯¢åæ°äœ¿çš Pydantic ç [Url](https://docs.pydantic.dev/latest/api/networks/) ç±»åã
///
@@ -66,7 +66,7 @@ httpx.post(callback_url, json={"description": "Invoice paid", "paid": True})
å®é
çåè°åªæ¯ HTTP 请æ±ã
-å®ç°åè°æ¶ïŒèŠäœ¿çš
HTTPX æ
Requestsã
+å®ç°åè°æ¶ïŒèŠäœ¿çš [HTTPX](https://www.python-httpx.org) æ [Requests](https://requests.readthedocs.io/)ã
///
@@ -106,13 +106,13 @@ httpx.post(callback_url, json={"description": "Invoice paid", "paid": True})
åè°*è·¯åŸæäœ*äžåžžè§*è·¯åŸæäœ*æäž€ç¹äž»èŠåºå«ïŒ
* å®äžéèŠä»»äœå®é
ç代ç ïŒå 䞺åºçšäžäŒè°çšè¿æ®µä»£ç ãå®åªæ¯çšäºåæ¡£*å€éš API*ãå æ€ïŒåœæ°çå
容åªéèŠ `pass` å°±å¯ä»¥äº
-* *è·¯åŸ*å¯ä»¥å
å«
OpenAPI 3 衚蟟åŒïŒè¯Šè§äžæïŒïŒå¯ä»¥äœ¿çšåžŠåæ°çåéïŒä»¥ååéè³æšç API çåå§è¯·æ±çéšå
+* *è·¯åŸ*å¯ä»¥å
å« [OpenAPI 3 衚蟟åŒ](https://github.com/OAI/OpenAPI-Specification/blob/master/versions/3.1.0.md#key-expression)ïŒè¯Šè§äžæïŒïŒå¯ä»¥äœ¿çšåžŠåæ°çåéïŒä»¥ååéè³æšç API çåå§è¯·æ±çéšå
### åè°è·¯åŸè¡šèŸŸåŒ { #the-callback-path-expression }
-åè°*è·¯åŸ*æ¯æå
å«åéç»æšç API çåå§è¯·æ±çéšåç
OpenAPI 3 衚蟟åŒã
+åè°*è·¯åŸ*æ¯æå
å«åéç»æšç API çåå§è¯·æ±çéšåç [OpenAPI 3 衚蟟åŒ](https://github.com/OAI/OpenAPI-Specification/blob/master/versions/3.1.0.md#key-expression)ã
-æ¬äŸäžæ¯**å笊䞲**ïŒ
+æ¬äŸäžæ¯ `str`ïŒ
```Python
"{$callback_url}/invoices/{$request.body.id}"
@@ -173,13 +173,13 @@ JSON 请æ±äœå
å«åŠäžå
容ïŒ
/// tip | æç€º
-泚æïŒäžèœæè·¯ç±æ¬èº«ïŒ`invoices_callback_router`ïŒäŒ éç» `callback=`ïŒèŠäŒ é `invoices_callback_router.routes` äžç `.routes` 屿§ã
+泚æïŒäžèœæè·¯ç±æ¬èº«ïŒ`invoices_callback_router`ïŒäŒ éç» `callbacks=`ïŒèŠäŒ é `invoices_callback_router.routes` äžç `.routes` 屿§ã
///
### æ¥çææ¡£ { #check-the-docs }
-ç°åšïŒå¯åšåºçšå¹¶æåŒ
http://127.0.0.1:8000/docsã
+ç°åšïŒå¯åšåºçšå¹¶æåŒ [http://127.0.0.1:8000/docs](http://127.0.0.1:8000/docs)ã
å°±èœçå°ææ¡£ç*è·¯åŸæäœ*å·²ç»å
å«äº**åè°**çå
容以å*å€éš API*ïŒ
diff --git a/docs/zh/docs/advanced/openapi-webhooks.md b/docs/zh/docs/advanced/openapi-webhooks.md
index d23fbcf888..3d6bcc9bc2 100644
--- a/docs/zh/docs/advanced/openapi-webhooks.md
+++ b/docs/zh/docs/advanced/openapi-webhooks.md
@@ -2,7 +2,7 @@
æäºæ
åµäžïŒæšå¯èœæ³åè¯æšç API **çšæ·**ïŒæšçåºçšçšåºå¯ä»¥æºåžŠäžäºæ°æ®è°çš*ä»ä»¬ç*åºçšçšåºïŒç»å®ä»¬åé请æ±ïŒïŒéåžžæ¯äžºäº**éç¥**æç§**äºä»¶**ã
-è¿æå³çïŒé€äºæšççšæ·åæšç API åé请æ±çäžè¬æ
åµïŒ**æšç API**ïŒææšçåºçšïŒä¹å¯ä»¥å**ä»ä»¬çç³»ç»**ïŒä»ä»¬ç APIãä»ä»¬çåºçšïŒ**åé请æ±**ã
+è¿æå³çïŒäžéåžžç±æšççšæ·åæšç API åé请æ±çæµçšçžåïŒæ¯**æšç API**ïŒææšçåºçšïŒå¯ä»¥**åä»ä»¬çç³»ç»**ïŒä»ä»¬ç APIãä»ä»¬çåºçšïŒ**åé请æ±**ã
è¿é垞被称䞺**çœç»é©å**ïŒWebhookïŒã
@@ -48,7 +48,7 @@
### æ¥çææ¡£ { #check-the-docs }
-ç°åšæšå¯ä»¥å¯åšæšçåºçšçšåºå¹¶è®¿é®
http://127.0.0.1:8000/docs.
+ç°åšæšå¯ä»¥å¯åšæšçåºçšçšåºå¹¶è®¿é® [http://127.0.0.1:8000/docs](http://127.0.0.1:8000/docs)ã
æšäŒçå°æšçææ¡£äžä»
ææ£åžžç*è·¯åŸæäœ*æŸç€ºïŒç°åšè¿å€äºäžäº**çœç»é©å**ïŒ
diff --git a/docs/zh/docs/advanced/path-operation-advanced-configuration.md b/docs/zh/docs/advanced/path-operation-advanced-configuration.md
index 588d4f09c5..67f3bd7e9a 100644
--- a/docs/zh/docs/advanced/path-operation-advanced-configuration.md
+++ b/docs/zh/docs/advanced/path-operation-advanced-configuration.md
@@ -60,7 +60,7 @@
äœ ä¹å¯ä»¥äžºå®å£°æåžŠæåèªæš¡åãç¶æç ççéå ååºã
-ææ¡£äžæäžäžªå®æŽç« èïŒäœ å¯ä»¥é
读è¿éç[OpenAPI äžçéå ååº](additional-responses.md){.internal-link target=_blank}ã
+ææ¡£äžæäžäžªå®æŽç« èïŒäœ å¯ä»¥é
读è¿éç[OpenAPI äžçéå ååº](additional-responses.md)ã
## OpenAPI Extra { #openapi-extra }
@@ -68,7 +68,7 @@
/// note | ææ¯ç»è
-åš OpenAPI è§èäžïŒè¿è¢«ç§°äžº
Operation 对象ã
+åš OpenAPI è§èäžïŒè¿è¢«ç§°äžº [Operation 对象](https://github.com/OAI/OpenAPI-Specification/blob/main/versions/3.0.3.md#operation-object)ã
///
@@ -82,7 +82,7 @@
è¿æ¯äžäžªèŸäœå±çº§çæ©å±ç¹ã
-åŠæäœ åªéèŠå£°æéå ååºïŒæŽæ¹äŸ¿çæ¹åŒæ¯äœ¿çš[OpenAPI äžçéå ååº](additional-responses.md){.internal-link target=_blank}ã
+åŠæäœ åªéèŠå£°æéå ååºïŒæŽæ¹äŸ¿çæ¹åŒæ¯äœ¿çš[OpenAPI äžçéå ååº](additional-responses.md)ã
///
diff --git a/docs/zh/docs/advanced/response-change-status-code.md b/docs/zh/docs/advanced/response-change-status-code.md
index 0b004bf4e5..379afd4eb9 100644
--- a/docs/zh/docs/advanced/response-change-status-code.md
+++ b/docs/zh/docs/advanced/response-change-status-code.md
@@ -1,6 +1,6 @@
# ååº - æŽæ¹ç¶æç { #response-change-status-code }
-äœ å¯èœä¹åå·²ç»äºè§£å°ïŒäœ å¯ä»¥è®Ÿçœ®é»è®€ç[ååºç¶æç ](../tutorial/response-status-code.md){.internal-link target=_blank}ã
+äœ å¯èœä¹åå·²ç»äºè§£å°ïŒäœ å¯ä»¥è®Ÿçœ®é»è®€ç[ååºç¶æç ](../tutorial/response-status-code.md)ã
äœåšæäºæ
åµäžïŒäœ éèŠè¿åäžäžªäžåäºé»è®€åŒçç¶æç ã
diff --git a/docs/zh/docs/advanced/response-cookies.md b/docs/zh/docs/advanced/response-cookies.md
index c618cd0f0a..7fad89e5c6 100644
--- a/docs/zh/docs/advanced/response-cookies.md
+++ b/docs/zh/docs/advanced/response-cookies.md
@@ -18,7 +18,7 @@
äœ è¿å¯ä»¥åšçŽæ¥ååº`Response`æ¶çŽæ¥å建cookiesã
-äœ å¯ä»¥åè[çŽæ¥è¿å Response](response-directly.md){.internal-link target=_blank}æ¥å建response
+䞺æ€ïŒäœ å¯ä»¥æç
§[çŽæ¥è¿å Response](response-directly.md)äžç诎æå建äžäžªååºã
ç¶å讟眮CookiesïŒå¹¶è¿åïŒ
@@ -46,4 +46,4 @@
///
-åŠæäœ æ³æ¥çææå¯çšçåæ°åé项ïŒå¯ä»¥åè
Starletteåž®å©ææ¡£
+åŠæäœ æ³æ¥çææå¯çšçåæ°åé项ïŒå¯ä»¥åè [Starlette ææ¡£](https://www.starlette.dev/responses/#set-cookie)ã
diff --git a/docs/zh/docs/advanced/response-directly.md b/docs/zh/docs/advanced/response-directly.md
index a97992d249..1966221467 100644
--- a/docs/zh/docs/advanced/response-directly.md
+++ b/docs/zh/docs/advanced/response-directly.md
@@ -2,19 +2,24 @@
åœäœ å建äžäžª **FastAPI** *è·¯åŸæäœ* æ¶ïŒäœ å¯ä»¥æ£åžžè¿å以äžä»»æäžç§æ°æ®ïŒ`dict`ïŒ`list`ïŒPydantic æš¡åïŒæ°æ®åºæš¡åççã
-**FastAPI** é»è®€äŒäœ¿çš `jsonable_encoder` å°è¿äºç±»åçè¿ååŒèœ¬æ¢æ JSON æ ŒåŒïŒ`jsonable_encoder` åš [JSON å
Œå®¹çŒç åš](../tutorial/encoder.md){.internal-link target=_blank} äžæéè¿°ã
+åŠæäœ å£°æäº [ååºæš¡å](../tutorial/response-model.md)ïŒFastAPI äŒäœ¿çšå®éè¿ Pydantic å°æ°æ®åºåå䞺 JSONã
+åŠæäœ æ²¡æå£°æååºæš¡åïŒ**FastAPI** äŒäœ¿çšåš [JSON å
Œå®¹çŒç åš](../tutorial/encoder.md) äžéè¿°ç `jsonable_encoder`ã
ç¶åïŒ**FastAPI** äŒåšåå°å°è¿äºå
Œå®¹ JSON çæ°æ®ïŒæ¯åŠåå
žïŒæŸå°äžäžª `JSONResponse` äžïŒè¯¥ `JSONResponse` äŒçšæ¥åéååºç»å®¢æ·ç«¯ã
äœæ¯äœ å¯ä»¥åšäœ ç *è·¯åŸæäœ* äžçŽæ¥è¿åäžäžª `JSONResponse`ã
-çŽæ¥è¿åååºå¯èœäŒæçšå€ïŒæ¯åŠè¿åèªå®ä¹çååºå€Žå cookiesã
+/// tip | æç€º
+
+éåžžäœ¿çš [ååºæš¡å](../tutorial/response-model.md) äŒæ¯çŽæ¥è¿å `JSONResponse` æ¥ææŽå¥œçæ§èœïŒå 䞺å®äŒåš Rust äžäœ¿çš Pydantic åºååæ°æ®ã
+
+///
## è¿å `Response` { #return-a-response }
äºå®äžïŒäœ å¯ä»¥è¿åä»»æ `Response` æè
ä»»æ `Response` çåç±»ã
-/// tip | æç€º
+/// info | ä¿¡æ¯
`JSONResponse` æ¬èº«æ¯äžäžª `Response` çåç±»ã
@@ -26,6 +31,8 @@
è¿ç§ç¹æ§ç»äœ æå€§ç坿©å±æ§ãäœ å¯ä»¥è¿åä»»äœæ°æ®ç±»åïŒéåä»»äœæ°æ®å£°ææè
æ ¡éªïŒççã
+è¿ä¹åžŠæ¥äºåŸå€§ç莣任ãäœ å¿
须确ä¿äœ è¿åçæ°æ®æ¯æ£ç¡®çãæ ŒåŒæ£ç¡®ãå¯è¢«åºååïŒççã
+
## åš `Response` äžäœ¿çš `jsonable_encoder` { #using-the-jsonable-encoder-in-a-response }
ç±äº **FastAPI** å¹¶æªå¯¹äœ è¿åç `Response` åä»»äœæ¹åïŒäœ å¿
须确ä¿äœ å·²ç»åå€å¥œååºå
容ã
@@ -50,16 +57,28 @@
ç°åšïŒè®©æä»¬ççäœ åŠäœæèœè¿åäžäžªèªå®ä¹çååºã
-åè®Ÿäœ æ³èŠè¿åäžäžª
XML ååºã
+åè®Ÿäœ æ³èŠè¿åäžäžª [XML](https://en.wikipedia.org/wiki/XML) ååºã
äœ å¯ä»¥æäœ ç XML å
容æŸå°äžäžªå笊䞲äžïŒæŸå°äžäžª `Response` äžïŒç¶åè¿åïŒ
{* ../../docs_src/response_directly/tutorial002_py310.py hl[1,18] *}
+## ååºæš¡ååŠäœå·¥äœ { #how-a-response-model-works }
+
+åœäœ åšè·¯åŸæäœäžå£°æäžäžª [ååºæš¡å - è¿åç±»å](../tutorial/response-model.md) æ¶ïŒ**FastAPI** äŒäœ¿çšå®éè¿ Pydantic å°æ°æ®åºåå䞺 JSONã
+
+{* ../../docs_src/response_model/tutorial001_01_py310.py hl[16,21] *}
+
+ç±äºè¿äºå·¥äœäŒåš Rust äŸ§å®æïŒæ§èœå°æ¯åšåžžè§ Python äžé
å `JSONResponse` ç±»å®æèŠå¥œåŸå€ã
+
+åœäœ¿çš `response_model` æè¿åç±»åæ¶ïŒFastAPI äžäŒäœ¿çš `jsonable_encoder` æ¥èœ¬æ¢æ°æ®ïŒé£æ ·äŒæŽæ
¢ïŒïŒä¹äžäŒäœ¿çš `JSONResponse` ç±»ã
+
+çžåïŒå®äŒéçšäœ¿çšè¯¥ååºæš¡åïŒæè¿åç±»åïŒç± Pydantic çæç JSON åèïŒå¹¶çŽæ¥è¿åäžäžªå
·ææ£ç¡® JSON åªäœç±»åïŒ`application/json`ïŒç `Response`ã
+
## 诎æ { #notes }
åœäœ çŽæ¥è¿å `Response` æ¶ïŒå®çæ°æ®æ¢æ²¡ææ ¡éªïŒåäžäŒè¿è¡èœ¬æ¢ïŒåºååïŒïŒä¹äžäŒèªåšçæææ¡£ã
-äœæ¯äœ ä»å¯ä»¥åè [OpenAPI äžçé¢å€ååº](additional-responses.md){.internal-link target=_blank} ç»ååºçŒåææ¡£ã
+äœæ¯äœ ä»å¯ä»¥åè [OpenAPI äžçé¢å€ååº](additional-responses.md) ç»ååºçŒåææ¡£ã
åšåç»çç« èäžäœ å¯ä»¥äºè§£å°åŠäœäœ¿çš/声æè¿äºèªå®ä¹ç `Response` çåæ¶è¿ä¿çèªåšåçæ°æ®èœ¬æ¢åææ¡£çã
diff --git a/docs/zh/docs/advanced/response-headers.md b/docs/zh/docs/advanced/response-headers.md
index 01bde56d2a..ab99a4ece1 100644
--- a/docs/zh/docs/advanced/response-headers.md
+++ b/docs/zh/docs/advanced/response-headers.md
@@ -20,7 +20,7 @@
äœ ä¹å¯ä»¥åšçŽæ¥è¿å `Response` æ¶æ·»å 倎éšã
-æç
§[çŽæ¥è¿åååº](response-directly.md){.internal-link target=_blank}äžæè¿°å建ååºïŒå¹¶å°å€Žéšäœäžºéå åæ°äŒ éïŒ
+æç
§[çŽæ¥è¿åååº](response-directly.md)äžæè¿°å建ååºïŒå¹¶å°å€Žéšäœäžºéå åæ°äŒ éïŒ
{* ../../docs_src/response_headers/tutorial001_py310.py hl[10:12] *}
@@ -36,6 +36,6 @@
## èªå®ä¹å€Žéš { #custom-headers }
-请泚æïŒå¯ä»¥éè¿
äœ¿çš `X-` åçŒæ·»å èªå®ä¹äžæå€Žéšã
+请泚æïŒå¯ä»¥éè¿[äœ¿çš `X-` åçŒ](https://developer.mozilla.org/en-US/docs/Web/HTTP/Headers)æ·»å èªå®ä¹äžæå€Žéšã
-äœæ¯ïŒåŠæäœ æèªå®ä¹å€ŽéšïŒå¹¶åžææµè§åšäžç客æ·ç«¯èœå€çå°å®ä»¬ïŒäœ éèŠå°å®ä»¬æ·»å å°äœ ç CORS é
眮äžïŒåš [CORSïŒè·šæºèµæºå
±äº«ïŒ](../tutorial/cors.md){.internal-link target=_blank} äžé
读æŽå€ïŒïŒäœ¿çšåš
Starlette ç CORS ææ¡£äžè®°åœç `expose_headers` åæ°ã
+äœæ¯ïŒåŠæäœ æèªå®ä¹å€ŽéšïŒå¹¶åžææµè§åšäžç客æ·ç«¯èœå€çå°å®ä»¬ïŒäœ éèŠå°å®ä»¬æ·»å å°äœ ç CORS é
眮äžïŒåš [CORSïŒè·šæºèµæºå
±äº«ïŒ](../tutorial/cors.md) äžé
读æŽå€ïŒïŒäœ¿çšåš [Starlette ç CORS ææ¡£](https://www.starlette.dev/middleware/#corsmiddleware)äžè®°åœç `expose_headers` åæ°ã
diff --git a/docs/zh/docs/advanced/security/http-basic-auth.md b/docs/zh/docs/advanced/security/http-basic-auth.md
index 9128a49753..37e4b5abcb 100644
--- a/docs/zh/docs/advanced/security/http-basic-auth.md
+++ b/docs/zh/docs/advanced/security/http-basic-auth.md
@@ -32,7 +32,7 @@ HTTP åºç¡ææè®©æµè§åšæŸç€ºå
眮ççšæ·åäžå¯ç æç€ºã
䜿çšäŸèµé¡¹æ£æ¥çšæ·åäžå¯ç æ¯åŠæ£ç¡®ã
-䞺æ€èŠäœ¿çš Python æ åæš¡å
`secrets` æ£æ¥çšæ·åäžå¯ç ã
+䞺æ€èŠäœ¿çš Python æ åæš¡å [`secrets`](https://docs.python.org/3/library/secrets.html) æ£æ¥çšæ·åäžå¯ç ã
`secrets.compare_digest()` éèŠä»
å
å« ASCII å笊ïŒè±è¯å笊ïŒç `bytes` æ `str`ïŒè¿æå³çå®äžéçšäºå`á`äžæ ·çå笊ïŒåŠ `Sebastián`ã
diff --git a/docs/zh/docs/advanced/security/index.md b/docs/zh/docs/advanced/security/index.md
index 84fec7aab8..e3a3ba9cea 100644
--- a/docs/zh/docs/advanced/security/index.md
+++ b/docs/zh/docs/advanced/security/index.md
@@ -2,7 +2,7 @@
## éå ç¹æ§ { #additional-features }
-é€ [æçš - çšæ·æå: å®å
šæ§](../../tutorial/security/index.md){.internal-link target=_blank} äžæ¶µççåèœä¹å€ïŒè¿æäžäºé¢å€çåèœæ¥å€çå®å
šæ§ã
+é€ [æçš - çšæ·æå: å®å
šæ§](../../tutorial/security/index.md) äžæ¶µççåèœä¹å€ïŒè¿æäžäºé¢å€çåèœæ¥å€çå®å
šæ§ã
/// tip | æç€º
@@ -14,6 +14,6 @@
## å
é
读æçš { #read-the-tutorial-first }
-æ¥äžæ¥çéšååè®Ÿäœ å·²ç»é
读äºäž»èŠç [æçš - çšæ·æå: å®å
šæ§](../../tutorial/security/index.md){.internal-link target=_blank}ã
+æ¥äžæ¥çéšååè®Ÿäœ å·²ç»é
读äºäž»èŠç [æçš - çšæ·æå: å®å
šæ§](../../tutorial/security/index.md)ã
å®ä»¬éœåºäºçžåçæŠå¿µïŒäœæ¯æäžäºé¢å€çåèœã
diff --git a/docs/zh/docs/advanced/security/oauth2-scopes.md b/docs/zh/docs/advanced/security/oauth2-scopes.md
index ce7facf4be..a1ecc641ca 100644
--- a/docs/zh/docs/advanced/security/oauth2-scopes.md
+++ b/docs/zh/docs/advanced/security/oauth2-scopes.md
@@ -60,7 +60,7 @@ OAuth2 è§èå°âäœçšåâå®ä¹äžºç±ç©ºæ Œåéçå笊䞲å衚ã
## å
šå±çºµè§ { #global-view }
-éŠå
ïŒè®©æä»¬å¿«éççäž**çšæ·æå**äž [OAuth2 å®ç°å¯ç ïŒå«ååžïŒãBearer + JWT 什ç](../../tutorial/security/oauth2-jwt.md){.internal-link target=_blank} 瀺äŸçžæ¯æåªäºååãç°åšåŒå§äœ¿çš OAuth2 äœçšåïŒ
+éŠå
ïŒè®©æä»¬å¿«éççäž**çšæ·æå**äž [OAuth2 å®ç°å¯ç ïŒå«ååžïŒãBearer + JWT 什ç](../../tutorial/security/oauth2-jwt.md) 瀺äŸçžæ¯æåªäºååãç°åšåŒå§äœ¿çš OAuth2 äœçšåïŒ
{* ../../docs_src/security/tutorial005_an_py310.py hl[5,9,13,47,65,106,108:116,122:126,130:136,141,157] *}
@@ -271,4 +271,4 @@ OAuth2 è§èå°âäœçšåâå®ä¹äžºç±ç©ºæ Œåéçå笊䞲å衚ã
## è£
é¥°åš `dependencies` äžç `Security` { #security-in-decorator-dependencies }
-å°±åäœ å¯ä»¥åšè£
饰åšç `dependencies` åæ°äžå®ä¹ `Depends` ç `list`ïŒè¯Šè§[è·¯åŸæäœè£
饰åšäŸèµé¡¹](../../tutorial/dependencies/dependencies-in-path-operation-decorators.md){.internal-link target=_blank}ïŒïŒäœ ä¹å¯ä»¥åšé£å¿é
å `Security` äœ¿çš `scopes`ã
+å°±åäœ å¯ä»¥åšè£
饰åšç `dependencies` åæ°äžå®ä¹ `Depends` ç `list`ïŒè¯Šè§[è·¯åŸæäœè£
饰åšäŸèµé¡¹](../../tutorial/dependencies/dependencies-in-path-operation-decorators.md)ïŒïŒäœ ä¹å¯ä»¥åšé£å¿é
å `Security` äœ¿çš `scopes`ã
diff --git a/docs/zh/docs/advanced/settings.md b/docs/zh/docs/advanced/settings.md
index b4def73eb5..31a7cc82de 100644
--- a/docs/zh/docs/advanced/settings.md
+++ b/docs/zh/docs/advanced/settings.md
@@ -8,7 +8,7 @@
/// tip | æç€º
-èŠçè§£ç¯å¢åéïŒäœ å¯ä»¥é
读[ç¯å¢åé](../environment-variables.md){.internal-link target=_blank}ã
+èŠçè§£ç¯å¢åéïŒäœ å¯ä»¥é
读[ç¯å¢åé](../environment-variables.md)ã
///
@@ -20,11 +20,11 @@
## Pydantic ç `Settings` { #pydantic-settings }
-幞è¿çæ¯ïŒPydantic æäŸäºäžäžªåŸå¥œçå·¥å
·æ¥å€çæ¥èªç¯å¢åéçè¿äºè®Ÿçœ®ïŒ
Pydantic: Settings managementã
+幞è¿çæ¯ïŒPydantic æäŸäºäžäžªåŸå¥œçå·¥å
·æ¥å€çæ¥èªç¯å¢åéçè¿äºè®Ÿçœ®ïŒ[PydanticïŒSettings 管ç](https://docs.pydantic.dev/latest/concepts/pydantic_settings/)ã
### å®è£
`pydantic-settings` { #install-pydantic-settings }
-éŠå
ïŒç¡®ä¿äœ åå»ºå¹¶æ¿æŽ»äº[èæç¯å¢](../virtual-environments.md){.internal-link target=_blank}ïŒç¶åå®è£
`pydantic-settings` å
ïŒ
+éŠå
ïŒç¡®ä¿äœ åå»ºå¹¶æ¿æŽ»äº[èæç¯å¢](../virtual-environments.md)ïŒç¶åå®è£
`pydantic-settings` å
ïŒ
@@ -100,7 +100,7 @@ $ ADMIN_EMAIL="deadpool@example.com" APP_NAME="ChimichangApp" fastapi run main.p
## åšåŠäžäžªæš¡åäžæŸçœ®è®Ÿçœ® { #settings-in-another-module }
-äœ å¯ä»¥æè¿äºè®Ÿçœ®æŸåšåŠäžäžªæš¡åæä»¶äžïŒå°±åäœ åš[æŽå€§çåºçš - å€äžªæä»¶](../tutorial/bigger-applications.md){.internal-link target=_blank}äžçå°ç飿 ·ã
+äœ å¯ä»¥æè¿äºè®Ÿçœ®æŸåšåŠäžäžªæš¡åæä»¶äžïŒå°±åäœ åš[æŽå€§çåºçš - å€äžªæä»¶](../tutorial/bigger-applications.md)äžçå°ç飿 ·ã
äŸåŠïŒå¯ä»¥æäžäžª `config.py` æä»¶ïŒ
@@ -112,7 +112,7 @@ $ ADMIN_EMAIL="deadpool@example.com" APP_NAME="ChimichangApp" fastapi run main.p
/// tip | æç€º
-äœ è¿éèŠäžäžª `__init__.py` æä»¶ïŒå°±åäœ åš[æŽå€§çåºçš - å€äžªæä»¶](../tutorial/bigger-applications.md){.internal-link target=_blank}äžçå°ç飿 ·ã
+äœ è¿éèŠäžäžª `__init__.py` æä»¶ïŒå°±åäœ åš[æŽå€§çåºçš - å€äžªæä»¶](../tutorial/bigger-applications.md)äžçå°ç飿 ·ã
///
@@ -172,7 +172,7 @@ $ ADMIN_EMAIL="deadpool@example.com" APP_NAME="ChimichangApp" fastapi run main.p
///
-Pydantic æ¯æäœ¿çšäžäžªå€éšåºæ¥ä»è¿ç±»æä»¶äžè¯»åãäœ å¯ä»¥åš
Pydantic Settings: Dotenv (.env) support äžé
读æŽå€ä¿¡æ¯ã
+Pydantic æ¯æäœ¿çšäžäžªå€éšåºæ¥ä»è¿ç±»æä»¶äžè¯»åãäœ å¯ä»¥åš [Pydantic SettingsïŒDotenvïŒ.envïŒæ¯æ](https://docs.pydantic.dev/latest/concepts/pydantic_settings/#dotenv-env-support) äžé
读æŽå€ä¿¡æ¯ã
/// tip | æç€º
@@ -197,7 +197,7 @@ APP_NAME="ChimichangApp"
/// tip | æç€º
-`model_config` 屿§ä»
çšäº Pydantic é
眮ãäœ å¯ä»¥åš
Pydantic: Concepts: Configuration äžé
读æŽå€ä¿¡æ¯ã
+`model_config` 屿§ä»
çšäº Pydantic é
眮ãäœ å¯ä»¥åš [PydanticïŒæŠå¿µïŒé
眮](https://docs.pydantic.dev/latest/concepts/config/) äžé
读æŽå€ä¿¡æ¯ã
///
@@ -291,7 +291,7 @@ participant execute as Execute function
è¿æ ·ïŒå®çè¡äžºå ä¹å°±åæ¯äžäžªå
šå±åéãäœç±äºå®äœ¿çšäºäŸèµé¡¹åœæ°ïŒæä»¬å¯ä»¥åšæµè¯æ¶åŸå®¹æå°èŠçå®ã
-`@lru_cache` æ¯ `functools` çäžéšåïŒå®å±äº Python æ ååºãäœ å¯ä»¥åš
Python ææ¡£äžå
³äº `@lru_cache` çç« èé
读æŽå€ä¿¡æ¯ã
+`@lru_cache` æ¯ `functools` çäžéšåïŒå®å±äº Python æ ååºãäœ å¯ä»¥åš [Python ææ¡£äžå
³äº `@lru_cache` çç« è](https://docs.python.org/3/library/functools.html#functools.lru_cache)é
读æŽå€ä¿¡æ¯ã
## å°ç» { #recap }
diff --git a/docs/zh/docs/advanced/stream-data.md b/docs/zh/docs/advanced/stream-data.md
new file mode 100644
index 0000000000..322561ac11
--- /dev/null
+++ b/docs/zh/docs/advanced/stream-data.md
@@ -0,0 +1,117 @@
+# æµåŒæ°æ® { #stream-data }
+
+åŠæäœ èŠæµåŒäŒ èŸå¯ä»¥ç»æå䞺 JSON çæ°æ®ïŒäœ åºè¯¥[æµåŒäŒ èŸ JSON Lines](../tutorial/stream-json-lines.md)ã
+
+äœåŠæäœ æ³æµåŒäŒ èŸçº¯äºè¿å¶æ°æ®æå笊䞲ïŒå¯ä»¥æäžé¢çæ¹æ³æäœã
+
+/// info | ä¿¡æ¯
+
+èª FastAPI 0.134.0 èµ·æ°å¢ã
+
+///
+
+## 䜿çšåºæ¯ { #use-cases }
+
+åŠæäœ æ³æµåŒäŒ èŸçº¯å笊䞲ïŒäŸåŠçŽæ¥æ¥èªæäžª AI LLM æå¡çèŸåºïŒå¯ä»¥äœ¿çšå®ã
+
+äœ ä¹å¯ä»¥çšå®æ¥æµåŒäŒ èŸå€§åäºè¿å¶æä»¶ïŒåšè¯»åçåæ¶æååéïŒæ éäžæ¬¡æ§æææå
容读å
¥å
åã
+
+äœ è¿å¯ä»¥çšè¿ç§æ¹åŒæµåŒäŒ èŸè§é¢æé³é¢ïŒçè³å¯ä»¥åšå€ççåæ¶çæå¹¶åéã
+
+## äœ¿çš `yield` ç `StreamingResponse` { #a-streamingresponse-with-yield }
+
+åŠæäœ åš*è·¯åŸæäœåœæ°*äžå£°æ `response_class=StreamingResponse`ïŒäœ å°±å¯ä»¥äœ¿çš `yield` äŸæ¬¡åéæ¯äžªæ°æ®åã
+
+{* ../../docs_src/stream_data/tutorial001_py310.py ln[1:23] hl[20,23] *}
+
+FastAPI äŒå°æ¯äžªæ°æ®ååæ ·äº€ç» `StreamingResponse`ïŒäžäŒå°è¯å°å
¶èœ¬æ¢äžº JSON æå类䌌å€çã
+
+### é async ç*è·¯åŸæäœåœæ°* { #non-async-path-operation-functions }
+
+äœ ä¹å¯ä»¥äœ¿çšåžžè§ç `def` åœæ°ïŒäžåžŠ `async`ïŒïŒå¹¶ä»¥çžåæ¹åŒäœ¿çš `yield`ã
+
+{* ../../docs_src/stream_data/tutorial001_py310.py ln[26:29] hl[27] *}
+
+### æ éæ³šè§£ { #no-annotation }
+
+äœ å
¶å®äžéèŠäžºæµåŒäºè¿å¶æ°æ®å£°æè¿åç±»åæ³šè§£ã
+
+ç±äº FastAPI äžäŒäœ¿çš Pydantic å°æ°æ®èœ¬æ¢äžº JSONïŒä¹äžäŒä»¥ä»»äœæ¹åŒåºååïŒåšè¿ç§æ
åµäžïŒç±»å泚解åªäŸäœ ççŒèŸåšåå·¥å
·äœ¿çšïŒFastAPI äžäŒäœ¿çšå®ã
+
+{* ../../docs_src/stream_data/tutorial001_py310.py ln[32:35] hl[33] *}
+
+è¿ä¹æå³çïŒäœ¿çš `StreamingResponse` æ¶ïŒäœ æ¥ææé粟确çæäžçŒç åèæ°æ®çèªç±ïŒåæ¶ä¹æ¿æ
çžåºç莣任ïŒå®äžç±»å泚解æ å
³ãð€
+
+### æµåŒäŒ èŸåè { #stream-bytes }
+
+äž»èŠççšäŸä¹äžæ¯æµåŒäŒ èŸ `bytes` èäžæ¯å笊䞲ïŒè¿åœç¶å¯ä»¥åå°ã
+
+{* ../../docs_src/stream_data/tutorial001_py310.py ln[44:47] hl[47] *}
+
+## èªå®ä¹ `PNGStreamingResponse` { #a-custom-pngstreamingresponse }
+
+åšäžé¢ç瀺äŸäžïŒèœç¶æåèæµåŒäŒ èŸäºæ°æ®ïŒäœååºæ²¡æ `Content-Type` 倎ïŒå æ€å®¢æ·ç«¯äžç¥éæ¥æ¶å°çæ°æ®ç±»åã
+
+äœ å¯ä»¥å建 `StreamingResponse` çèªå®ä¹åç±»ïŒå° `Content-Type` å€Žè®Ÿçœ®äžºäœ èŠæµåŒäŒ èŸçæ°æ®ç±»åã
+
+äŸåŠïŒäœ å¯ä»¥å建äžäžª `PNGStreamingResponse`ïŒéè¿ `media_type` 屿§æ `Content-Type` 倎讟眮䞺 `image/png`ïŒ
+
+{* ../../docs_src/stream_data/tutorial002_py310.py ln[6,19:20] hl[20] *}
+
+ç¶åäœ å¯ä»¥åš*è·¯åŸæäœåœæ°*äžéè¿ `response_class=PNGStreamingResponse` 䜿çšè¿äžªæ°ç±»ïŒ
+
+{* ../../docs_src/stream_data/tutorial002_py310.py ln[23:27] hl[23] *}
+
+### æš¡ææä»¶ { #simulate-a-file }
+
+åšè¿äžªç€ºäŸäžïŒæä»¬çš `io.BytesIO` æš¡æäºäžäžªæä»¶ïŒå®æ¯åªé©»çåšå
åäžçç±»æä»¶å¯¹è±¡ïŒäœæäŸçžåçæ¥å£ã
+
+äŸåŠïŒæä»¬å¯ä»¥å对æä»¶é£æ ·è¿ä»£å®æ¥æ¶è޹å
¶å
容ã
+
+{* ../../docs_src/stream_data/tutorial002_py310.py ln[1:27] hl[3,12:13,25] *}
+
+/// note | ææ¯ç»è
+
+åŠå€äž€äžªåé `image_base64` å `binary_image` 衚瀺äžåŒ åŸåïŒå
çš Base64 çŒç ïŒå蜬æ¢äžº bytesïŒæåäŒ ç» `io.BytesIO`ã
+
+åªæ¯äžºäºè®©å®ä»¬èœåç€ºäŸæŸåšåäžäžªæä»¶éïŒäŸ¿äºäœ çŽæ¥å€å¶è¿è¡ãð¥
+
+///
+
+éè¿äœ¿çš `with` 代ç åïŒæä»¬ç¡®ä¿åšçæåšåœæ°ïŒåžŠæ `yield` çåœæ°ïŒå®æåå
³éè¿äžªç±»æä»¶å¯¹è±¡ãä¹å°±æ¯åšåéå®ååºä¹åã
+
+åšè¿äžªç¹å®ç€ºäŸäžè¿å¹¶äžé£ä¹éèŠïŒå äžºå®æ¯äžäžªå
åäžçåæä»¶ïŒäœ¿çš `io.BytesIO`ïŒïŒäœå¯¹äºç宿件ïŒç¡®ä¿åšå®æçžå
³å·¥äœåå
³éæä»¶æ¯åŸéèŠçã
+
+### æä»¶äžåŒæ¥ { #files-and-async }
+
+倧倿°æ
åµäžïŒç±»æä»¶å¯¹è±¡é»è®€äž async å await äžå
Œå®¹ã
+
+äŸåŠïŒå®ä»¬æ²¡æ `await file.read()`ïŒä¹äžæ¯æ `async for chunk in file`ã
+
+èäžåŸå€æ
åµäžïŒè¯»åå®ä»¬æ¯äžäžªé»å¡æäœïŒå¯èœäŒé»å¡äºä»¶åŸªç¯ïŒïŒå äžºæ°æ®æ¥èªç£çæçœç»ã
+
+/// info | ä¿¡æ¯
+
+äžé¢ç瀺äŸå
¶å®æ¯äžªäŸå€ïŒå 䞺 `io.BytesIO` 对象已ç»åšå
åäžïŒæä»¥è¯»åå®äžäŒé»å¡ã
+
+äœåšè®žå€æ
åµäžïŒè¯»åæä»¶æç±»æä»¶å¯¹è±¡äŒåçé»å¡ã
+
+///
+
+䞺é¿å
é»å¡äºä»¶åŸªç¯ïŒäœ å¯ä»¥ç®åå°æ*è·¯åŸæäœåœæ°*声æäžºåžžè§ç `def`ïŒèäžæ¯ `async def`ïŒïŒè¿æ · FastAPI äŒåšäžäžªçº¿çšæ± å·¥äœçº¿çšäžè¿è¡å®ïŒä»èé¿å
é»å¡äž»äºä»¶åŸªç¯ã
+
+{* ../../docs_src/stream_data/tutorial002_py310.py ln[30:34] hl[31] *}
+
+/// tip | æç€º
+
+åŠæäœ éèŠåšåŒæ¥åœæ°éè°çšé»å¡ä»£ç ïŒæåšé»å¡åœæ°éè°çšåŒæ¥åœæ°ïŒå¯ä»¥äœ¿çš [Asyncer](https://asyncer.tiangolo.com)ïŒå®æ¯ FastAPI çå§åйåºã
+
+///
+
+### `yield from` { #yield-from }
+
+åœäœ åšè¿ä»£æäžªå¯¹è±¡ïŒäŸåŠç±»æä»¶å¯¹è±¡ïŒïŒå¹¶äžºæ¯äžªæ¡ç®æ§è¡ `yield` æ¶ïŒäœ ä¹å¯ä»¥äœ¿çš `yield from` çŽæ¥äº§åºæ¯äžªæ¡ç®ïŒä»èçå» `for` 埪ç¯ã
+
+è¿å¹¶äžæ¯ FastAPI ç¹æçåèœïŒåªæ¯ Python çè¯æ³ïŒäœè¿æ¯äžäžªåŒåŸç¥éçå°æå·§ãð
+
+{* ../../docs_src/stream_data/tutorial002_py310.py ln[37:40] hl[40] *}
diff --git a/docs/zh/docs/advanced/strict-content-type.md b/docs/zh/docs/advanced/strict-content-type.md
new file mode 100644
index 0000000000..973d1840c0
--- /dev/null
+++ b/docs/zh/docs/advanced/strict-content-type.md
@@ -0,0 +1,88 @@
+# äž¥æ Œç Content-Type æ£æ¥ { #strict-content-type-checking }
+
+é»è®€æ
åµäžïŒFastAPI 对 JSON 请æ±äœäœ¿çšäž¥æ Œç `Content-Type` å€Žæ£æ¥ãè¿æå³çïŒJSON 请æ±å¿
é¡»å
嫿æç `Content-Type` 倎ïŒäŸåŠ `application/json`ïŒïŒå
¶è¯·æ±äœæäŒè¢«æ JSON è§£æã
+
+## CSRF é£é© { #csrf-risk }
+
+æ€é»è®€è¡äžºåšäžäžªéåžžç¹å®çåºæ¯äžïŒå¯é²åŸ¡äžç±»è·šç«è¯·æ±äŒªé ïŒCSRFïŒæ»å»ã
+
+è¿ç±»æ»å»å©çšäºæµè§åšçäžäžªäºå®ïŒåœè¯·æ±æ»¡è¶³ä»¥äžæ¡ä»¶æ¶ïŒæµè§åšå
è®žèæ¬åšäžè¿è¡ä»»äœ CORS 颿£çæ
åµäžçŽæ¥åé请æ±ïŒ
+
+- 没æ `Content-Type` 倎ïŒäŸåŠäœ¿çš `fetch()` æºåžŠ `Blob` äœäžº bodyïŒ
+- äžäžåéä»»äœè®€è¯åæ®ã
+
+è¿ç§æ»å»äž»èŠåšä»¥äžæ
åµäžçžå
³ïŒ
+
+- åºçšåšæ¬å°ïŒåŠ `localhost`ïŒæå
çœäžè¿è¡
+- äžåºç𿲡æä»»äœè®€è¯ïŒå宿¥èªåäžçœç»ç请æ±éœå¯ä¿¡ã
+
+## æ»å»ç€ºäŸ { #example-attack }
+
+åè®Ÿäœ æå»ºäºäžäžªæ¬å°è¿è¡ç AI 代çã
+
+宿äŸäºäžäžª APIïŒå°å䞺
+
+```
+http://localhost:8000/v1/agents/multivac
+```
+
+åŠæäžäžªå端ïŒå°å䞺
+
+```
+http://localhost:8000
+```
+
+/// tip | æç€º
+
+泚æå®ä»¬çäž»æºçžåã
+
+///
+
+ä¹åïŒäœ å¯ä»¥éè¿å端让该 AI ä»£çæ¿äœ æ§è¡æäœã
+
+ç±äºå®åšæ¬å°è¿è¡ãèéæŽé²åšåŒæŸçäºèçœïŒäœ å³å®äžé
眮任äœè®€è¯ïŒåªä¿¡ä»»å¯¹æ¬å°çœç»ç访é®ã
+
+äºæ¯ïŒäœ çæäœçšæ·å®è£
å¹¶åšæ¬å°è¿è¡äºå®ã
+
+ç¶åä»ïŒå¥¹ïŒå¯èœäŒæåŒäžäžªæ¶æçœç«ïŒäŸåŠ
+
+```
+https://evilhackers.example.com
+```
+
+è¯¥æ¶æçœç«äœ¿çš `fetch()` æºåžŠ `Blob` äœäžº bodyïŒåæ¬å° API åé请æ±ïŒå°å䞺
+
+```
+http://localhost:8000/v1/agents/multivac
+```
+
+å°œç®¡æ¶æçœç«äžæ¬å°åºçšçäž»æºäžåïŒæµè§åšä»äžäŒè§Šå CORS 颿£è¯·æ±ïŒåå æ¯ïŒ
+
+- 请æ±äžæ¶åä»»äœè®€è¯ïŒæ éåéåæ®ã
+- æµè§åšè®€äžºå®å¹¶æªåé JSONïŒå äžºçŒºå° `Content-Type` 倎ïŒã
+
+äºæ¯ïŒè¯¥æ¶æçœç«å°±å¯èœè®©æ¬å° AI ä»£çæ¿çšæ·ååèæ¿åéæ€ææ¶æ¯âŠâŠçè³æŽç³ãð
+
+## åŒæŸçäºèçœ { #open-internet }
+
+åŠæäœ çåºçšéšçœ²åšåŒæŸçäºèçœïŒäœ äžäŒâä¿¡ä»»çœç»âïŒä¹äžäŒå
讞任äœäººäžç»è®€è¯å°±åéç¹æè¯·æ±ã
+
+æ»å»è
å®å
šå¯ä»¥çŽæ¥è¿è¡èæ¬åäœ ç API åé请æ±ïŒæ éå婿µè§åšäº€äºïŒå æ€äœ åŸå¯èœå·²ç»å¯¹ä»»äœç¹æç«¯ç¹å奜äºå®å
šé²æ€ã
+
+åšè¿ç§æ
åµäžïŒä»¥äžæ»å»/é£é©äžéçšäºäœ ã
+
+该é£é©/æ»å»äž»èŠåçåšåºçšè¿è¡äºæ¬å°çœç»ãäžâä»
äŸèµçœç»é犻äœäžºä¿æ€âçåºæ¯ã
+
+## å
讞æ Content-Type çè¯·æ± { #allowing-requests-without-content-type }
+
+åŠæäœ éèŠå
Œå®¹äžåé `Content-Type` 倎ç客æ·ç«¯ïŒå¯ä»¥éè¿è®Ÿçœ® `strict_content_type=False` æ¥å
³éäž¥æ Œæ£æ¥ïŒ
+
+{* ../../docs_src/strict_content_type/tutorial001_py310.py hl[4] *}
+
+å¯çšè¯¥è®Ÿçœ®åïŒçŒºå° `Content-Type` 倎ç请æ±å
¶è¯·æ±äœä¹äŒæ JSON è§£æïŒè¿äžæ§çæ¬ FastAPI çè¡äžºäžèŽã
+
+/// info | ä¿¡æ¯
+
+æ€è¡äžºåé
çœ®åš FastAPI 0.132.0 äžæ°å¢ã
+
+///
diff --git a/docs/zh/docs/advanced/sub-applications.md b/docs/zh/docs/advanced/sub-applications.md
index 3e61610a37..b0230402bf 100644
--- a/docs/zh/docs/advanced/sub-applications.md
+++ b/docs/zh/docs/advanced/sub-applications.md
@@ -30,25 +30,25 @@
### æ¥çèªåš API ææ¡£ { #check-the-automatic-api-docs }
-ç°åšïŒäœ¿çšäœ çæä»¶è¿è¡ `fastapi` åœä»€ïŒ
+ç°åšïŒè¿è¡ `fastapi` åœä»€ïŒ
```console
-$ fastapi dev main.py
+$ fastapi dev
INFO: Uvicorn running on http://127.0.0.1:8000 (Press CTRL+C to quit)
```
-ç¶ååš
http://127.0.0.1:8000/docs æåŒææ¡£ã
+ç¶ååš [http://127.0.0.1:8000/docs](http://127.0.0.1:8000/docs) æåŒææ¡£ã
äžåŸæŸç€ºçæ¯äž»åºçš API ææ¡£ïŒåªå
æ¬å
¶èªæç*è·¯åŸæäœ*ã

-ç¶åæ¥çååºçšææ¡£
http://127.0.0.1:8000/subapi/docsã
+ç¶åæ¥çååºçšææ¡£ [http://127.0.0.1:8000/subapi/docs](http://127.0.0.1:8000/subapi/docs)ã
äžåŸæŸç€ºçæ¯ååºçšç API ææ¡£ïŒä¹æ¯åªå
æ¬å
¶èªæç*è·¯åŸæäœ*ïŒææè¿äºè·¯åŸæäœéœåš `/subapi` åè·¯åŸåçŒäžã
@@ -64,4 +64,4 @@ $ fastapi dev main.py
å¹¶äžååºçšè¿å¯ä»¥åæèœœååºçšïŒäžåéœäŒæ£åžžè¿è¡ïŒFastAPI å¯ä»¥èªåšå€çææ `root_path`ã
-å
³äº `root_path` ååŠäœæŸåŒäœ¿çš `root_path` çå
容ïŒè¯Šè§[䜿çšä»£ç](behind-a-proxy.md){.internal-link target=_blank}äžç« ã
+å
³äº `root_path` ååŠäœæŸåŒäœ¿çš `root_path` çå
容ïŒè¯Šè§[䜿çšä»£ç](behind-a-proxy.md)äžç« ã
diff --git a/docs/zh/docs/advanced/templates.md b/docs/zh/docs/advanced/templates.md
index 37575aff29..952f438c73 100644
--- a/docs/zh/docs/advanced/templates.md
+++ b/docs/zh/docs/advanced/templates.md
@@ -8,7 +8,7 @@ Flask çå·¥å
·äœ¿çšç Jinja2 æ¯æçšçæš¡æ¿åŒæã
## å®è£
äŸèµé¡¹ { #install-dependencies }
-ç¡®ä¿äœ å建äžäžª[èæç¯å¢](../virtual-environments.md){.internal-link target=_blank}ïŒæ¿æŽ»å®ïŒå¹¶å®è£
`jinja2`ïŒ
+ç¡®ä¿äœ å建äžäžª[èæç¯å¢](../virtual-environments.md)ïŒæ¿æŽ»å®ïŒå¹¶å®è£
`jinja2`ïŒ
@@ -29,14 +29,14 @@ $ pip install jinja2
{* ../../docs_src/templates/tutorial001_py310.py hl[4,11,15:18] *}
-/// note
+/// note | 泚æ
åš FastAPI 0.108.0ïŒStarlette 0.29.0 ä¹åïŒ`name` æ¯ç¬¬äžäžªåæ°ã
å¹¶äžïŒåšæ€ä¹åïŒ`request` 对象æ¯äœäžº context çäžéšå以é®åŒå¯¹ç圢åŒäŒ éçã
///
-/// tip
+/// tip | æç€º
éè¿å£°æ `response_class=HTMLResponse`ïŒAPI ææ¡£å°±èœè¯å«ååºçå¯¹è±¡æ¯ HTMLã
@@ -122,4 +122,4 @@ Item ID: 42
## æŽå€è¯Žæ { #more-details }
-å
æ¬æµè¯æš¡æ¿çæŽå€è¯Šæ
ïŒè¯·åé
Starlette 宿¹ææ¡£ - æš¡æ¿ã
+å
æ¬åŠäœæµè¯æš¡æ¿åšå
çæŽå€è¯Šæ
ïŒè¯·æ¥ç [Starlette çæš¡æ¿ææ¡£](https://www.starlette.dev/templates/)ã
diff --git a/docs/zh/docs/advanced/testing-websockets.md b/docs/zh/docs/advanced/testing-websockets.md
index e435e41e23..6d2e4b0988 100644
--- a/docs/zh/docs/advanced/testing-websockets.md
+++ b/docs/zh/docs/advanced/testing-websockets.md
@@ -8,6 +8,6 @@
/// note | 泚æ
-æŽå€ç»è请æ¥ç Starlette çææ¡£ïŒ
æµè¯ WebSocketsã
+æŽå€ç»è请æ¥ç Starlette çææ¡£ïŒ[æµè¯ WebSockets](https://www.starlette.dev/testclient/#testing-websocket-sessions)ã
///
diff --git a/docs/zh/docs/advanced/using-request-directly.md b/docs/zh/docs/advanced/using-request-directly.md
index 8cfad4203a..519443d9d2 100644
--- a/docs/zh/docs/advanced/using-request-directly.md
+++ b/docs/zh/docs/advanced/using-request-directly.md
@@ -15,7 +15,7 @@
## `Request` 对象çç»è { #details-about-the-request-object }
-å®é
äžïŒ**FastAPI** çåºå±æ¯ **Starlette**ïŒ**FastAPI** åªäžè¿æ¯åš **Starlette** 顶屿äŸäºäžäºå·¥å
·ïŒæä»¥èœçŽæ¥äœ¿çš Starlette ç
`Request` 对象ã
+å®é
äžïŒ**FastAPI** çåºå±æ¯ **Starlette**ïŒ**FastAPI** åªäžè¿æ¯åš **Starlette** 顶屿äŸäºäžäºå·¥å
·ïŒæä»¥èœçŽæ¥äœ¿çš Starlette ç [`Request`](https://www.starlette.dev/requests/) 对象ã
äœçŽæ¥ä» `Request` 对象æåæ°æ®æ¶ïŒäŸåŠïŒè¯»å请æ±äœïŒïŒè¿äºæ°æ®äžäŒè¢« **FastAPI** éªè¯ãèœ¬æ¢æææ¡£åïŒäœ¿çš OpenAPIïŒäžºèªåšç API çšæ·çé¢ïŒã
@@ -45,7 +45,7 @@
## `Request` ææ¡£ { #request-documentation }
-æŽå€ç»è诊è§
Starlette 宿¡£ - `Request` 对象ã
+äœ å¯ä»¥åš[Starlette 宿¹ææ¡£ç«ç¹ç `Request` 对象](https://www.starlette.dev/requests/)äžé
读æŽå€ç»èã
/// note | ææ¯ç»è
diff --git a/docs/zh/docs/advanced/websockets.md b/docs/zh/docs/advanced/websockets.md
index a4cdae3a22..d90ef87339 100644
--- a/docs/zh/docs/advanced/websockets.md
+++ b/docs/zh/docs/advanced/websockets.md
@@ -1,10 +1,10 @@
# WebSockets { #websockets }
-æšå¯ä»¥åš **FastAPI** äžäœ¿çš
WebSocketsã
+æšå¯ä»¥åš **FastAPI** äžäœ¿çš [WebSockets](https://developer.mozilla.org/en-US/docs/Web/API/WebSockets_API)ã
## å®è£
`websockets` { #install-websockets }
-è¯·ç¡®ä¿æšå建äžäžª[èæç¯å¢](../virtual-environments.md){.internal-link target=_blank}ãæ¿æŽ»å®ïŒå¹¶å®è£
`websockets`ïŒäžäžªè®©äœ¿çšâWebSocketâåè®®æŽå®¹æç Python åºïŒïŒ
+è¯·ç¡®ä¿æšå建äžäžª[èæç¯å¢](../virtual-environments.md)ãæ¿æŽ»å®ïŒå¹¶å®è£
`websockets`ïŒäžäžªè®©äœ¿çšâWebSocketâåè®®æŽå®¹æç Python åºïŒïŒ
@@ -64,19 +64,19 @@ $ pip install websockets
## å°è¯äžäž { #try-it }
-åŠææšçæä»¶å䞺 `main.py`ïŒè¯·äœ¿çšä»¥äžåœä»€è¿è¡åºçšçšåºïŒ
+å°ä»£ç æŸåš `main.py`ïŒç¶åè¿è¡äœ çåºçšçšåºïŒ
```console
-$ fastapi dev main.py
+$ fastapi dev
INFO: Uvicorn running on http://127.0.0.1:8000 (Press CTRL+C to quit)
```
-åšæµè§åšäžæåŒ
http://127.0.0.1:8000ã
+åšæµè§åšäžæåŒ [http://127.0.0.1:8000](http://127.0.0.1:8000)ã
æšå°çå°äžäžªç®åç页é¢ïŒåŠäžæç€ºïŒ
@@ -86,7 +86,7 @@ $ fastapi dev main.py

-æšç **FastAPI** åºçšçšåºå°åå€ïŒ
+æšç **FastAPI** åºçšçšåºå°éè¿ WebSockets åå€ïŒ

@@ -115,25 +115,25 @@ $ fastapi dev main.py
ç±äºè¿æ¯äžäžª WebSocketïŒæåº `HTTPException` å¹¶äžæ¯åŸåçïŒèæ¯æåº `WebSocketException`ã
-æšå¯ä»¥äœ¿çš
è§èäžå®ä¹çææä»£ç ã
+æšå¯ä»¥äœ¿çš[è§èäžå®ä¹çææä»£ç ](https://tools.ietf.org/html/rfc6455#section-7.4.1)ã
///
### å°è¯åžŠæäŸèµé¡¹ç WebSockets { #try-the-websockets-with-dependencies }
-åŠææšçæä»¶å䞺 `main.py`ïŒè¯·äœ¿çšä»¥äžåœä»€è¿è¡åºçšçšåºïŒ
+è¿è¡äœ çåºçšçšåºïŒ
```console
-$ fastapi dev main.py
+$ fastapi dev
INFO: Uvicorn running on http://127.0.0.1:8000 (Press CTRL+C to quit)
```
-åšæµè§åšäžæåŒ
http://127.0.0.1:8000ã
+åšæµè§åšäžæåŒ [http://127.0.0.1:8000](http://127.0.0.1:8000)ã
åšé¡µé¢äžïŒæšå¯ä»¥è®Ÿçœ®ïŒ
@@ -174,7 +174,7 @@ Client #1596980209979 left the chat
äœè¯·è®°äœïŒç±äºææå
容éœåšå
åäžä»¥å䞪å衚ç圢åŒå€çïŒå æ€å®åªèœåšè¿çšè¿è¡æ¶å·¥äœïŒå¹¶äžåªèœäœ¿çšå䞪è¿çšã
-åŠææšéèŠäž FastAPI éææŽç®åäœæŽåŒºå€§çåèœïŒæ¯æ RedisãPostgreSQL æå
¶ä»åèœïŒè¯·æ¥ç
encode/broadcasterã
+åŠææšéèŠäž FastAPI éææŽç®åäœæŽåŒºå€§çåèœïŒæ¯æ RedisãPostgreSQL æå
¶ä»åèœïŒè¯·æ¥ç [encode/broadcaster](https://github.com/encode/broadcaster)ã
///
@@ -182,5 +182,5 @@ Client #1596980209979 left the chat
èŠäºè§£æŽå€é项ïŒè¯·æ¥ç Starlette çææ¡£ïŒ
-*
`WebSocket` ç±»ã
-*
åºäºç±»ç WebSocket å€çã
+* [`WebSocket` ç±»](https://www.starlette.dev/websockets/)ã
+* [åºäºç±»ç WebSocket å€ç](https://www.starlette.dev/endpoints/#websocketendpoint)ã
diff --git a/docs/zh/docs/advanced/wsgi.md b/docs/zh/docs/advanced/wsgi.md
index 487fbf8ddb..038b672f8a 100644
--- a/docs/zh/docs/advanced/wsgi.md
+++ b/docs/zh/docs/advanced/wsgi.md
@@ -1,6 +1,6 @@
# å
å« WSGI - FlaskïŒDjangoïŒå
¶å® { #including-wsgi-flask-django-others }
-æšå¯ä»¥æèœœ WSGI åºçšïŒæ£åŠæšåš [ååºçš - æèœœ](sub-applications.md){.internal-link target=_blank}ã[åšä»£çä¹å](behind-a-proxy.md){.internal-link target=_blank} äžæçå°ç飿 ·ã
+æšå¯ä»¥æèœœ WSGI åºçšïŒæ£åŠæšåš [ååºçš - æèœœ](sub-applications.md)ã[åšä»£çä¹å](behind-a-proxy.md) äžæçå°ç飿 ·ã
䞺æ€, æšå¯ä»¥äœ¿çš `WSGIMiddleware` æ¥å
è£
äœ ç WSGI åºçšïŒåŠïŒFlaskïŒDjangoïŒççã
@@ -36,13 +36,13 @@
å
¶äœç请æ±åäŒè¢« **FastAPI** å€çã
-åŠæäœ è¿è¡å®å¹¶è®¿é®
http://localhost:8000/v1/ïŒäœ å°äŒçå°ç± Flask è¿åçååºïŒ
+åŠæäœ è¿è¡å®å¹¶è®¿é® [http://localhost:8000/v1/](http://localhost:8000/v1/)ïŒäœ å°äŒçå°ç± Flask è¿åçååºïŒ
```txt
Hello, World from Flask!
```
-åŠæäœ è®¿é®
http://localhost:8000/v2ïŒäœ å°äŒçå°ç± FastAPI è¿åçååºïŒ
+åŠæäœ è®¿é® [http://localhost:8000/v2](http://localhost:8000/v2)ïŒäœ å°äŒçå°ç± FastAPI è¿åçååºïŒ
```JSON
{
diff --git a/docs/zh/docs/alternatives.md b/docs/zh/docs/alternatives.md
index 8a552c91d4..fe7aa98698 100644
--- a/docs/zh/docs/alternatives.md
+++ b/docs/zh/docs/alternatives.md
@@ -14,7 +14,7 @@
## å
åçå·¥å
· { #previous-tools }
-###
Django { #django }
+### [Django](https://www.djangoproject.com/) { #django }
宿¯ææµè¡äžè¢«å¹¿æ³ä¿¡ä»»ç Python æ¡æ¶ã被çšäºæå»º Instagram çç³»ç»ã
@@ -22,7 +22,7 @@
宿åçšäºåšåç«¯çæ HTMLïŒèäžæ¯å建ç±ç°ä»£å端ïŒåŠ ReactãVue.jsãAngularïŒæäžä¹éä¿¡çå
¶ä»ç³»ç»ïŒåŠ
IoT 讟å€ïŒäœ¿çšç APIã
-###
Django REST Framework { #django-rest-framework }
+### [Django REST Framework](https://www.django-rest-framework.org/) { #django-rest-framework }
Django REST framework äœäžºäžäžªçµæŽ»å·¥å
·ç®±èå建ïŒçšäºåšåºå±äœ¿çš Django æå»º Web APIïŒä»èå¢åŒºå
¶ API èœåã
@@ -42,7 +42,7 @@ Django REST Framework ç± Tom Christie å建ãä»ä¹æ¯ Starlette å Uvicorn
///
-###
Flask { #flask }
+### [Flask](https://flask.palletsprojects.com) { #flask }
Flask æ¯äžäžªâåŸ®æ¡æ¶âïŒå®äžå
嫿°æ®åºéæïŒä¹æ²¡æå Django 飿 ·ç讞å€é»è®€å
建åèœã
@@ -63,7 +63,7 @@ Flask æ¯äžäžªâåŸ®æ¡æ¶âïŒå®äžå
嫿°æ®åºéæïŒä¹æ²¡æå Djan
///
-###
Requests { #requests }
+### [Requests](https://requests.readthedocs.io) { #requests }
**FastAPI** å®é
äžäžæ¯ **Requests** çæ¿ä»£åãå®ä»¬çäœçšèåŽå®å
šäžåã
@@ -99,13 +99,13 @@ def read_url():
/// check | å¯å **FastAPI**ïŒ
-- æäŸç®åçŽè§ç APIã
-- çŽæ¥ãèªç¶å°äœ¿çš HTTP æ¹æ³åïŒæäœïŒã
-- å
·å€åçé»è®€åŒïŒåæ¶æ¯æåŒºå€§å®å¶èœåã
+* æäŸç®åçŽè§ç APIã
+* çŽæ¥ãèªç¶å°äœ¿çš HTTP æ¹æ³åïŒæäœïŒã
+* å
·å€åçé»è®€åŒïŒåæ¶æ¯æåŒºå€§å®å¶èœåã
///
-###
Swagger /
OpenAPI { #swagger-openapi }
+### [Swagger](https://swagger.io/) / [OpenAPI](https://github.com/OAI/OpenAPI-Specification/) { #swagger-openapi }
ææ³ä» Django REST Framework åŸå°çäž»èŠç¹æ§ä¹äžæ¯èªåš API ææ¡£ã
@@ -123,8 +123,8 @@ def read_url():
å¹¶éæåºäºæ åççšæ·çé¢å·¥å
·ïŒ
--
Swagger UI
--
ReDoc
+* [Swagger UI](https://github.com/swagger-api/swagger-ui)
+* [ReDoc](https://github.com/Rebilly/ReDoc)
éæ©è¿äž€è
æ¯å 䞺å®ä»¬çžåœæµè¡äžçš³å®ïŒäœçšäœæçŽ¢ïŒäœ å°±èœæŸå°æ°åç§ OpenAPI çæ¿ä»£çšæ·çé¢ïŒéœå¯ä»¥äž **FastAPI** æé
䜿çšïŒã
@@ -134,7 +134,7 @@ def read_url():
æè¥å¹²åºäº Flask ç REST æ¡æ¶ïŒäœåšæå
¥æ¶éŽç²Ÿåæ·±å
¥è°ç åïŒæåç°è®žå€å·²åæ¢ç»Žæ€æè¢«åŒçšïŒå¹¶ååšå€å€æªè§£å³é®é¢ïŒäžå€ªéåéçšã
-###
Marshmallow { #marshmallow }
+### [Marshmallow](https://marshmallow.readthedocs.io/en/stable/) { #marshmallow }
API ç³»ç»æéçäž»èŠç¹æ§ä¹äžæ¯æ°æ®â
åºååâïŒå³å°ä»£ç ïŒPythonïŒäžçæ°æ®èœ¬æ¢äžºå¯éè¿çœç»åéç圢åŒãäŸåŠïŒå°å
嫿°æ®åºæ°æ®ç对象蜬æ¢äžº JSON 对象ãå° `datetime` 对象蜬æ¢äžºå笊䞲çã
@@ -152,7 +152,7 @@ API çåŠäžäžªéèŠç¹æ§æ¯æ°æ®æ ¡éªïŒç¡®ä¿æ°æ®åšç»å®çºŠæäžæ¯
///
-###
Webargs { #webargs }
+### [Webargs](https://webargs.readthedocs.io/en/latest/) { #webargs }
API çåŠäžäžªéèŠéæ±æ¯ä»äŒ å
¥è¯·æ±äž
è§£ææ°æ®ã
@@ -174,7 +174,7 @@ Webargs ç±äž Marshmallow çžåçåŒåè
å建ã
///
-###
APISpec { #apispec }
+### [APISpec](https://apispec.readthedocs.io/en/stable/) { #apispec }
Marshmallow äž Webargs éè¿æä»¶æäŸäºæ ¡éªãè§£æäžåºååã
@@ -204,7 +204,7 @@ APISpec ç±äž Marshmallow çžåçåŒåè
å建ã
///
-###
Flask-apispec { #flask-apispec }
+### [Flask-apispec](https://flask-apispec.readthedocs.io/en/latest/) { #flask-apispec }
è¿æ¯äžäžª Flask æä»¶ïŒå° WebargsãMarshmallow äž APISpec ç»ååšäžèµ·ã
@@ -218,11 +218,11 @@ APISpec ç±äž Marshmallow çžåçåŒåè
å建ã
䜿çšå®ä¿æäºè¥å¹² Flask å
šæ èææ¶çè¯çãä»¥äžæ¯æïŒä»¥åè¥å¹²å€éšå¢éïŒè³ä»äœ¿çšçäž»èŠææ¯æ ïŒ
-*
https://github.com/tiangolo/full-stack
-*
https://github.com/tiangolo/full-stack-flask-couchbase
-*
https://github.com/tiangolo/full-stack-flask-couchdb
+* [https://github.com/tiangolo/full-stack](https://github.com/tiangolo/full-stack)
+* [https://github.com/tiangolo/full-stack-flask-couchbase](https://github.com/tiangolo/full-stack-flask-couchbase)
+* [https://github.com/tiangolo/full-stack-flask-couchdb](https://github.com/tiangolo/full-stack-flask-couchdb)
-è¿äºå
šæ èææ¶ä¹æäžºäº[**FastAPI** 项ç®èææ¶](project-generation.md){.internal-link target=_blank}çåºç¡ã
+è¿äºå
šæ èææ¶ä¹æäžºäº[**FastAPI** 项ç®èææ¶](project-generation.md)çåºç¡ã
/// info | ä¿¡æ¯
@@ -236,7 +236,7 @@ Flask-apispec ç±äž Marshmallow çžåçåŒåè
å建ã
///
-###
NestJSïŒä»¥å
AngularïŒ { #nestjs-and-angular }
+### [NestJS](https://nestjs.com/)ïŒä»¥å [Angular](https://angular.io/)ïŒ { #nestjs-and-angular }
è¿çè³äžæ¯ PythonãNestJS æ¯äžäžª JavaScriptïŒTypeScriptïŒç NodeJS æ¡æ¶ïŒå Angular å¯åã
@@ -258,13 +258,13 @@ Flask-apispec ç±äž Marshmallow çžåçåŒåè
å建ã
///
-###
Sanic { #sanic }
+### [Sanic](https://sanic.readthedocs.io/en/latest/) { #sanic }
宿¯ææ©çäžæ¹åºäº `asyncio` çæé Python æ¡æ¶ä¹äžïŒäžååŸäž Flask åŸçžäŒŒã
/// note | ææ¯ç»è
-å®äœ¿çšäº
`uvloop` æ¥æ¿ä»£ Python é»è®€ç `asyncio` 埪ç¯ãè¿æ£æ¯å®åŠæ€ä¹å¿«çåå ã
+å®äœ¿çšäº [`uvloop`](https://github.com/MagicStack/uvloop) æ¥æ¿ä»£ Python é»è®€ç `asyncio` 埪ç¯ãè¿æ£æ¯å®åŠæ€ä¹å¿«çåå ã
宿Ÿç¶å¯åäº Uvicorn å StarletteïŒåšå
¬åŒçåºåæµè¯äžïŒå®ä»¬ç®åæ¯ Sanic æŽå¿«ã
@@ -278,7 +278,7 @@ Flask-apispec ç±äž Marshmallow çžåçåŒåè
å建ã
///
-###
Falcon { #falcon }
+### [Falcon](https://falconframework.org/) { #falcon }
Falcon æ¯åŠäžäžªé«æ§èœ Python æ¡æ¶ïŒå®è¢«è®Ÿè®¡äžºç²Ÿç®äžå¯äœäžº Hug çå
¶ä»æ¡æ¶çåºç¡ã
@@ -294,7 +294,7 @@ Falcon æ¯åŠäžäžªé«æ§èœ Python æ¡æ¶ïŒå®è¢«è®Ÿè®¡äžºç²Ÿç®äžå¯äœäžº H
///
-###
Molten { #molten }
+### [Molten](https://moltenframework.com/) { #molten }
æåšæå»º **FastAPI** çæ©æé¶æ®µåç°äº Moltenã宿äžå°çžäŒŒçæ³æ³ïŒ
@@ -318,7 +318,7 @@ Falcon æ¯åŠäžäžªé«æ§èœ Python æ¡æ¶ïŒå®è¢«è®Ÿè®¡äžºç²Ÿç®äžå¯äœäžº H
///
-###
Hug { #hug }
+### [Hug](https://github.com/hugapi/hug) { #hug }
Hug æ¯ææ©äœ¿çš Python ç±»åæç€ºæ¥å£°æ API åæ°ç±»åçæ¡æ¶ä¹äžãè¿äžç»åŠæ³æ³ä¹å¯åäºå
¶ä»å·¥å
·ã
@@ -334,7 +334,7 @@ Hug æ¯ææ©äœ¿çš Python ç±»åæç€ºæ¥å£°æ API åæ°ç±»åçæ¡æ¶ä¹äž
/// info | ä¿¡æ¯
-Hug ç± Timothy Crosley å建ïŒä»ä¹æ¯
`isort` çäœè
ïŒè¿æ¯äžäžªèœèªåšæåº Python æä»¶äžå¯Œå
¥çäŒç§å·¥å
·ã
+Hug ç± Timothy Crosley å建ïŒä»ä¹æ¯ [`isort`](https://github.com/timothycrosley/isort) çäœè
ïŒè¿æ¯äžäžªèœèªåšæåº Python æä»¶äžå¯Œå
¥çäŒç§å·¥å
·ã
///
@@ -348,7 +348,7 @@ Hug å¯å **FastAPI** åšåœæ°äžå£°æ `response` åæ°ïŒçšäºè®Ÿçœ® heade
///
-###
APIStar (<= 0.5) { #apistar-0-5 }
+### [APIStar](https://github.com/encode/apistar) (<= 0.5) { #apistar-0-5 }
å°±åšå³å®åšææå»º **FastAPI** ä¹åïŒææŸå°äº **APIStar** æå¡åšãå®å ä¹å
·å€ææ³èŠçäžåïŒè®Ÿè®¡ä¹åŸåºè²ã
@@ -398,7 +398,7 @@ APIStar ç± Tom Christie å建ãä»è¿å建äºïŒ
## **FastAPI** æäœ¿çšçç»ä»¶ { #used-by-fastapi }
-###
Pydantic { #pydantic }
+### [Pydantic](https://docs.pydantic.dev/) { #pydantic }
Pydantic æ¯äžäžªåºäº Python ç±»åæç€ºæ¥å®ä¹æ°æ®æ ¡éªãåºååäžææ¡£ïŒäœ¿çš JSON SchemaïŒçåºã
@@ -414,7 +414,7 @@ Pydantic æ¯äžäžªåºäº Python ç±»åæç€ºæ¥å®ä¹æ°æ®æ ¡éªãåºååäž
///
-###
Starlette { #starlette }
+### [Starlette](https://www.starlette.dev/) { #starlette }
Starlette æ¯äžäžªèœ»é级ç
ASGI æ¡æ¶/å·¥å
·éïŒéåžžéåæå»ºé«æ§èœç asyncio æå¡ã
@@ -459,7 +459,7 @@ ASGI æ¯ç± Django æ žå¿å¢éæåæšåšçæ°âæ åâãå®å°äžæ¯æ£
///
-###
Uvicorn { #uvicorn }
+### [Uvicorn](https://www.uvicorn.dev/) { #uvicorn }
Uvicorn æ¯äžäžªåºäº uvloop äž httptools æå»ºçæé ASGI æå¡åšã
@@ -473,10 +473,10 @@ Uvicorn æ¯äžäžªåºäº uvloop äž httptools æå»ºçæé ASGI æå¡åšã
äœ ä¹å¯ä»¥äœ¿çš `--workers` åœä»€è¡é项以è·åŸåŒæ¥çå€è¿çšæå¡åšã
-æŽå€ç»èè§[éšçœ²](deployment/index.md){.internal-link target=_blank}äžèã
+æŽå€ç»èè§[éšçœ²](deployment/index.md)äžèã
///
## åºåäžé床 { #benchmarks-and-speed }
-èŠçè§£ãæ¯èŸå¹¶æ¥ç UvicornãStarlette äž FastAPI ä¹éŽçå·®åŒïŒè¯·æ¥ç[åºå](benchmarks.md){.internal-link target=_blank}äžèã
+èŠçè§£ãæ¯èŸå¹¶æ¥ç UvicornãStarlette äž FastAPI ä¹éŽçå·®åŒïŒè¯·æ¥ç[åºå](benchmarks.md)äžèã
diff --git a/docs/zh/docs/async.md b/docs/zh/docs/async.md
index 36d875f515..92ee5ef22f 100644
--- a/docs/zh/docs/async.md
+++ b/docs/zh/docs/async.md
@@ -141,7 +141,7 @@ Python çç°ä»£çæ¬æ¯æéè¿äžç§å«**"åçš"**ââäœ¿çš `async` å
/// info | ä¿¡æ¯
-æŒäº®çæç»æ¥èª
Ketrina Thompson. ðš
+æŒäº®çæç»æ¥èª [Ketrina Thompson](https://www.instagram.com/ketrinadrawsalot)ãðš
///
@@ -207,7 +207,7 @@ Python çç°ä»£çæ¬æ¯æéè¿äžç§å«**"åçš"**ââäœ¿çš `async` å
/// info | ä¿¡æ¯
-æŒäº®çæç»æ¥èª
Ketrina Thompson. ðš
+æŒäº®çæç»æ¥èª [Ketrina Thompson](https://www.instagram.com/ketrinadrawsalot)ãðš
///
@@ -251,7 +251,7 @@ Python çç°ä»£çæ¬æ¯æéè¿äžç§å«**"åçš"**ââäœ¿çš `async` å
è¿äž **FastAPI** çæ§èœæ°Žå¹³çžåã
-äœ å¯ä»¥åæ¶æ¥æå¹¶è¡æ§ååŒæ¥æ§ïŒäœ å¯ä»¥è·åŸæ¯å€§å€æ°ç»è¿æµè¯ç NodeJS æ¡æ¶æŽé«çæ§èœïŒå¹¶äžäž Go äžçžäžäžïŒ Go æ¯äžç§æŽæ¥è¿äº C ççŒè¯è¯èšïŒ
å
šéšåœåäº StarletteïŒã
+äœ å¯ä»¥åæ¶æ¥æå¹¶è¡æ§ååŒæ¥æ§ïŒäœ å¯ä»¥è·åŸæ¯å€§å€æ°ç»è¿æµè¯ç NodeJS æ¡æ¶æŽé«çæ§èœïŒå¹¶äžäž Go äžçžäžäžïŒ Go æ¯äžç§æŽæ¥è¿äº C ççŒè¯è¯èšïŒ[å
šéšåœåäº Starlette](https://www.techempower.com/benchmarks/#section=data-r17&hw=ph&test=query&l=zijmkf-1)ïŒã
### 并忝并è¡å¥œåïŒ { #is-concurrency-better-than-parallelism }
@@ -298,7 +298,7 @@ CPU å¯éåæäœçåžžè§ç€ºäŸæ¯éèŠå€æçæ°åŠå€çã
è¿äžç¹ïŒåå äž Python æ¯**æ°æ®ç§åŠ**ãæºåšåŠä¹ ïŒå°€å
¶æ¯æ·±åºŠåŠä¹ ïŒçäž»èŠè¯èšè¿äžç®åäºå®ïŒäœ¿åŸ **FastAPI** äžæ°æ®ç§åŠ/æºåšåŠä¹ Web API ååºçšçšåºïŒä»¥åå
¶ä»è®žå€åºçšçšåºïŒéåžžå¹é
ã
-äºè§£åŠäœåšç产ç¯å¢äžå®ç°è¿ç§å¹¶è¡æ§ïŒå¯æ¥çæ€æ [éšçœ²](deployment/index.md){.internal-link target=_blank}ã
+äºè§£åŠäœåšç产ç¯å¢äžå®ç°è¿ç§å¹¶è¡æ§ïŒå¯æ¥çæ€æ [éšçœ²](deployment/index.md)ã
## `async` å `await` { #async-and-await }
@@ -363,13 +363,13 @@ async def read_burgers():
### çŒåèªå·±çåŒæ¥ä»£ç { #write-your-own-async-code }
-Starlette ïŒå **FastAPI**ïŒ æ¯åºäº
AnyIO å®ç°çïŒè¿äœ¿åŸå®ä»¬å¯ä»¥å
Œå®¹ Python çæ ååº
asyncio å
Trioã
+Starlette ïŒå **FastAPI**ïŒ æ¯åºäº [AnyIO](https://anyio.readthedocs.io/en/stable/) å®ç°çïŒè¿äœ¿åŸå®ä»¬å¯ä»¥å
Œå®¹ Python çæ ååº [asyncio](https://docs.python.org/3/library/asyncio-task.html) å [Trio](https://trio.readthedocs.io/en/stable/)ã
-ç¹å«æ¯ïŒäœ å¯ä»¥çŽæ¥äœ¿çš
AnyIO æ¥å€çé«çº§çå¹¶åçšäŸïŒè¿äºçšäŸéèŠåšèªå·±ç代ç äžäœ¿çšæŽé«çº§çæš¡åŒã
+ç¹å«æ¯ïŒäœ å¯ä»¥çŽæ¥äœ¿çš [AnyIO](https://anyio.readthedocs.io/en/stable/) æ¥å€çé«çº§çå¹¶åçšäŸïŒè¿äºçšäŸéèŠåšèªå·±ç代ç äžäœ¿çšæŽé«çº§çæš¡åŒã
-å³äœ¿äœ 没æäœ¿çš **FastAPI**ïŒäœ ä¹å¯ä»¥äœ¿çš
AnyIO çŒåèªå·±çåŒæ¥çšåºïŒäœ¿å
¶æ¥æèŸé«çå
Œå®¹æ§å¹¶è·åŸäžäºå¥œå€ïŒäŸåŠïŒ ç»æåå¹¶åïŒã
+å³äœ¿äœ 没æäœ¿çš **FastAPI**ïŒäœ ä¹å¯ä»¥äœ¿çš [AnyIO](https://anyio.readthedocs.io/en/stable/) çŒåèªå·±çåŒæ¥çšåºïŒäœ¿å
¶æ¥æèŸé«çå
Œå®¹æ§å¹¶è·åŸäžäºå¥œå€ïŒäŸåŠïŒ ç»æåå¹¶åïŒã
-æåºäº AnyIO æ°å»ºäºäžäžªåºïŒäœäžºäžäžªèœ»é级çå°è£
å±ïŒçšæ¥äŒåç±»åæ³šè§£ïŒåæ¶æäŸäºæŽå¥œç**èªåšè¡¥å
š**ã**å
èé误æç€º**çåèœãè¿äžªåºè¿é垊äºäžäžªå奜çå
¥éšæååæçšïŒèœåž®å©äœ **çè§£**å¹¶çŒå**èªå·±çåŒæ¥ä»£ç **ïŒ
AsyncerãåŠæäœ æ**ç»å䜿çšåŒæ¥ä»£ç ååžžè§**ïŒé»å¡/忥ïŒä»£ç çéæ±ïŒè¿äžªåºäŒç¹å«æçšã
+æåºäº AnyIO æ°å»ºäºäžäžªåºïŒäœäžºäžäžªèœ»é级çå°è£
å±ïŒçšæ¥äŒåç±»åæ³šè§£ïŒåæ¶æäŸäºæŽå¥œç**èªåšè¡¥å
š**ã**å
èé误æç€º**çåèœãè¿äžªåºè¿é垊äºäžäžªå奜çå
¥éšæååæçšïŒèœåž®å©äœ **çè§£**å¹¶çŒå**èªå·±çåŒæ¥ä»£ç **ïŒ[Asyncer](https://asyncer.tiangolo.com/)ãåŠæäœ æ**ç»å䜿çšåŒæ¥ä»£ç ååžžè§**ïŒé»å¡/忥ïŒä»£ç çéæ±ïŒè¿äžªåºäŒç¹å«æçšã
### å
¶ä»åœ¢åŒçåŒæ¥ä»£ç { #other-forms-of-asynchronous-code }
@@ -381,7 +381,7 @@ Starlette ïŒå **FastAPI**ïŒ æ¯åºäº
Geventãäœä»£ç ççè§£ãè°è¯åæèéœèŠå€æè®žå€ã
+åšä»¥åçæ¬ç PythonïŒäœ å¯ä»¥äœ¿çšå€çº¿çšæè
[Gevent](https://www.gevent.org/)ãäœä»£ç ççè§£ãè°è¯åæèéœèŠå€æè®žå€ã
åšä»¥åçæ¬ç NodeJS / æµè§åš JavaScript äžïŒäœ äŒäœ¿çš"åè°"ïŒå æ€ä¹å¯èœå¯ŒèŽâåè°å°ç±âã
@@ -419,15 +419,15 @@ Starlette ïŒå **FastAPI**ïŒ æ¯åºäº
I/O ç代ç ã
-åšè¿äž€ç§æ
åµäžïŒäžäœ ä¹åçæ¡æ¶çžæ¯ïŒ**FastAPI** å¯èœ[ä»ç¶åŸå¿«](index.md#performance){.internal-link target=_blank}ã
+åšè¿äž€ç§æ
åµäžïŒäžäœ ä¹åçæ¡æ¶çžæ¯ïŒ**FastAPI** å¯èœ[ä»ç¶åŸå¿«](index.md#performance)ã
### äŸèµ { #dependencies }
-è¿åæ ·éçšäº[äŸèµ](tutorial/dependencies/index.md){.internal-link target=_blank}ãåŠæäžäžªäŸèµæ¯æ åç `def` åœæ°èäžæ¯ `async def`ïŒå®å°è¢«è¿è¡åšå€éšçº¿çšæ± äžã
+è¿åæ ·éçšäº[äŸèµ](tutorial/dependencies/index.md)ãåŠæäžäžªäŸèµæ¯æ åç `def` åœæ°èäžæ¯ `async def`ïŒå®å°è¢«è¿è¡åšå€éšçº¿çšæ± äžã
### åäŸèµ { #sub-dependencies }
-äœ å¯ä»¥æ¥æå€äžªçžäºäŸèµçäŸèµä»¥å[åäŸèµ](tutorial/dependencies/sub-dependencies.md){.internal-link target=_blank} ïŒäœäžºåœæ°çåæ°ïŒïŒå®ä»¬äžçäžäºå¯èœæ¯éè¿ `async def` 声æïŒä¹å¯èœæ¯éè¿ `def` 声æãå®ä»¬ä»ç¶å¯ä»¥æ£åžžå·¥äœïŒè¿äºéè¿ `def` 声æçåœæ°å°äŒåšå€éšçº¿çšäžè°çšïŒæ¥èªçº¿çšæ± ïŒïŒèäžæ¯"被çåŸ
"ã
+äœ å¯ä»¥æ¥æå€äžªçžäºäŸèµçäŸèµä»¥å[åäŸèµ](tutorial/dependencies/sub-dependencies.md) ïŒäœäžºåœæ°çåæ°ïŒïŒå®ä»¬äžçäžäºå¯èœæ¯éè¿ `async def` 声æïŒä¹å¯èœæ¯éè¿ `def` 声æãå®ä»¬ä»ç¶å¯ä»¥æ£åžžå·¥äœïŒè¿äºéè¿ `def` 声æçåœæ°å°äŒåšå€éšçº¿çšäžè°çšïŒæ¥èªçº¿çšæ± ïŒïŒèäžæ¯"被çåŸ
"ã
### å
¶ä»åœæ° { #other-utility-functions }
diff --git a/docs/zh/docs/benchmarks.md b/docs/zh/docs/benchmarks.md
index a6e706dfaa..d98d3de593 100644
--- a/docs/zh/docs/benchmarks.md
+++ b/docs/zh/docs/benchmarks.md
@@ -1,6 +1,6 @@
# åºåæµè¯ { #benchmarks }
-ç¬¬äžæ¹æºæ TechEmpower çåºåæµè¯è¡šæåš Uvicorn äžè¿è¡ç **FastAPI** åºçšçšåºæ¯ å¯çšçæå¿«ç Python æ¡æ¶ä¹äžïŒä»
æ¬¡äº Starlette å Uvicorn æ¬èº«ïŒç± FastAPI å
éšäœ¿çšïŒã
+ç¬¬äžæ¹æºæ TechEmpower çåºåæµè¯è¡šæåš Uvicorn äžè¿è¡ç **FastAPI** åºçšçšåºæ¯ [å¯çšçæå¿«ç Python æ¡æ¶ä¹äž](https://www.techempower.com/benchmarks/#section=test&runid=7464e520-0dc2-473d-bd34-dbdfd7e85911&hw=ph&test=query&l=zijzen-7)ïŒä»
æ¬¡äº Starlette å Uvicorn æ¬èº«ïŒç± FastAPI å
éšäœ¿çšïŒã
äœæ¯åšæ¥çåºååŸååå¯¹æ¯æ¶ïŒè¯·æ³šæä»¥äžå ç¹ã
diff --git a/docs/zh/docs/deployment/cloud.md b/docs/zh/docs/deployment/cloud.md
index 96883bd6bf..025715f523 100644
--- a/docs/zh/docs/deployment/cloud.md
+++ b/docs/zh/docs/deployment/cloud.md
@@ -6,7 +6,7 @@
## FastAPI Cloud { #fastapi-cloud }
-**
FastAPI Cloud** ç± **FastAPI** èåçåäžäœè
äžå¢éæé ã
+**[FastAPI Cloud](https://fastapicloud.com)** ç± **FastAPI** èåçåäžäœè
äžå¢éæé ã
å®ç®åäº**æå»º**ã**éšçœ²**å**访é®** API çæµçšïŒå ä¹äžè޹åã
@@ -16,9 +16,9 @@ FastAPI Cloud æ¯ *FastAPI and friends* åŒæºé¡¹ç®çäž»èŠèµå©æ¹åèµé
## äºæå¡å - èµå©å { #cloud-providers-sponsors }
-è¿æäžäºäºæå¡åä¹äŒ âš [**èµå© FastAPI**](../help-fastapi.md#sponsor-the-author){.internal-link target=_blank} âšãð
+è¿æäžäºäºæå¡åä¹äŒ âš [**èµå© FastAPI**](../help-fastapi.md#sponsor-the-author) âšãð
äœ ä¹å¯ä»¥èèæç
§ä»ä»¬çæåå°è¯ä»ä»¬çæå¡ïŒ
-*
Render
-*
Railway
+* [Render](https://docs.render.com/deploy-fastapi?utm_source=deploydoc&utm_medium=referral&utm_campaign=fastapi)
+* [Railway](https://docs.railway.com/guides/fastapi?utm_medium=integration&utm_source=docs&utm_campaign=fastapi)
diff --git a/docs/zh/docs/deployment/concepts.md b/docs/zh/docs/deployment/concepts.md
index 76e967d7de..dd5ba2ba80 100644
--- a/docs/zh/docs/deployment/concepts.md
+++ b/docs/zh/docs/deployment/concepts.md
@@ -25,7 +25,7 @@
## å®å
šæ§ - HTTPS { #security-https }
-åš[äžäžç« æå
³ HTTPS](https.md){.internal-link target=_blank} äžïŒæä»¬äºè§£äº HTTPS åŠäœäžºæšç API æäŸå å¯ã
+åš[äžäžç« æå
³ HTTPS](https.md) äžïŒæä»¬äºè§£äº HTTPS åŠäœäžºæšç API æäŸå å¯ã
æä»¬è¿çå°ïŒHTTPS éåžžç±åºçšçšåºæå¡åšç**å€éš**ç»ä»¶ïŒ**TLS ç»æ¢ä»£ç**ïŒæäŸã
@@ -149,7 +149,7 @@
### 厩æºåéæ°å¯åš { #restart-after-crash }
-äœåšé£äºäž¥ééè¯¯å¯ŒèŽæ£åšè¿è¡ç**è¿çš**厩æºçæ
åµäžïŒæšéèŠäžäžªå€éšç»ä»¶æ¥èŽèŽ£**éæ°å¯åš**è¿çšïŒè³å°å°è¯å 次......
+äœåšé£äºäž¥ééè¯¯å¯ŒèŽæ£åšè¿è¡ç**è¿çš**厩æºçæ
åµäžïŒæšéèŠäžäžªå€éšç»ä»¶æ¥èŽèŽ£**éæ°å¯åš**è¿çšïŒè³å°å°è¯å 次...
/// tip | æç€º
@@ -190,7 +190,7 @@
### å·¥äœè¿çšåç«¯å£ { #worker-processes-and-ports }
-è¿è®°åŸææ¡£ [å
³äº HTTPS](https.md){.internal-link target=_blank} äžåªæäžäžªè¿çšå¯ä»¥äŸŠå¬æå¡åšäžç端å£å IP å°åçäžç§ç»ååïŒ
+è¿è®°åŸææ¡£ [å
³äº HTTPS](https.md) äžåªæäžäžªè¿çšå¯ä»¥äŸŠå¬æå¡åšäžç端å£å IP å°åçäžç§ç»ååïŒ
ç°åšä»ç¶æ¯å¯¹çã
@@ -243,7 +243,7 @@
åŠæè¿äºå
³äº **容åš**ãDocker æ Kubernetes çå
å®¹è¿æ²¡æå€å€§æä¹ïŒè¯·äžèŠæ
å¿ã
-æå°åšä»¥åçç« èäžåæšè¯Šç»ä»ç»å®¹åšéåãDockerãKubernetes çïŒ[容åšäžç FastAPI - Docker](docker.md){.internal-link target=_blank}ã
+æå°åšä»¥åçç« èäžåæšè¯Šç»ä»ç»å®¹åšéåãDockerãKubernetes çïŒ[容åšäžç FastAPI - Docker](docker.md)ã
///
@@ -281,7 +281,7 @@
/// tip | æç€º
-æå°åšä»¥åçç« èäžäžºæšæäŸäœ¿çšå®¹åšæ§è¡æ€æäœçæŽå
·äœç€ºäŸïŒ[容åšäžç FastAPI - Docker](docker.md){.internal-link target=_blank}ã
+æå°åšä»¥åçç« èäžäžºæšæäŸäœ¿çšå®¹åšæ§è¡æ€æäœçæŽå
·äœç€ºäŸïŒ[容åšäžç FastAPI - Docker](docker.md)ã
///
diff --git a/docs/zh/docs/deployment/docker.md b/docs/zh/docs/deployment/docker.md
index 4e7410587e..aa7b60b508 100644
--- a/docs/zh/docs/deployment/docker.md
+++ b/docs/zh/docs/deployment/docker.md
@@ -1,6 +1,6 @@
# 容åšäžç FastAPI - Docker { #fastapi-in-containers-docker }
-éšçœ² FastAPI åºçšæ¶ïŒåžžè§åæ³æ¯æå»ºäžäžª**Linux 容åšéå**ãé垞䜿çš
**Docker** å®ç°ãç¶åäœ å¯ä»¥çšå ç§æ¹åŒä¹äžéšçœ²è¯¥éåã
+éšçœ² FastAPI åºçšæ¶ïŒåžžè§åæ³æ¯æå»ºäžäžª**Linux 容åšéå**ãéåžžäœ¿çš [**Docker**](https://www.docker.com/) å®ç°ãç¶åäœ å¯ä»¥çšå ç§æ¹åŒä¹äžéšçœ²è¯¥éåã
äœ¿çš Linux å®¹åšæå€ç§äŒå¿ïŒå
æ¬**å®å
šæ§**ã**å¯å€å¶æ§**ã**ç®åæ§**çã
@@ -26,7 +26,7 @@ COPY ./app /code/app
CMD ["fastapi", "run", "app/main.py", "--port", "80"]
-# If running behind a proxy like Nginx or Traefik add --proxy-headers
+# åŠæåš Nginx æ Traefik ç代çåè¿è¡ïŒè¯·æ·»å --proxy-headers
# CMD ["fastapi", "run", "app/main.py", "--port", "80", "--proxy-headers"]
```
@@ -60,16 +60,16 @@ Linux 容åšå€çšå®¿äž»æºïŒç©çæºãèææºãäºæå¡åšçïŒçå
Docker äžçŽæ¯å建å管ç**容åšéå**äž**容åš**çäž»èŠå·¥å
·ä¹äžã
-è¿æäžäžªå
Œ
±ç
Docker HubïŒå
¶äžäžºè®žå€å·¥å
·ãç¯å¢ãæ°æ®åºååºçšæäŸäºé¢å¶ç**宿¹å®¹åšéå**ã
+è¿æäžäžªå
Œ
±ç [Docker Hub](https://hub.docker.com/)ïŒå
¶äžäžºè®žå€å·¥å
·ãç¯å¢ãæ°æ®åºååºçšæäŸäºé¢å¶ç**宿¹å®¹åšéå**ã
-äŸåŠïŒæå®æ¹ç
Python éåã
+äŸåŠïŒæå®æ¹ç [Python éå](https://hub.docker.com/_/python)ã
è¿æè®žå€çšäºäžåç®çïŒåŠæ°æ®åºïŒçéåïŒäŸåŠïŒ
-*
PostgreSQL
-*
MySQL
-*
MongoDB
-*
Redis çã
+* [PostgreSQL](https://hub.docker.com/_/postgres)
+* [MySQL](https://hub.docker.com/_/mysql)
+* [MongoDB](https://hub.docker.com/_/mongo)
+* [Redis](https://hub.docker.com/_/redis) çã
éè¿äœ¿çšé¢å¶ç容åšéåïŒå¯ä»¥åŸå®¹æå°**ç»å**并䜿çšäžåå·¥å
·ãäŸåŠïŒè¯çšäžäžªæ°çæ°æ®åºãåšå€§å€æ°æ
åµäžïŒäœ å¯ä»¥çŽæ¥äœ¿çš**宿¹éå**ïŒåªééè¿ç¯å¢åéé
眮å³å¯ã
@@ -111,7 +111,7 @@ Docker äžçŽæ¯å建å管ç**容åšéå**äž**容åš**çäž»èŠå·¥å
·ä¹
æåžžè§çæ¹åŒæ¯äœ¿çš `requirements.txt` æä»¶ïŒæ¯è¡äžäžªå
ååå
¶çæ¬èåŽã
-åœç¶ïŒäœ ä¹å¯ä»¥åèäœ åš[å
³äº FastAPI çæ¬](versions.md){.internal-link target=_blank}äžè¯»å°çæè·¯æ¥è®Ÿçœ®çæ¬èåŽã
+åœç¶ïŒäœ ä¹å¯ä»¥åèäœ åš[å
³äº FastAPI çæ¬](versions.md)äžè¯»å°çæè·¯æ¥è®Ÿçœ®çæ¬èåŽã
äŸåŠïŒäœ ç `requirements.txt` å¯èœæ¯ïŒ
@@ -238,7 +238,7 @@ CMD ["fastapi", "run", "app/main.py", "--port", "80"]
#### äœ¿çš `CMD` - Exec åœ¢åŒ { #use-cmd-exec-form }
-
`CMD` æä»€æäž€ç§åæ³ïŒ
+[`CMD`](https://docs.docker.com/reference/dockerfile/#cmd) æä»€æäž€ç§åæ³ïŒ
â
**Exec** 圢åŒïŒ
@@ -254,11 +254,11 @@ CMD ["fastapi", "run", "app/main.py", "--port", "80"]
CMD fastapi run app/main.py --port 80
```
-å¡å¿
䜿çš**exec** 圢åŒïŒä»¥ç¡®ä¿ FastAPI å¯ä»¥äŒé
åæºå¹¶è§Šå[çåœåšæäºä»¶](../advanced/events.md){.internal-link target=_blank}ã
+å¡å¿
䜿çš**exec** 圢åŒïŒä»¥ç¡®ä¿ FastAPI å¯ä»¥äŒé
åæºå¹¶è§Šå[çåœåšæäºä»¶](../advanced/events.md)ã
-äœ å¯ä»¥åš
Docker ææ¡£ïŒShell äž Exec 圢åŒïŒäžäºè§£æŽå€ã
+äœ å¯ä»¥åš [Docker ææ¡£ïŒShell äž Exec 圢åŒïŒ](https://docs.docker.com/reference/dockerfile/#shell-and-exec-form)äžäºè§£æŽå€ã
-åšäœ¿çš `docker compose` æ¶è¿äžç¹å°€äžºææŸãæŽå€ææ¯ç»èåè§è¯¥ FAQïŒ
䞺ä»ä¹æçæå¡éèŠ 10 ç§æèœéæ°å建æåæ¢ïŒ
+åšäœ¿çš `docker compose` æ¶è¿äžç¹å°€äžºææŸãæŽå€ææ¯ç»èåè§è¯¥ FAQïŒ[䞺ä»ä¹æçæå¡éèŠ 10 ç§æèœéæ°å建æåæ¢ïŒ](https://docs.docker.com/compose/faq/#why-do-my-services-take-10-seconds-to-recreate-or-stop)
#### ç®åœç»æ { #directory-structure }
@@ -352,7 +352,7 @@ $ docker run -d --name mycontainer -p 80:80 myimage
## æ£æ¥äžäž { #check-it }
-äœ åºè¯¥èœåšå®¹åšæŽé²ç URL 访é®å®ïŒäŸåŠïŒ
http://192.168.99.100/items/5?q=somequery æ
http://127.0.0.1/items/5?q=somequeryïŒæå
¶ä»çä»·å°åïŒåå³äºäœ ç Docker äž»æºïŒã
+äœ åºè¯¥èœåšå®¹åšæŽé²ç URL 访é®å®ïŒäŸåŠïŒ[http://192.168.99.100/items/5?q=somequery](http://192.168.99.100/items/5?q=somequery) æ [http://127.0.0.1/items/5?q=somequery](http://127.0.0.1/items/5?q=somequery)ïŒæå
¶ä»çä»·å°åïŒåå³äºäœ ç Docker äž»æºïŒã
äœ äŒçå°ç±»äŒŒå
容ïŒ
@@ -362,17 +362,17 @@ $ docker run -d --name mycontainer -p 80:80 myimage
## 亀äºåŒ API ææ¡£ { #interactive-api-docs }
-ç°åšäœ å¯ä»¥è®¿é®
http://192.168.99.100/docs æ
http://127.0.0.1/docsïŒæå
¶ä»çä»·å°åïŒåå³äºäœ ç Docker äž»æºïŒã
+ç°åšäœ å¯ä»¥è®¿é® [http://192.168.99.100/docs](http://192.168.99.100/docs) æ [http://127.0.0.1/docs](http://127.0.0.1/docs)ïŒæå
¶ä»çä»·å°åïŒåå³äºäœ ç Docker äž»æºïŒã
-äœ å°çå°èªåšçæç亀äºåŒ API ææ¡£ïŒç±
Swagger UI æäŸïŒïŒ
+äœ å°çå°èªåšçæç亀äºåŒ API ææ¡£ïŒç± [Swagger UI](https://github.com/swagger-api/swagger-ui) æäŸïŒïŒ

## å€é API ææ¡£ { #alternative-api-docs }
-äœ è¿å¯ä»¥è®¿é®
http://192.168.99.100/redoc æ
http://127.0.0.1/redocïŒæå
¶ä»çä»·å°åïŒåå³äºäœ ç Docker äž»æºïŒã
+äœ è¿å¯ä»¥è®¿é® [http://192.168.99.100/redoc](http://192.168.99.100/redoc) æ [http://127.0.0.1/redoc](http://127.0.0.1/redoc)ïŒæå
¶ä»çä»·å°åïŒåå³äºäœ ç Docker äž»æºïŒã
-äœ å°çå°å€éçèªåšææ¡£ïŒç±
ReDoc æäŸïŒïŒ
+äœ å°çå°å€éçèªåšææ¡£ïŒç± [ReDoc](https://github.com/Rebilly/ReDoc) æäŸïŒïŒ

@@ -413,7 +413,7 @@ CMD ["fastapi", "run", "main.py", "--port", "80"]
## éšçœ²æŠå¿µ { #deployment-concepts }
-æä»¬åä»å®¹åšçè§åºŠè®šè®ºäžäºçžåç[éšçœ²æŠå¿µ](concepts.md){.internal-link target=_blank}ã
+æä»¬åä»å®¹åšçè§åºŠè®šè®ºäžäºçžåç[éšçœ²æŠå¿µ](concepts.md)ã
容åšäž»èŠæ¯ç®ååºçš**æå»ºäžéšçœ²**æµçšçå·¥å
·ïŒäœå®ä»¬å¹¶äžåŒºå¶éçšæç§ç¹å®æ¹åŒæ¥å€çè¿äº**éšçœ²æŠå¿µ**ïŒå¯éçç¥æå€ç§ã
@@ -432,7 +432,7 @@ CMD ["fastapi", "run", "main.py", "--port", "80"]
åŠææä»¬åªå
³æ³š FastAPI åºçšç**容åšéå**ïŒä»¥ååç»è¿è¡ç**容åš**ïŒïŒHTTPS éåžžç±**å€éš**çå
¶ä»å·¥å
·å€çã
-å®å¯ä»¥æ¯åŠäžäžªå®¹åšïŒäŸåŠäœ¿çš
TraefikïŒå€ç **HTTPS** å¹¶**èªåš**è·å**è¯ä¹Š**ã
+å®å¯ä»¥æ¯åŠäžäžªå®¹åšïŒäŸåŠäœ¿çš [Traefik](https://traefik.io/)ïŒå€ç **HTTPS** å¹¶**èªåš**è·å**è¯ä¹Š**ã
/// tip | æç€º
@@ -558,7 +558,7 @@ CMD ["fastapi", "run", "app/main.py", "--port", "80", "--workers", "4"]
/// info | ä¿¡æ¯
-åŠæäœ äœ¿çš KubernetesïŒè¿éåžžäŒæ¯äžäžª
Init Containerã
+åŠæäœ äœ¿çš KubernetesïŒè¿éåžžäŒæ¯äžäžª [Init Container](https://kubernetes.io/docs/concepts/workloads/pods/init-containers/)ã
///
@@ -570,7 +570,7 @@ CMD ["fastapi", "run", "app/main.py", "--port", "80", "--workers", "4"]
### åºç¡ Docker éå { #base-docker-image }
-æŸç»æäžäžªå®æ¹ç FastAPI Docker éåïŒ
tiangolo/uvicorn-gunicorn-fastapiãäœå®ç°åšå·²è¢«åŒçšãâïž
+æŸç»æäžäžªå®æ¹ç FastAPI Docker éåïŒ[tiangolo/uvicorn-gunicorn-fastapi](https://github.com/tiangolo/uvicorn-gunicorn-fastapi-docker)ãäœå®ç°åšå·²è¢«åŒçšãâïž
äœ å€§æŠç**äžåºè¯¥**䜿çšè¿äžªåºç¡éåïŒæä»»äœå
¶å®ç±»äŒŒçéåïŒã
@@ -600,7 +600,7 @@ CMD ["fastapi", "run", "app/main.py", "--port", "80", "--workers", "4"]
## äœ¿çš `uv` ç Docker éå { #docker-image-with-uv }
-åŠæäœ äœ¿çš
uv æ¥å®è£
å管ç项ç®ïŒå¯ä»¥åèä»ä»¬ç
uv Docker æåã
+åŠæäœ äœ¿çš [uv](https://github.com/astral-sh/uv) æ¥å®è£
å管ç项ç®ïŒå¯ä»¥åèä»ä»¬ç [uv Docker æå](https://docs.astral.sh/uv/guides/integration/docker/)ã
## å顟 { #recap }
diff --git a/docs/zh/docs/deployment/fastapicloud.md b/docs/zh/docs/deployment/fastapicloud.md
index 0239a15128..d438709935 100644
--- a/docs/zh/docs/deployment/fastapicloud.md
+++ b/docs/zh/docs/deployment/fastapicloud.md
@@ -1,6 +1,6 @@
# FastAPI Cloud { #fastapi-cloud }
-äœ å¯ä»¥çš**äžæ¡åœä»€**å°äœ ç FastAPI åºçšéšçœ²å°
FastAPI CloudïŒåŠæè¿æ²¡æïŒå»å å
¥åè¡¥ååå§ãð
+äœ å¯ä»¥çš**äžæ¡åœä»€**å°äœ ç FastAPI åºçšéšçœ²å° [FastAPI Cloud](https://fastapicloud.com)ïŒåŠæè¿æ²¡æïŒå»å å
¥åè¡¥ååå§ãð
## ç»åœ { #login }
@@ -40,7 +40,7 @@ Deploying to FastAPI Cloud...
## å
³äº FastAPI Cloud { #about-fastapi-cloud }
-**
FastAPI Cloud** ç± **FastAPI** èåçäœè
äžå¢éæé ã
+**[FastAPI Cloud](https://fastapicloud.com)** ç± **FastAPI** èåçäœè
äžå¢éæé ã
å®è®©äœ 以æå°çæå
¥å®æ API ç**æå»º**ã**éšçœ²**äž**访é®**ã
diff --git a/docs/zh/docs/deployment/https.md b/docs/zh/docs/deployment/https.md
index 591707f6dd..916fb46da2 100644
--- a/docs/zh/docs/deployment/https.md
+++ b/docs/zh/docs/deployment/https.md
@@ -10,7 +10,7 @@
///
-èŠä»çšæ·çè§è§**äºè§£ HTTPS çåºç¡ç¥è¯**ïŒè¯·æ¥ç
https://howhttps.works/ã
+èŠä»çšæ·çè§è§**äºè§£ HTTPS çåºç¡ç¥è¯**ïŒè¯·æ¥ç [https://howhttps.works/](https://howhttps.works/)ã
ç°åšïŒä»**åŒå人åçè§è§**ïŒåšäºè§£ HTTPS æ¶éèŠè®°äœä»¥äžå ç¹ïŒ
@@ -28,13 +28,13 @@
* **é»è®€æ
åµäž**ïŒè¿æå³çäœ **æ¯äžª IP å°ååªèœæ¥æäžäžª HTTPS è¯ä¹Š**ã
* æ è®ºäœ çæå¡åšæå€å€§ïŒæè
æå¡åšäžçæ¯äžªåºçšçšåºæå€å°ã
* äžè¿ïŒå¯¹æ€æäžäžª**è§£å³æ¹æ¡**ã
-* **TLS** åè®®ïŒåš HTTP ä¹äžç TCP å±å€çå å¯çåè®®ïŒæäžäžª**æ©å±**ïŒç§°äžº **
SNI**ã
+* **TLS** åè®®ïŒåš HTTP ä¹äžç TCP å±å€çå å¯çåè®®ïŒæäžäžª**æ©å±**ïŒç§°äžº **[
SNI](https://en.wikipedia.org/wiki/Server_Name_Indication)**ã
* SNI æ©å±å
讞äžå°æå¡åšïŒå
·æ **å䞪 IP å°å**ïŒæ¥æ **å€äžª HTTPS è¯ä¹Š** å¹¶æäŸ **å€äžª HTTPS åå/åºçšçšåº**ã
* 䞺æ€ïŒæå¡åšäžäŒæ**åç¬**çäžäžªç»ä»¶ïŒçšåºïŒäŸŠå¬**å
Œ
± IP å°å**ïŒè¿äžªç»ä»¶å¿
é¡»æ¥ææå¡åšäžç**ææ HTTPS è¯ä¹Š**ã
* **è·åŸå®å
šè¿æ¥å**ïŒéä¿¡åè®®**ä»ç¶æ¯HTTP**ã
* å
å®¹æ¯ **å å¯è¿ç**ïŒå³äœ¿å®ä»¬æ¯éè¿ **HTTP åè®®** åéçã
-éåžžçåæ³æ¯åšæå¡åšäžè¿è¡**äžäžªçšåº/HTTP æå¡åš**å¹¶**ç®¡çææ HTTPS éšå**ïŒæ¥æ¶**å å¯ç HTTPS 请æ±**ïŒ å° **è§£å¯ç HTTP 请æ±** åéå°åšåäžæå¡åšäžè¿è¡çå®é
HTTP åºçšçšåºïŒåšæ¬äŸäžäžº **FastAPI** åºçšçšåºïŒïŒä»åºçšçšåºäžè·å **HTTP ååº**ïŒ äœ¿çšéåœç **HTTPS è¯ä¹Š**对å
¶è¿è¡å å¯å¹¶äœ¿çš **HTTPS** å°å
¶åéå客æ·ç«¯ã æ€æå¡åšé垞被称䞺 **
TLS ç»æ¢ä»£ç(TLS Termination Proxy)**ã
+éåžžçåæ³æ¯åšæå¡åšäžè¿è¡**äžäžªçšåº/HTTP æå¡åš**å¹¶**ç®¡çææ HTTPS éšå**ïŒæ¥æ¶**å å¯ç HTTPS 请æ±**ïŒ å° **è§£å¯ç HTTP 请æ±** åéå°åšåäžæå¡åšäžè¿è¡çå®é
HTTP åºçšçšåºïŒåšæ¬äŸäžäžº **FastAPI** åºçšçšåºïŒïŒä»åºçšçšåºäžè·å **HTTP ååº**ïŒ äœ¿çšéåœç **HTTPS è¯ä¹Š**对å
¶è¿è¡å å¯å¹¶äœ¿çš **HTTPS** å°å
¶åéå客æ·ç«¯ã æ€æå¡åšé垞被称䞺 **[TLS ç»æ¢ä»£ç(TLS Termination Proxy)](https://en.wikipedia.org/wiki/TLS_termination_proxy)**ã
äœ å¯ä»¥çšäœ TLS ç»æ¢ä»£ççäžäºé项å
æ¬ïŒ
@@ -49,7 +49,7 @@
è¿å»ïŒè·åŸè¿äºè¯ä¹Šçè¿çšéåžžç¹çïŒéèŠå€§éçæä¹Šå·¥äœïŒèäžè¯ä¹Šéåžžæè޵ã
-äœéå **
Let's Encrypt** å建äºã
+äœéå **[Let's Encrypt](https://letsencrypt.org/)** å建äºã
宿¯ Linux åºéäŒçäžäžªé¡¹ç®ã å®ä»¥èªåšæ¹åŒå
莹æäŸ **HTTPS è¯ä¹Š**ã è¿äºè¯ä¹Šå¯ä»¥äœ¿çšææç¬Šåæ åçå®å
šå å¯ïŒå¹¶äžæææåŸçïŒå€§çºŠ 3 䞪æïŒïŒå æ€**å®å
šæ§å®é
äžæŽå¥œ**ïŒå 䞺å®ä»¬ççåœåšæçŒ©çäºã
@@ -201,9 +201,9 @@ TLS ç»æ¢ä»£çå°äœ¿çšåå奜çå å¯ç®æ³**è§£å¯è¯·æ±**ïŒå¹¶å°**ïŒ
è¿äºä»£ç请æ±å€Žå
æ¬ïŒ
-*
X-Forwarded-For
-*
X-Forwarded-Proto
-*
X-Forwarded-Host
+* [X-Forwarded-For](https://developer.mozilla.org/en-US/docs/Web/HTTP/Reference/Headers/X-Forwarded-For)
+* [X-Forwarded-Proto](https://developer.mozilla.org/en-US/docs/Web/HTTP/Reference/Headers/X-Forwarded-Proto)
+* [X-Forwarded-Host](https://developer.mozilla.org/en-US/docs/Web/HTTP/Reference/Headers/X-Forwarded-Host)
///
@@ -219,7 +219,7 @@ TLS ç»æ¢ä»£çå°äœ¿çšåå奜çå å¯ç®æ³**è§£å¯è¯·æ±**ïŒå¹¶å°**ïŒ
/// tip | æç€º
-äœ å¯ä»¥åšææ¡£äžäºè§£æŽå€ïŒ[åšä»£çä¹å - å¯çšä»£ç蜬å请æ±å€Ž](../advanced/behind-a-proxy.md#enable-proxy-forwarded-headers){.internal-link target=_blank}
+äœ å¯ä»¥åšææ¡£äžäºè§£æŽå€ïŒ[åšä»£çä¹å - å¯çšä»£ç蜬å请æ±å€Ž](../advanced/behind-a-proxy.md#enable-proxy-forwarded-headers)
///
diff --git a/docs/zh/docs/deployment/index.md b/docs/zh/docs/deployment/index.md
index 47dcede653..fa10019adf 100644
--- a/docs/zh/docs/deployment/index.md
+++ b/docs/zh/docs/deployment/index.md
@@ -16,7 +16,7 @@
äœ å¯ä»¥äœ¿çšäžäºå·¥å
·èªè¡**éšçœ²æå¡åš**ïŒäœ ä¹å¯ä»¥äœ¿çšèœäžºäœ 宿éšåå·¥äœç**äºæå¡**ïŒæå
¶ä»å¯èœçé项ã
-äŸåŠïŒæä»¬ïŒFastAPI å¢éïŒæå»ºäº
**FastAPI Cloud**ïŒè®©å° FastAPI åºçšéšçœ²å°äºç«¯å°œå¯èœæµç
ïŒå¹¶äžä¿æäžäœ¿çš FastAPI åŒåæ¶çžåçåŒåè
äœéªã
+äŸåŠïŒæä»¬ïŒFastAPI å¢éïŒæå»ºäº [**FastAPI Cloud**](https://fastapicloud.com)ïŒè®©å° FastAPI åºçšéšçœ²å°äºç«¯å°œå¯èœæµç
ïŒå¹¶äžä¿æäžäœ¿çš FastAPI åŒåæ¶çžåçåŒåè
äœéªã
æå°åäœ å±ç€ºåšéšçœ² **FastAPI** åºçšçšåºæ¶äœ å¯èœåºè¯¥è®°äœçäžäºäž»èŠæŠå¿µïŒå°œç®¡å
¶äžå€§éšåéçšäºä»»äœå
¶ä»ç±»åç Web åºçšçšåºïŒã
diff --git a/docs/zh/docs/deployment/manually.md b/docs/zh/docs/deployment/manually.md
index f519c1e87a..c440aa924b 100644
--- a/docs/zh/docs/deployment/manually.md
+++ b/docs/zh/docs/deployment/manually.md
@@ -52,11 +52,11 @@ FastAPI 䜿çšäºäžç§çšäºæå»º Python Web æ¡æ¶åæå¡åšçæ åïŒç§°
逿€ä¹å€ïŒè¿æå
¶ä»äžäºå¯éç ASGI æå¡åšïŒäŸåŠïŒ
-*
UvicornïŒé«æ§èœ ASGI æå¡åšã
-*
HypercornïŒäž HTTP/2 å Trio çå
Œå®¹ç ASGI æå¡åšã
-*
DaphneïŒäžº Django Channels æå»ºç ASGI æå¡åšã
-*
GranianïŒåºäº Rust ç HTTP æå¡åšïŒäžäžº Python åºçšè®Ÿè®¡ã
-*
NGINX UnitïŒNGINX Unit æ¯äžäžªèœ»é级äžçµæŽ»ç Web åºçšè¿è¡æ¶ç¯å¢ã
+* [Uvicorn](https://www.uvicorn.dev/): 髿§èœ ASGI æå¡åšã
+* [Hypercorn](https://hypercorn.readthedocs.io/): äž HTTP/2 å Trio çå
Œå®¹ç ASGI æå¡åšã
+* [Daphne](https://github.com/django/daphne): 䞺 Django Channels æå»ºç ASGI æå¡åšã
+* [Granian](https://github.com/emmett-framework/granian): åºäº Rust ç HTTP æå¡åšïŒäžäžº Python åºçšè®Ÿè®¡ã
+* [NGINX Unit](https://unit.nginx.org/howto/fastapi/): NGINX Unit æ¯äžäžªèœ»é级äžçµæŽ»ç Web åºçšè¿è¡æ¶ç¯å¢ã
## æå¡åšäž»æºåæå¡åšçšåº { #server-machine-and-server-program }
@@ -74,7 +74,7 @@ FastAPI 䜿çšäºäžç§çšäºæå»º Python Web æ¡æ¶åæå¡åšçæ åïŒç§°
äžè¿ïŒæšä¹å¯ä»¥æåšå®è£
ASGI æå¡åšã
-è¯·ç¡®ä¿æšåå»ºå¹¶æ¿æŽ»äžäžª[èæç¯å¢](../virtual-environments.md){.internal-link target=_blank}ïŒç¶ååå®è£
æå¡åšåºçšçšåºã
+è¯·ç¡®ä¿æšåå»ºå¹¶æ¿æŽ»äžäžª[èæç¯å¢](../virtual-environments.md)ïŒç¶ååå®è£
æå¡åšåºçšçšåºã
äŸåŠïŒèŠå®è£
UvicornïŒå¯ä»¥è¿è¡ä»¥äžåœä»€ïŒ
diff --git a/docs/zh/docs/deployment/server-workers.md b/docs/zh/docs/deployment/server-workers.md
index 2bbd5d9b6a..add83ac1af 100644
--- a/docs/zh/docs/deployment/server-workers.md
+++ b/docs/zh/docs/deployment/server-workers.md
@@ -13,13 +13,13 @@
éšçœ²åºçšçšåºæ¶ïŒæšå¯èœåžæè¿è¡äžäº**è¿çšå€å¶**ïŒä»¥å©çš**倿 ž** CPU å¹¶èœå€å€çæŽå€è¯·æ±ã
-æ£åŠæšåšäžäžç« æå
³[éšçœ²æŠå¿µ](concepts.md){.internal-link target=_blank}äžçå°çïŒæšå¯ä»¥äœ¿çšå€ç§çç¥ã
+æ£åŠæšåšäžäžç« æå
³[éšçœ²æŠå¿µ](concepts.md)äžçå°çïŒæšå¯ä»¥äœ¿çšå€ç§çç¥ã
åšæ¬ç« èäžïŒæå°åæšå±ç€ºåŠäœäœ¿çš `fastapi` åœä»€æçŽæ¥äœ¿çš `uvicorn` åœä»€ä»¥**å€å·¥äœè¿çšæš¡åŒ**è¿è¡ **Uvicorn**ã
/// info | ä¿¡æ¯
-åŠææšæ£åšäœ¿çšå®¹åšïŒäŸåŠ Docker æ KubernetesïŒæå°åšäžäžç« äžåè¯æšæŽå€çžå
³ä¿¡æ¯ïŒ[容åšäžç FastAPI - Docker](docker.md){.internal-link target=_blank}ã
+åŠææšæ£åšäœ¿çšå®¹åšïŒäŸåŠ Docker æ KubernetesïŒæå°åšäžäžç« äžåè¯æšæŽå€çžå
³ä¿¡æ¯ïŒ[容åšäžç FastAPI - Docker](docker.md)ã
æ¯èŸç¹å«çæ¯ïŒåš **Kubernetes** ç¯å¢äžè¿è¡æ¶ïŒæšéåžž**äžéèŠ**䜿çšå€äžªå·¥äœè¿çšïŒèæ¯**æ¯äžªå®¹åšè¿è¡äžäžª Uvicorn è¿çš**ãäžè¿ïŒæäŒåšæ¬ç« èçåç»éšå诊ç»ä»ç»è¿äžç¹ã
@@ -126,7 +126,7 @@ $ uvicorn main:app --host 0.0.0.0 --port 8080 --workers 4
## 容åšå Docker { #containers-and-docker }
-åšå
³äº [容åšäžç FastAPI - Docker](docker.md){.internal-link target=_blank} çäžäžç« äžïŒæå°ä»ç»äžäºå¯çšäºå€çå
¶ä»**éšçœ²æŠå¿µ**ççç¥ã
+åšå
³äº [容åšäžç FastAPI - Docker](docker.md) çäžäžç« äžïŒæå°ä»ç»äžäºå¯çšäºå€çå
¶ä»**éšçœ²æŠå¿µ**ççç¥ã
æå°åæšå±ç€ºåŠäœ**ä»é¶åŒå§æå»ºèªå·±çéå**ïŒä»¥è¿è¡äžäžªåç¬ç Uvicorn è¿çšãè¿äžªè¿çšçžå¯¹ç®åïŒå¹¶äžåšäœ¿çš **Kubernetes** çååžåŒå®¹åšç®¡çç³»ç»æ¶ïŒè¿éåžžæ¯æšéèŠéåçæ¹æ³ã
diff --git a/docs/zh/docs/deployment/versions.md b/docs/zh/docs/deployment/versions.md
index 23c37f3b5b..13af705568 100644
--- a/docs/zh/docs/deployment/versions.md
+++ b/docs/zh/docs/deployment/versions.md
@@ -4,7 +4,7 @@
ç»åžžæ·»å æ°åèœïŒå®æä¿®å€é误ïŒå¹¶äžä»£ç ä»åšæç»æ¹è¿ã
-è¿å°±æ¯äžºä»ä¹åœåçæ¬ä»ç¶æ¯`0.x.x`ïŒè¿åæ åºæ¯äžªçæ¬éœå¯èœæBreaking changesã è¿éµåŸª
è¯ä¹çæ¬æ§å¶ç纊å®ã
+è¿å°±æ¯äžºä»ä¹åœåçæ¬ä»ç¶æ¯`0.x.x`ïŒè¿åæ åºæ¯äžªçæ¬éœå¯èœæBreaking changesã è¿éµåŸª[è¯ä¹çæ¬æ§å¶](https://semver.org/)ç纊å®ã
äœ ç°åšå°±å¯ä»¥äœ¿çš **FastAPI** å建ç产ç¯å¢åºçšçšåºïŒäœ å¯èœå·²ç»è¿æ ·åäºäžæ®µæ¶éŽïŒïŒäœ åªéç¡®ä¿äœ¿çšççæ¬å¯ä»¥äžå
¶äœä»£ç æ£ç¡®é
åå³å¯ã
@@ -34,7 +34,7 @@ fastapi[standard]>=0.112.0,<0.113.0
## å¯çšçæ¬ { #available-versions }
-äœ å¯ä»¥åš[åè¡è¯Žæ](../release-notes.md){.internal-link target=_blank}äžæ¥çå¯çšçæ¬ïŒäŸåŠæ¥çåœåææ°çæ¬ïŒã
+äœ å¯ä»¥åš[åè¡è¯Žæ](../release-notes.md)äžæ¥çå¯çšçæ¬ïŒäŸåŠæ¥çåœåææ°çæ¬ïŒã
## å
³äºçæ¬ { #about-versions }
@@ -66,7 +66,7 @@ fastapi>=0.45.0,<0.46.0
äœ åºè¯¥äžºäœ çåºçšçšåºæ·»å æµè¯ã
-äœ¿çš **FastAPI** çŒåæµè¯éåžžç®åïŒæè°¢ StarletteïŒïŒè¯·åèææ¡£ïŒ[æµè¯](../tutorial/testing.md){.internal-link target=_blank}
+äœ¿çš **FastAPI** çŒåæµè¯éåžžç®åïŒæè°¢ StarletteïŒïŒè¯·åèææ¡£ïŒ[æµè¯](../tutorial/testing.md)
æ·»å æµè¯åïŒäœ å¯ä»¥å° **FastAPI** çæ¬åçº§å°æŽæ°çæ¬ïŒå¹¶éè¿è¿è¡æµè¯æ¥ç¡®ä¿ææä»£ç éœèœæ£åžžå·¥äœã
diff --git a/docs/zh/docs/editor-support.md b/docs/zh/docs/editor-support.md
new file mode 100644
index 0000000000..5028c6c957
--- /dev/null
+++ b/docs/zh/docs/editor-support.md
@@ -0,0 +1,23 @@
+# çŒèŸå𿝿 { #editor-support }
+
+宿¹ç [FastAPI æ©å±](https://marketplace.visualstudio.com/items?itemName=FastAPILabs.fastapi-vscode)äžºäœ ç FastAPI åŒåæµçšåžŠæ¥å¢åŒºïŒå
æ¬*è·¯åŸæäœ*çåç°äžå¯Œèªãéšçœ²å° FastAPI CloudïŒä»¥å宿¶æ¥å¿æµåŒäŒ èŸã
+
+æå
³è¯¥æ©å±çæŽå€è¯Šæ
ïŒè¯·åé
å
¶ [GitHub ä»åº](https://github.com/fastapi/fastapi-vscode)äžç READMEã
+
+## å®è£
äžé
眮 { #setup-and-installation }
+
+**FastAPI æ©å±**åæ¶éçšäº [VS Code](https://code.visualstudio.com/) å [Cursor](https://www.cursor.com/)ãäœ å¯ä»¥åšåçŒèŸåšçæ©å±é¢æ¿äžçŽæ¥æçŽ¢ âFastAPIâïŒå¹¶éæ©ç± **FastAPI Labs** ååžçæ©å±è¿è¡å®è£
ã该æ©å±ä¹éçšäºåºäºæµè§åšççŒèŸåšïŒäŸåŠ [vscode.dev](https://vscode.dev) å [github.dev](https://github.dev)ã
+
+### åºçšåç° { #application-discovery }
+
+é»è®€æ
åµäžïŒæ©å±äŒéè¿æ«æå®äŸåäº `FastAPI()` çæä»¶ïŒèªåšåç°å·¥äœåºäžç FastAPI åºçšãåŠæäœ ç项ç®ç»ææ æ³èªå𿣿µïŒäœ å¯ä»¥éè¿ `pyproject.toml` äžç `[tool.fastapi]` æ VS Code 讟眮项 `fastapi.entryPoint` æ¥æå®å
¥å£ç¹ïŒäœ¿çšæš¡å衚瀺æ³ïŒäŸåŠ `myapp.main:app`ïŒã
+
+## åèœ { #features }
+
+- **Path Operation èµæºç®¡çåš** - äŸ§èŸ¹æ æ ç¶è§åŸå±ç€ºåºçšäžçææ
*è·¯åŸæäœ*ãç¹å»å¯è·³èœ¬è³ä»»äžè·¯ç±æ APIRouter çå®ä¹ã
+- **è·¯ç±æçŽ¢** - 䜿çš
Ctrl +
Shift +
EïŒmacOS äžäžº
Cmd +
Shift +
EïŒæè·¯åŸãæ¹æ³æåç§°è¿è¡æçŽ¢ã
+- **CodeLens 富èª** - æµè¯å®¢æ·ç«¯è°çšïŒäŸåŠ `client.get('/items')`ïŒäžæ¹çå¯ç¹å»éŸæ¥ïŒå¯è·³èœ¬å°å¹é
ç*è·¯åŸæäœ*ïŒåšæµè¯äžå®ç°ä¹éŽå¿«éåŸè¿ã
+- **éšçœ²å° FastAPI Cloud** - äžé®å°äœ çåºçšéšçœ²å° [FastAPI Cloud](https://fastapicloud.com/)ã
+- **åºçšæ¥å¿æµåŒäŒ èŸ** - ä»éšçœ²åš FastAPI Cloud çåºçšäžå®æ¶æµåŒè·åæ¥å¿ïŒå¹¶æ¯ææçº§å«è¿æ»€äžææ¬æçŽ¢ã
+
+åŠæäœ æ³å
çææ©å±åèœïŒå¯ä»¥æåŒåœä»€é¢æ¿ïŒ
Ctrl +
Shift +
PïŒmacOS äžäžº
Cmd +
Shift +
PïŒïŒéæ© âWelcome: Open walkthrough...âïŒç¶åéæ© âGet started with FastAPIâ æŒç»ã
diff --git a/docs/zh/docs/environment-variables.md b/docs/zh/docs/environment-variables.md
index 8729a6306a..3a90ecde62 100644
--- a/docs/zh/docs/environment-variables.md
+++ b/docs/zh/docs/environment-variables.md
@@ -65,7 +65,7 @@ print(f"Hello {name} from Python")
/// tip | æç€º
-第äºäžªåæ°æ¯
`os.getenv()` çé»è®€è¿ååŒã
+第äºäžªåæ°æ¯ [`os.getenv()`](https://docs.python.org/3.8/library/os.html#os.getenv) çé»è®€è¿ååŒã
åŠææ²¡ææäŸïŒé»è®€åŒäžº `None`ïŒè¿éæä»¬æäŸ `"World"` äœäžºé»è®€åŒã
@@ -153,7 +153,7 @@ Hello World from Python
/// tip | æç€º
-äœ å¯ä»¥åš
The Twelve-Factor App: é
眮äžäºè§£æŽå€ä¿¡æ¯ã
+äœ å¯ä»¥åš [The Twelve-Factor App: é
眮](https://12factor.net/config) äžäºè§£æŽå€ä¿¡æ¯ã
///
@@ -163,7 +163,7 @@ Hello World from Python
è¿æå³çä»ç¯å¢åéäžè¯»åç**ä»»äœåŒ**åš Python äžéœå°æ¯äžäžª `str`ïŒä»»äœç±»åèœ¬æ¢æéªè¯éœå¿
é¡»åšä»£ç äžå®æã
-äœ å°åš[é«çº§çšæ·æå - 讟眮åç¯å¢åé](./advanced/settings.md){.internal-link target=_blank}äžäºè§£æŽå€å
³äºäœ¿çšç¯å¢åéå€ç**åºçšçšåºè®Ÿçœ®**çä¿¡æ¯ã
+äœ å°åš[é«çº§çšæ·æå - 讟眮åç¯å¢åé](./advanced/settings.md)äžäºè§£æŽå€å
³äºäœ¿çšç¯å¢åéå€ç**åºçšçšåºè®Ÿçœ®**çä¿¡æ¯ã
## `PATH` ç¯å¢åé { #path-environment-variable }
@@ -285,13 +285,13 @@ $ C:\opt\custompython\bin\python
////
-åœåŠä¹ [èæç¯å¢](virtual-environments.md){.internal-link target=_blank}æ¶ïŒè¿äºä¿¡æ¯å°äŒåŸæçšã
+åœåŠä¹ [èæç¯å¢](virtual-environments.md)æ¶ïŒè¿äºä¿¡æ¯å°äŒåŸæçšã
## ç»è®º { #conclusion }
éè¿è¿äžªæçšïŒäœ åºè¯¥å¯¹**ç¯å¢åé**æ¯ä»ä¹ä»¥ååŠäœåš Python äžäœ¿çšå®ä»¬æäºåºæ¬çäºè§£ã
-äœ ä¹å¯ä»¥åš
ç¯å¢åé - 绎åºçŸç§äžäºè§£æŽå€å
³äºå®ä»¬çä¿¡æ¯ã
+äœ ä¹å¯ä»¥åš[ç¯å¢åé - 绎åºçŸç§](https://en.wikipedia.org/wiki/Environment_variable)äžäºè§£æŽå€å
³äºå®ä»¬çä¿¡æ¯ã
åšè®žå€æ
åµäžïŒç¯å¢åéççšéåéçšæ§å¹¶äžæ¯åŸææŸãäœæ¯åšåŒåè¿çšäžïŒå®ä»¬äŒåšè®žå€äžåçåºæ¯äžåºç°ïŒå æ€äºè§£å®ä»¬æ¯åŸæå¿
èŠçã
diff --git a/docs/zh/docs/fastapi-cli.md b/docs/zh/docs/fastapi-cli.md
index 4d3b51a57a..151b7e61ec 100644
--- a/docs/zh/docs/fastapi-cli.md
+++ b/docs/zh/docs/fastapi-cli.md
@@ -1,15 +1,15 @@
# FastAPI CLI { #fastapi-cli }
-**FastAPI CLI** æ¯äžäžªåœä»€è¡çšåºïŒäœ å¯ä»¥çšå®æ¥éšçœ²åè¿è¡äœ ç FastAPI åºçšçšåºïŒç®¡çäœ ç FastAPI 项ç®ïŒççã
+**FastAPI
CLI** æ¯äžäžªåœä»€è¡çšåºïŒäœ å¯ä»¥çšå®æ¥éšçœ²åè¿è¡äœ ç FastAPI åºçšã管ç FastAPI 项ç®ïŒççã
-åœäœ å®è£
FastAPI æ¶ïŒäŸåŠäœ¿çš `pip install "fastapi[standard]"`ïŒïŒäŒå
å«äžäžªå䞺 `fastapi-cli` ç蜯件å
ïŒè¯¥èœ¯ä»¶å
åšç»ç«¯äžæäŸ `fastapi` åœä»€ã
+åœäœ å®è£
FastAPIïŒäŸåŠäœ¿çš `pip install "fastapi[standard]"`ïŒæ¶ïŒäŒé垊äžäžªå¯ä»¥åšç»ç«¯äžè¿è¡çåœä»€è¡çšåºã
-èŠåšåŒåç¯å¢äžè¿è¡äœ ç FastAPI åºçšïŒäœ å¯ä»¥äœ¿çš `fastapi dev` åœä»€ïŒ
+èŠåšåŒåç¯å¢äžè¿è¡äœ ç FastAPI åºçšïŒå¯ä»¥äœ¿çš `fastapi dev` åœä»€ïŒ
```console
-$
fastapi dev
main.py
+$
fastapi dev
FastAPI Starting development server ð
@@ -46,13 +46,66 @@ $
fastapi dev
UvicornïŒè¿æ¯äžäžªé«æ§èœãéçšäºç产ç¯å¢ç ASGI æå¡åšãð
+åŠå€ïŒå
¶ä»å·¥å
·å¯èœæŸäžå°å®ïŒäŸåŠ [VS Code æ©å±](editor-support.md) æ [FastAPI Cloud](https://fastapicloud.com)ïŒå æ€æšèåš `pyproject.toml` äžäœ¿çš `entrypoint`ã
## `fastapi dev` { #fastapi-dev }
@@ -70,6 +123,6 @@ FastAPI CLI æ¥æ¶äœ ç Python çšåºè·¯åŸïŒäŸåŠ `main.py`ïŒïŒèªåšæ£
/// tip | æç€º
-äœ å¯ä»¥åš[éšçœ²ææ¡£](deployment/index.md){.internal-link target=_blank}äžäºè§£æŽå€ã
+äœ å¯ä»¥åš[éšçœ²ææ¡£](deployment/index.md)äžäºè§£æŽå€ã
///
diff --git a/docs/zh/docs/features.md b/docs/zh/docs/features.md
index 1414f7c6fc..ad6b77f74f 100644
--- a/docs/zh/docs/features.md
+++ b/docs/zh/docs/features.md
@@ -6,8 +6,8 @@
### åºäºåŒæŸæ å { #based-on-open-standards }
-* çšäºå建 API ç OpenAPIïŒå
å«å¯¹è·¯åŸ æäœãåæ°ã请æ±äœãå®å
šçç声æã
-* äœ¿çš JSON Schema èªåšçææ°æ®æš¡åææ¡£ïŒå 䞺 OpenAPI æ¬èº«å°±æ¯åºäº JSON Schema çïŒã
+* [**OpenAPI**](https://github.com/OAI/OpenAPI-Specification) çšäºå建 APIïŒå
å«å¯¹è·¯åŸ æäœãåæ°ã请æ±äœãå®å
šçç声æã
+* äœ¿çš [**JSON Schema**](https://json-schema.org/) èªåšçææ°æ®æš¡åææ¡£ïŒå 䞺 OpenAPI æ¬èº«å°±æ¯åºäº JSON Schema çïŒã
* ç»è¿äºçŒå¯çç ç©¶ååŽç»è¿äºæ åè讟计ãå¹¶éçå°Ÿç»è²ã
* è¿ä¹å
讞äºåšåŸå€è¯èšäžèªåš**çæå®¢æ·ç«¯ä»£ç **ã
@@ -15,11 +15,11 @@
亀äºåŒ API ææ¡£ä»¥åå
·æ¢çŽ¢æ§ web çé¢ãå äžºè¯¥æ¡æ¶æ¯åºäº OpenAPIïŒæä»¥æåŸå€å¯é项ïŒFastAPI é»è®€èªåžŠäž€äžªäº€äºåŒ API ææ¡£ã
-* Swagger UIïŒå¯äº€äºåŒæäœïŒèœåšæµè§åšäžçŽæ¥è°çšåæµè¯äœ ç APIã
+* [**Swagger UI**](https://github.com/swagger-api/swagger-ui)ïŒå¯äº€äºåŒæäœïŒèœåšæµè§åšäžçŽæ¥è°çšåæµè¯äœ ç APIã

-* åŠå€ç API ææ¡£ïŒReDoc
+* åŠå€ç API ææ¡£ïŒ[**ReDoc**](https://github.com/Rebilly/ReDoc)

@@ -27,7 +27,7 @@
å
šéšéœåºäºæ åç **Python ç±»å** 声æïŒæè°¢ PydanticïŒãæ²¡ææ°çè¯æ³éèŠåŠä¹ ãåªéèŠæ åçç°ä»£ Pythonã
-åŠæäœ éèŠ2å鿥åŠä¹ åŠäœäœ¿çš Python ç±»åïŒå³äœ¿äœ äžäœ¿çš FastAPIïŒïŒççè¿äžªç®ççæçšïŒ[Python Types](python-types.md){.internal-link target=_blank}ã
+åŠæäœ éèŠ2å鿥åŠä¹ åŠäœäœ¿çš Python ç±»åïŒå³äœ¿äœ äžäœ¿çš FastAPIïŒïŒççè¿äžªç®ççæçšïŒ[Python ç±»å](python-types.md)ã
çŒå垊æç±»åæ æ³šçæ å PythonïŒ
@@ -76,7 +76,7 @@ my_second_user: User = User(**second_user_data)
æŽäžªæ¡æ¶éœè¢«è®Ÿè®¡åŸæäºäœ¿çšäžçŽè§ïŒææçå³å®éœåšåŒåä¹åå°±åšå€äžªçŒèŸåšäžè¿è¡äºæµè¯ïŒæ¥ç¡®ä¿æäœ³çåŒåäœéªã
-åšæè¿ç Python åŒåè
è°æ¥äžïŒæä»¬èœçå° è¢«äœ¿çšæå€çåèœæ¯âèªåšè¡¥å
šâã
+åš Python åŒåè
è°æ¥äžïŒæä»¬èœçå°[è¢«äœ¿çšæå€çåèœä¹äžæ¯âèªåšè¡¥å
šâ](https://www.jetbrains.com/research/python-developers-survey-2017/#tools-and-features)ã
æŽäžª **FastAPI** æ¡æ¶å°±æ¯åºäºè¿äžç¹çãä»»äœå°æ¹éœå¯ä»¥è¿è¡èªåšè¡¥å
šã
@@ -84,11 +84,11 @@ my_second_user: User = User(**second_user_data)
åšè¿éïŒäœ ççŒèŸåšå¯èœäŒè¿æ ·åž®å©äœ ïŒ
-* åš Visual Studio Code äž:
+* åš [Visual Studio Code](https://code.visualstudio.com/) äž:

-* åš PyCharm äž:
+* åš [PyCharm](https://www.jetbrains.com/pycharm/) äž:

@@ -125,7 +125,7 @@ my_second_user: User = User(**second_user_data)
OpenAPI äžå®ä¹çå®å
šæš¡åŒïŒå
æ¬ïŒ
* HTTP åºæ¬è®€è¯ã
-* **OAuth2**ïŒä¹äœ¿çš **JWT tokens**ïŒãåš [OAuth2 with JWT](tutorial/security/oauth2-jwt.md){.internal-link target=_blank}æ¥çæçšã
+* **OAuth2**ïŒä¹äœ¿çš **JWT tokens**ïŒãåš [äœ¿çš JWT ç OAuth2](tutorial/security/oauth2-jwt.md) æ¥çæçšã
* API å¯é¥ïŒåš:
* 请æ±å€Žã
* æ¥è¯¢åæ°ã
@@ -142,7 +142,7 @@ FastAPI æäžäžªäœ¿çšéåžžç®åïŒäœæ¯é垞区倧çStarlette å®å
šå
Œå®¹ïŒå¹¶åºäºïŒãæä»¥ïŒäœ æçå
¶ä»ç Starlette 代ç ä¹èœæ£åžžå·¥äœã`FastAPI` å®é
äžæ¯ `Starlette` çäžäžªåç±»ãæä»¥ïŒåŠæäœ å·²ç»ç¥éæè
äœ¿çš StarletteïŒå€§éšåçåèœäŒä»¥çžåçæ¹åŒå·¥äœã
+**FastAPI** å [**Starlette**](https://www.starlette.dev/) å®å
šå
Œå®¹ïŒå¹¶åºäºïŒãæä»¥ïŒäœ æçå
¶ä»ç Starlette 代ç ä¹èœæ£åžžå·¥äœã`FastAPI` å®é
äžæ¯ `Starlette` çäžäžªåç±»ãæä»¥ïŒåŠæäœ å·²ç»ç¥éæè
äœ¿çš StarletteïŒå€§éšåçåèœäŒä»¥çžåçæ¹åŒå·¥äœã
éè¿ **FastAPI** äœ å¯ä»¥è·åŸææ **Starlette** çç¹æ§ïŒFastAPI å°±åå 区çç StarletteïŒïŒ
-* 什人æå¹çæ§èœã宿¯ Python å¯çšçæå¿«çæ¡æ¶ä¹äžïŒå **NodeJS** å **Go** çžåœã
+* 什人æå¹çæ§èœã宿¯[Python å¯çšçæå¿«çæ¡æ¶ä¹äžïŒå **NodeJS** å **Go** çžåœ](https://github.com/encode/starlette#performance)ã
* **æ¯æ WebSocket**ã
* è¿çšå
åå°ä»»å¡ã
* Startup å shutdown äºä»¶ã
@@ -176,7 +176,7 @@ FastAPI æäžäžªäœ¿çšéåžžç®åïŒäœæ¯é垞区倧çåæšè°è° **FastAPI**ïŒåè¯æåå€§å®¶äœ äžºä»ä¹å欢å®ãð
+[åæšè°è° **FastAPI**](https://x.com/compose/tweet?text=I'm loving @fastapi because... https://github.com/fastapi/fastapi)ïŒåè¯æåå€§å®¶äœ äžºä»ä¹å欢å®ãð
æåŸé«å
Žå¬å° **FastAPI** çäœ¿çšæ
åµãäœ åæ¬¢å®çåªäºç¹ãäœ åšåªäžªé¡¹ç®/å
¬åžäœ¿çšå®ïŒççã
## 䞺 FastAPI æç¥š { #vote-for-fastapi }
-* åš Slant äžäžº **FastAPI** æç¥šã
-* åš AlternativeTo äžäžº **FastAPI** æç¥šã
-* åš StackShare äžæ æ³šäœ åšçš **FastAPI**ã
+* [åš Slant äžäžº **FastAPI** æç¥š](https://www.slant.co/options/34241/~fastapi-review)ã
+* [åš AlternativeTo äžäžº **FastAPI** æç¥š](https://alternativeto.net/software/fastapi/about/)ã
+* [åš StackShare äžæ æ³šäœ åšçš **FastAPI**](https://stackshare.io/pypi-fastapi)ã
## åš GitHub äžåž®å«äººè§£çé®é¢ { #help-others-with-questions-in-github }
äœ å¯ä»¥å°è¯åšä»¥äžå°æ¹åž®å©ä»äººè§£çé®é¢ïŒ
-* GitHub Discussions
-* GitHub Issues
+* [GitHub Discussions](https://github.com/fastapi/fastapi/discussions/categories/questions?discussions_q=category%3AQuestions+is%3Aunanswered)
+* [GitHub Issues](https://github.com/fastapi/fastapi/issues?q=is%3Aissue+is%3Aopen+sort%3Aupdated-desc+label%3Aquestion+-label%3Aanswered+)
åŸå€æ
åµäžïŒäœ ä¹è®žå·²ç»ç¥éè¿äºé®é¢ççæ¡äºãð€
-åŠæäœ åž®å©äºåŸå€äººè§£çé®é¢ïŒäœ äŒæäžºå®æ¹ç [FastAPI äžå®¶](fastapi-people.md#fastapi-experts){.internal-link target=_blank}ãð
+åŠæäœ åž®å©äºåŸå€äººè§£çé®é¢ïŒäœ äŒæäžºå®æ¹ç [FastAPI äžå®¶](fastapi-people.md#fastapi-experts)ãð
åªèŠè®°äœïŒæéèŠçäžç¹æ¯ïŒå°œéååãäººä»¬åžŠçæ«èŽ¥æèæ¥ïŒåŸå€æ¶åä»ä»¬çæé®æ¹åŒå¹¶äžçæ³ïŒäœè¯·å°œäœ æèœå°å奜对åŸ
ãð€
@@ -104,7 +104,7 @@
åŸå€æ¶åä»ä»¬åªäŒç²èŽŽäžå°æ®µä»£ç ïŒäœè¿äžè¶³ä»¥**å€ç°é®é¢**ã
-* äœ å¯ä»¥è¯·ä»ä»¬æäŸäžäžªå¯æå°å€ç°ç瀺äŸïŒäœ å¯ä»¥**å€å¶ç²èŽŽ**å¹¶åšæ¬å°è¿è¡ïŒçå°äžä»ä»¬çžåçé误æè¡äžºïŒæè
æŽå¥œå°çè§£ä»ä»¬ççšäŸã
+* äœ å¯ä»¥è¯·ä»ä»¬æäŸäžäžª[坿å°å€ç°ç瀺äŸ](https://stackoverflow.com/help/minimal-reproducible-example)ïŒäœ å¯ä»¥**å€å¶ç²èŽŽ**å¹¶åšæ¬å°è¿è¡ïŒçå°äžä»ä»¬çžåçé误æè¡äžºïŒæè
æŽå¥œå°çè§£ä»ä»¬ççšäŸã
* åŠæäœ éåžžçå¿ïŒäœ ä¹å¯ä»¥å°è¯ä»
æ ¹æ®é®é¢æè¿°èªå·±**æé äžäžªç€ºäŸ**ãäžè¿èŠè®°äœïŒè¿å¯èœäŒè±åŸå€æ¶éŽïŒéåžžå
请ä»ä»¬æŸæž
é®é¢äŒæŽå¥œã
@@ -124,7 +124,7 @@
## å
³æ³š GitHub èµæºåº { #watch-the-github-repository }
-äœ å¯ä»¥åš GitHub äžãå
³æ³šãFastAPIïŒç¹å»å³äžè§çãwatchãæé®ïŒïŒhttps://github.com/fastapi/fastapiãð
+äœ å¯ä»¥åš GitHub äžãå
³æ³šãFastAPIïŒç¹å»å³äžè§çãwatchãæé®ïŒïŒ[https://github.com/fastapi/fastapi](https://github.com/fastapi/fastapi)ãð
åŠæäœ éæ©ãWatchingãèéãReleases onlyãïŒåœæäººå建æ°ç issue æé®é¢æ¶äœ äŒæ¶å°éç¥ãäœ ä¹å¯ä»¥æå®åªéç¥æ° issuesãdiscussionsãPR çã
@@ -132,7 +132,7 @@
## æé® { #ask-questions }
-äœ å¯ä»¥åš GitHub èµæºåºäžå建äžäžªæ°é®é¢ïŒQuestionïŒïŒäŸåŠïŒ
+äœ å¯ä»¥åš GitHub èµæºåºäž[å建äžäžªæ°é®é¢ïŒQuestionïŒ](https://github.com/fastapi/fastapi/discussions/new?category=questions)ïŒäŸåŠïŒ
* æåºäžäžª**é®é¢**æå
³äºæäžª**é®é¢**çæ±å©ã
* 建议äžäžªæ°ç**åèœ**ã
@@ -195,12 +195,12 @@
## å建 Pull Request { #create-a-pull-request }
-äœ å¯ä»¥éè¿ Pull Request 䞺æºä»£ç [å莡ç®](contributing.md){.internal-link target=_blank}ïŒäŸåŠïŒ
+äœ å¯ä»¥éè¿ Pull Request 䞺æºä»£ç [å莡ç®](contributing.md)ïŒäŸåŠïŒ
* ä¿®æ£ææ¡£äžçäžäžªéå«åã
-* éè¿çŒèŸè¿äžªæä»¶åäº«äœ å建æåç°çå
³äº FastAPI çæç« ãè§é¢ææå®¢ã
+* éè¿[çŒèŸè¿äžªæä»¶](https://github.com/fastapi/fastapi/edit/master/docs/en/data/external_links.yml)åäº«äœ å建æåç°çå
³äº FastAPI çæç« ãè§é¢ææå®¢ã
* è¯·ç¡®ä¿æäœ çéŸæ¥æ·»å å°çžåºåºåçåŒå€Žã
-* åž®å©æ[ææ¡£ç¿»è¯](contributing.md#translations){.internal-link target=_blank}æäœ çè¯èšã
+* åž®å©æ[ææ¡£ç¿»è¯](contributing.md#translations)æäœ çè¯èšã
* äœ ä¹å¯ä»¥å®¡é
ä»äººå建çç¿»è¯ã
* æè®®æ°å¢ææ¡£ç« èã
* ä¿®å€ç°æ issue/bugã
@@ -217,8 +217,8 @@
äœ ç°åšå°±èœåçäž»èŠäºæ
æïŒ
-* [åš GitHub äžåž®å«äººè§£çé®é¢](#help-others-with-questions-in-github){.internal-link target=_blank}ïŒè§äžé¢çç« èïŒã
-* [审é
Pull Request](#review-pull-requests){.internal-link target=_blank}ïŒè§äžé¢çç« èïŒã
+* [åš GitHub äžåž®å«äººè§£çé®é¢](#help-others-with-questions-in-github)ïŒè§äžé¢çç« èïŒã
+* [审é
Pull Request](#review-pull-requests)ïŒè§äžé¢çç« èïŒã
è¿äž€é¡¹å·¥äœæ¯**æèæ¶**çãè¿ä¹æ¯ç»Žæ€ FastAPI çäž»èŠå·¥äœã
@@ -226,11 +226,11 @@
## å å
¥è倩 { #join-the-chat }
-å å
¥ ð¥ Discord è倩æå¡åš ð¥ïŒå FastAPI 瀟åºçå°äŒäŒŽä»¬äžèµ·äº€æµã
+å å
¥ ð¥ [Discord è倩æå¡åš](https://discord.gg/VQjSZaeJmf) ð¥ïŒå FastAPI 瀟åºçå°äŒäŒŽä»¬äžèµ·äº€æµã
/// tip | æç€º
-å
³äºæé®ïŒè¯·åš GitHub Discussions äžååžïŒè¿æ ·æŽææºäŒåŸå° [FastAPI äžå®¶](fastapi-people.md#fastapi-experts){.internal-link target=_blank} çåž®å©ã
+å
³äºæé®ïŒè¯·åš [GitHub Discussions](https://github.com/fastapi/fastapi/discussions/new?category=questions) äžååžïŒè¿æ ·æŽææºäŒåŸå° [FastAPI äžå®¶](fastapi-people.md#fastapi-experts) çåž®å©ã
è倩ä»
çšäºå
¶ä»æ¥åžžäº€æµã
@@ -242,13 +242,13 @@
åš GitHub äžïŒæš¡æ¿äŒåŒå¯Œäœ ååºæ°åœçé®é¢ïŒä»èæŽå®¹æè·åŸå¥œçåçïŒçè³åšæé®ä¹åå°±èœèªå·±è§£å³ãèäžåš GitHub éïŒæèœå°œéç¡®ä¿æç»å倿¯äžªé®é¢ïŒå³äœ¿è¿éèŠäžäºæ¶éŽã对èå€©ç³»ç»æ¥è¯ŽïŒæäžªäººåäžå°è¿äžç¹ãð
-è倩系ç»äžç对è¯ä¹äžå GitHub 飿 ·å®¹ææçŽ¢ïŒå æ€é®çå¯èœåšèå€©äžæ·¹æ²¡ãèäžåªæåš GitHub äžçé®çæäŒè®¡å
¥æäžº [FastAPI äžå®¶](fastapi-people.md#fastapi-experts){.internal-link target=_blank} ç莡ç®ïŒæä»¥äœ åš GitHub äžæŽå¯èœè·åŸå
³æ³šã
+è倩系ç»äžç对è¯ä¹äžå GitHub 飿 ·å®¹ææçŽ¢ïŒå æ€é®çå¯èœåšèå€©äžæ·¹æ²¡ãèäžåªæåš GitHub äžçé®çæäŒè®¡å
¥æäžº [FastAPI äžå®¶](fastapi-people.md#fastapi-experts) ç莡ç®ïŒæä»¥äœ åš GitHub äžæŽå¯èœè·åŸå
³æ³šã
åŠäžæ¹é¢ïŒè倩系ç»éææåäžäžççšæ·ïŒäœ å ä¹éæ¶éœèœåšé£éæŸå°èåŸæ¥ç人ãð
## èµå©äœè
{ #sponsor-the-author }
-åŠæäœ ç**产å/å
¬åž**äŸèµæäž **FastAPI** çžå
³ïŒå¹¶äžäœ æ³è§ŠèŸŸå®ççšæ·ïŒäœ å¯ä»¥éè¿ GitHub sponsors èµå©äœè
ïŒæïŒãæ ¹æ®èµå©å±çº§ïŒäœ è¿å¯èœè·åŸäžäºé¢å€çŠå©ïŒæ¯åŠåšææ¡£äžå±ç€ºåŸœç« ãð
+åŠæäœ ç**产å/å
¬åž**äŸèµæäž **FastAPI** çžå
³ïŒå¹¶äžäœ æ³è§ŠèŸŸå®ççšæ·ïŒäœ å¯ä»¥éè¿ [GitHub sponsors](https://github.com/sponsors/tiangolo) èµå©äœè
ïŒæïŒãæ ¹æ®èµå©å±çº§ïŒäœ è¿å¯èœè·åŸäžäºé¢å€çŠå©ïŒæ¯åŠåšææ¡£äžå±ç€ºåŸœç« ãð
---
diff --git a/docs/zh/docs/history-design-future.md b/docs/zh/docs/history-design-future.md
index 00945eab59..429eb8db0d 100644
--- a/docs/zh/docs/history-design-future.md
+++ b/docs/zh/docs/history-design-future.md
@@ -1,6 +1,6 @@
# åå²ãè®Ÿè®¡ãæªæ¥ { #history-design-and-future }
-äžä¹
åïŒæŸæÂ **FastAPI** çšæ·é®è¿ïŒ
+äžä¹
åïŒ[æŸæ **FastAPI** çšæ·é®è¿](https://github.com/fastapi/fastapi/issues/3#issuecomment-454956920)ïŒ
> è¿äžªé¡¹ç®æææ ·çåå²ïŒå¥œåå®åªçšäºå åšå°±ä»é»é»æ é»ååŸäŒæåšç¥...
@@ -14,7 +14,7 @@
**FastAPI** å
¶å®åªæ¯å»¶ç»äºè¿äºåèŸçåå²ã
-æ£åŠ[å€éæ¹æ¡](alternatives.md){.internal-link target=_blank}äžç« æè¿°ïŒ
+æ£åŠ[å€éæ¹æ¡](alternatives.md)äžç« æè¿°ïŒ
没æå€§å®¶ä¹åæåçå·¥äœïŒ**FastAPI** å°±äžäŒååšã
@@ -42,7 +42,7 @@
åæ¶ïŒæè¿åšææµè¡ç Python 代ç çŒèŸåšäžæµè¯äºåŸå€æè·¯ïŒå
æ¬ PyCharmãVS Codeãåºäº Jedi ççŒèŸåšã
-æ ¹æ®ææ° Python åŒåè
è°ç æ¥åæŸç€ºïŒè¿å ç§çŒèŸåšèŠçäºçºŠ 80% ççšæ·ã
+æ ¹æ®ææ° [Python åŒåè
è°ç æ¥å](https://www.jetbrains.com/research/python-developers-survey-2018/#development-tools)æŸç€ºïŒè¿å ç§çŒèŸåšèŠçäºçºŠ 80% ççšæ·ã
ä¹å°±æ¯è¯ŽïŒ**FastAPI** é对差äžå€ 80% ç Python åŒåè
䜿çšççŒèŸåšè¿è¡äºæµè¯ïŒèäžå
¶å®å€§å€æ°çŒèŸåšçå·¥äœæ¹åŒä¹äžä¹ç±»äŒŒïŒå æ€ïŒ**FastAPI** çäŒå¿å ä¹èœåšææçŒèŸåšäžäœç°ã
@@ -52,11 +52,11 @@
## 鿱项 { #requirements }
-ç»è¿æµè¯å€ç§å€éæ¹æ¡ïŒææç»å³å®äœ¿çš **Pydantic**ïŒå¹¶å
åå©çšå®çäŒå¿ã
+ç»è¿æµè¯å€ç§å€éæ¹æ¡ïŒææç»å³å®äœ¿çš [**Pydantic**](https://docs.pydantic.dev/)ïŒå¹¶å
åå©çšå®çäŒå¿ã
æçè³äžºå®åäºäžå°èŽ¡ç®ïŒè®©å®å®çŸå
Œå®¹äº JSON SchemaïŒæ¯æå€ç§æ¹åŒå®ä¹çºŠæå£°æïŒå¹¶åºäºå€äžªçŒèŸåšïŒæ¹è¿äºå®å¯¹çŒèŸå𿝿ïŒç±»åæ£æ¥ãèªåšè¡¥å
šïŒã
-åšåŒåæéŽïŒæè¿äžº **Starlette** åäºäžå°èŽ¡ç®ïŒè¿æ¯åŠäžäžªå
³é®éæ±é¡¹ã
+åšåŒåæéŽïŒæè¿äžº [**Starlette**](https://www.starlette.dev/) åäºäžå°èŽ¡ç®ïŒè¿æ¯åŠäžäžªå
³é®éæ±é¡¹ã
## åŒå { #development }
@@ -74,4 +74,4 @@
**FastAPI** 忝å
æã
-åšæ€ïŒæä»¬è¡·å¿æè°¢[æšçåž®å©](help-fastapi.md){.internal-link target=_blank}ã
+åšæ€ïŒæä»¬è¡·å¿æè°¢[äœ çåž®å©](help-fastapi.md)ã
diff --git a/docs/zh/docs/how-to/authentication-error-status-code.md b/docs/zh/docs/how-to/authentication-error-status-code.md
index 466b90e15a..6f8c0a67cd 100644
--- a/docs/zh/docs/how-to/authentication-error-status-code.md
+++ b/docs/zh/docs/how-to/authentication-error-status-code.md
@@ -2,7 +2,7 @@
åš FastAPI `0.122.0` çæ¬ä¹åïŒåœå
眮çå®å
šå·¥å
·åšè®€è¯å€±èŽ¥åå客æ·ç«¯è¿åé误æ¶ïŒäŒäœ¿çš HTTP ç¶æç `403 Forbidden`ã
-ä» FastAPI `0.122.0` çæ¬åŒå§ïŒå®ä»¬æ¹çšæŽåéç HTTP ç¶æç `401 Unauthorized`ïŒå¹¶åšååºäžè¿ååçç `WWW-Authenticate` 倎ïŒéµåŸª HTTP è§èïŒRFC 7235ãRFC 9110ã
+ä» FastAPI `0.122.0` çæ¬åŒå§ïŒå®ä»¬æ¹çšæŽåéç HTTP ç¶æç `401 Unauthorized`ïŒå¹¶åšååºäžè¿ååçç `WWW-Authenticate` 倎ïŒéµåŸª HTTP è§èïŒ[RFC 7235](https://datatracker.ietf.org/doc/html/rfc7235#section-3.1)ã[RFC 9110](https://datatracker.ietf.org/doc/html/rfc9110#name-401-unauthorized)ã
äœåŠæç±äºæäºåå äœ ç客æ·ç«¯äŸèµæ§è¡äžºïŒäœ å¯ä»¥åšäœ çå®å
šç±»äžéåæ¹æ³ `make_not_authenticated_error` æ¥åéå°æ§è¡äžºã
diff --git a/docs/zh/docs/how-to/conditional-openapi.md b/docs/zh/docs/how-to/conditional-openapi.md
index d26b5f3bd0..b0c5d521c1 100644
--- a/docs/zh/docs/how-to/conditional-openapi.md
+++ b/docs/zh/docs/how-to/conditional-openapi.md
@@ -10,7 +10,7 @@
åŠæäœ ç代ç éæå®å
šæŒæŽïŒå®ä»ç¶ååšã
-éèææ¡£åªäŒè®©çè§£åŠäœäž API 亀äºååŸæŽå°éŸïŒä¹å¯èœè®©äœ åšç产ç¯å¢äžè°è¯æŽå°éŸãè¿å€§äœäžå¯ä»¥è¢«è§äžºäžç§ éè¿éèå®ç°å®å
š çåæ³ã
+éèææ¡£åªäŒè®©çè§£åŠäœäž API 亀äºååŸæŽå°éŸïŒä¹å¯èœè®©äœ åšç产ç¯å¢äžè°è¯æŽå°éŸãè¿å€§äœäžå¯ä»¥è¢«è§äžºäžç§ [éè¿éèå®ç°å®å
š](https://en.wikipedia.org/wiki/Security_through_obscurity) çåæ³ã
åŠæäœ æ³ä¿æ€äœ ç APIïŒæåŸå€æŽå¥œçæªæœïŒäŸåŠïŒ
diff --git a/docs/zh/docs/how-to/configure-swagger-ui.md b/docs/zh/docs/how-to/configure-swagger-ui.md
index bf26246573..3dbc54911b 100644
--- a/docs/zh/docs/how-to/configure-swagger-ui.md
+++ b/docs/zh/docs/how-to/configure-swagger-ui.md
@@ -1,10 +1,10 @@
# é
眮 Swagger UI { #configure-swagger-ui }
-äœ å¯ä»¥é
眮äžäºé¢å€ç Swagger UI åæ°.
+äœ å¯ä»¥é
眮äžäºé¢å€ç [Swagger UI åæ°](https://swagger.io/docs/open-source-tools/swagger-ui/usage/configuration/)ã
åŠæéèŠé
眮å®ä»¬ïŒå¯ä»¥åšå建 `FastAPI()` åºçšå¯¹è±¡æ¶æè°çš `get_swagger_ui_html()` åœæ°æ¶äŒ é `swagger_ui_parameters` åæ°ã
-`swagger_ui_parameters` æ¥åäžäžªçŽæ¥äŒ éç» Swagger UIçåå
žïŒå
å«é
çœ®åæ°é®åŒå¯¹ã
+`swagger_ui_parameters` æ¥åäžäžªåå
žïŒè¯¥åå
žäŒçŽæ¥äŒ éç» Swagger UIã
FastAPIäŒå°è¿äºé
眮蜬æ¢äžº **JSON**ïŒäœ¿å
¶äž JavaScript å
Œå®¹ïŒå äžºè¿æ¯ Swagger UI éèŠçã
@@ -50,7 +50,7 @@ FastAPI å
å«äºäžäºé»è®€é
çœ®åæ°ïŒéçšäºå€§å€æ°çšäŸã
## å
¶ä» Swagger UI åæ° { #other-swagger-ui-parameters }
-æ¥çææå
¶ä»å¯çšçé
眮ïŒè¯·é
读 Swagger UI åæ°ææ¡£ã
+æ¥çææå
¶ä»å¯çšçé
眮ïŒè¯·é
è¯»å®æ¹ç [Swagger UI åæ°ææ¡£](https://swagger.io/docs/open-source-tools/swagger-ui/usage/configuration/)ã
## JavaScript-only é
眮 { #javascript-only-settings }
diff --git a/docs/zh/docs/how-to/custom-docs-ui-assets.md b/docs/zh/docs/how-to/custom-docs-ui-assets.md
index 9e6e5a66b8..47b27b69ca 100644
--- a/docs/zh/docs/how-to/custom-docs-ui-assets.md
+++ b/docs/zh/docs/how-to/custom-docs-ui-assets.md
@@ -54,7 +54,7 @@ Swagger UI äŒåšå¹åäžºäœ å€çè¿äºïŒäœå®éèŠè¿äžªâéå®åâèŸ
### æµè¯ { #test-it }
-ç°åšïŒäœ åºè¯¥å¯ä»¥è®¿é® http://127.0.0.1:8000/docsïŒå¹¶å·æ°é¡µé¢ïŒé¡µé¢äŒä»æ°ç CDN å 蜜è¿äºèµæºã
+ç°åšïŒäœ åºè¯¥å¯ä»¥è®¿é® [http://127.0.0.1:8000/docs](http://127.0.0.1:8000/docs)ïŒå¹¶å·æ°é¡µé¢ïŒé¡µé¢äŒä»æ°ç CDN å 蜜è¿äºèµæºã
## äžºææ¡£èªæç®¡ JavaScript å CSS { #self-hosting-javascript-and-css-for-docs }
@@ -93,12 +93,12 @@ Swagger UI äŒåšå¹åäžºäœ å€çè¿äºïŒäœå®éèŠè¿äžªâéå®åâèŸ
Swagger UI 䜿çšä»¥äžæä»¶ïŒ
-- `swagger-ui-bundle.js`
-- `swagger-ui.css`
+- [`swagger-ui-bundle.js`](https://cdn.jsdelivr.net/npm/swagger-ui-dist@5/swagger-ui-bundle.js)
+- [`swagger-ui.css`](https://cdn.jsdelivr.net/npm/swagger-ui-dist@5/swagger-ui.css)
è ReDoc 䜿çšä»¥äžæä»¶ïŒ
-- `redoc.standalone.js`
+- [`redoc.standalone.js`](https://cdn.jsdelivr.net/npm/redoc@2/bundles/redoc.standalone.js)
ä¹åïŒäœ çæä»¶ç»æå¯èœåŠäžïŒ
@@ -122,7 +122,7 @@ Swagger UI 䜿çšä»¥äžæä»¶ïŒ
### æµè¯éææä»¶ { #test-the-static-files }
-å¯åšäœ çåºçšïŒå¹¶è®¿é® http://127.0.0.1:8000/static/redoc.standalone.jsã
+å¯åšäœ çåºçšïŒå¹¶è®¿é® [http://127.0.0.1:8000/static/redoc.standalone.js](http://127.0.0.1:8000/static/redoc.standalone.js)ã
äœ åºè¯¥äŒçå°äžäžªéåžžé¿ç **ReDoc** ç JavaScript æä»¶ã
@@ -180,6 +180,6 @@ Swagger UI äŒåšå¹åäžºäœ å€çè¿äºïŒäœå®éèŠè¿äžªâéå®åâèŸ
### æµè¯éææä»¶ UI { #test-static-files-ui }
-ç°åšïŒäœ å¯ä»¥æåŒ WiFiïŒè®¿é® http://127.0.0.1:8000/docsïŒå¹¶å·æ°é¡µé¢ã
+ç°åšïŒäœ å¯ä»¥æåŒ WiFiïŒè®¿é® [http://127.0.0.1:8000/docs](http://127.0.0.1:8000/docs)ïŒå¹¶å·æ°é¡µé¢ã
å³äœ¿æ²¡æäºèçœïŒäœ ä¹èœçå° API çææ¡£å¹¶äžä¹äº€äºã
diff --git a/docs/zh/docs/how-to/custom-request-and-route.md b/docs/zh/docs/how-to/custom-request-and-route.md
index 8b365987ce..79860a5623 100644
--- a/docs/zh/docs/how-to/custom-request-and-route.md
+++ b/docs/zh/docs/how-to/custom-request-and-route.md
@@ -18,7 +18,7 @@
äžäºäœ¿çšåºæ¯å
æ¬ïŒ
-* å°é JSON ç请æ±äœèœ¬æ¢äžº JSONïŒäŸåŠ `msgpack`ïŒã
+* å°é JSON ç请æ±äœèœ¬æ¢äžº JSONïŒäŸåŠ [`msgpack`](https://msgpack.org/index.html)ïŒã
* è§£åçŒ©äœ¿çš gzip å猩ç请æ±äœã
* èªåšè®°åœææè¯·æ±äœæ¥å¿ã
@@ -32,7 +32,7 @@
/// tip | æç€º
-è¿æ¯äžäžªæŒç€ºå·¥äœåçç瀺äŸãåŠæäœ éèŠ Gzip æ¯æïŒå¯ä»¥çŽæ¥äœ¿çšæäŸç [`GzipMiddleware`](../advanced/middleware.md#gzipmiddleware){.internal-link target=_blank}ã
+è¿æ¯äžäžªæŒç€ºå·¥äœåçç瀺äŸãåŠæäœ éèŠ Gzip æ¯æïŒå¯ä»¥çŽæ¥äœ¿çšæäŸç [`GzipMiddleware`](../advanced/middleware.md#gzipmiddleware)ã
///
@@ -66,7 +66,7 @@
å建äžäžªæ°ç `Request` å®äŸéèŠè¿äž€æ ·ïŒ`scope` å `receive`ã
-æ³äºè§£æŽå€å
³äº `Request` çä¿¡æ¯ïŒè¯·æ¥ç Starlette ç Request ææ¡£ã
+æ³äºè§£æŽå€å
³äº `Request` çä¿¡æ¯ïŒè¯·æ¥ç [Starlette ç Request ææ¡£](https://www.starlette.dev/requests/)ã
///
@@ -82,7 +82,7 @@
/// tip | æç€º
-èŠè§£å³ç±»äŒŒé®é¢ïŒäœ¿çš `RequestValidationError` çèªå®ä¹å€çåšäžç `body` åŸåŸæŽç®åïŒ[å€çé误](../tutorial/handling-errors.md#use-the-requestvalidationerror-body){.internal-link target=_blank}ïŒã
+èŠè§£å³ç±»äŒŒé®é¢ïŒäœ¿çš `RequestValidationError` çèªå®ä¹å€çåšäžç `body` åŸåŸæŽç®åïŒ[å€çé误](../tutorial/handling-errors.md#use-the-requestvalidationerror-body)ïŒã
äœæ¬ç€ºäŸåæ ·ææïŒå¹¶å±ç€ºäºåŠäœäžå
éšç»ä»¶äº€äºã
diff --git a/docs/zh/docs/how-to/extending-openapi.md b/docs/zh/docs/how-to/extending-openapi.md
index ad8a1d6981..fd39e439fa 100644
--- a/docs/zh/docs/how-to/extending-openapi.md
+++ b/docs/zh/docs/how-to/extending-openapi.md
@@ -37,7 +37,7 @@
åºäºä»¥äžä¿¡æ¯ïŒäœ å¯ä»¥çšåäžäžªå·¥å
·åœæ°çæ OpenAPI æ¶æïŒå¹¶æéèŠçå
¶äžçå䞪éšåã
-äŸåŠïŒè®©æä»¬æ·»å ReDoc ç OpenAPI æ©å±ä»¥å
å«èªå®ä¹ Logoã
+äŸåŠïŒè®©æä»¬æ·»å [ReDoc ç OpenAPI æ©å±ä»¥å
å«èªå®ä¹ Logo](https://github.com/Rebilly/ReDoc/blob/master/docs/redoc-vendor-extensions.md#x-logo)ã
### åžžè§ **FastAPI** { #normal-fastapi }
@@ -75,6 +75,6 @@
### éªè¯ { #check-it }
-åœäœ è®¿é® http://127.0.0.1:8000/redoc æ¶ïŒäœ äŒçå°å·²äœ¿çšäœ çèªå®ä¹ LogoïŒæ¬äŸäžäžº **FastAPI** ç LogoïŒïŒ
+åœäœ è®¿é® [http://127.0.0.1:8000/redoc](http://127.0.0.1:8000/redoc) æ¶ïŒäœ äŒçå°å·²äœ¿çšäœ çèªå®ä¹ LogoïŒæ¬äŸäžäžº **FastAPI** ç LogoïŒïŒ
diff --git a/docs/zh/docs/how-to/general.md b/docs/zh/docs/how-to/general.md
index 2c9f781791..1526ca1872 100644
--- a/docs/zh/docs/how-to/general.md
+++ b/docs/zh/docs/how-to/general.md
@@ -4,36 +4,40 @@
## æ°æ®è¿æ»€ - å®å
šæ§ { #filter-data-security }
-䞺确ä¿äžè¿åè¶
è¿éèŠçæ°æ®ïŒè¯·é
读 [æçš - ååºæš¡å - è¿åç±»å](../tutorial/response-model.md){.internal-link target=_blank} ææ¡£ã
+䞺确ä¿äžè¿åè¶
è¿éèŠçæ°æ®ïŒè¯·é
读 [æçš - ååºæš¡å - è¿åç±»å](../tutorial/response-model.md) ææ¡£ã
+
+## äŒåååºæ§èœ - ååºæš¡å - è¿åç±»å { #optimize-response-performance-response-model-return-type }
+
+åšè¿å JSON æ°æ®æ¶äŒåæ§èœïŒè¯·äœ¿çšè¿åç±»åæååºæš¡åïŒè¿æ · Pydantic äŒåš Rust 䟧å€çå° JSON çåºååïŒèæ éç»è¿ PythonãæŽå€å
容请é
读 [æçš - ååºæš¡å - è¿åç±»å](../tutorial/response-model.md) ææ¡£ã
## ææ¡£çæ çŸ - OpenAPI { #documentation-tags-openapi }
-åšææ¡£çé¢äžæ·»å **è·¯åŸæäœ**çæ çŸåè¿è¡åç»ïŒè¯·é
读 [æçš - è·¯åŸæäœé
眮 - Tags åæ°](../tutorial/path-operation-configuration.md#tags){.internal-link target=_blank} ææ¡£ã
+åšææ¡£çé¢äžæ·»å **è·¯åŸæäœ**çæ çŸåè¿è¡åç»ïŒè¯·é
读 [æçš - è·¯åŸæäœé
眮 - Tags](../tutorial/path-operation-configuration.md#tags) ææ¡£ã
## ææ¡£çæŠèŠåæè¿° - OpenAPI { #documentation-summary-and-description-openapi }
-åšææ¡£çé¢äžæ·»å **è·¯åŸæäœ**çæŠèŠåæè¿°ïŒè¯·é
读 [æçš - è·¯åŸæäœé
眮 - Summary å Description åæ°](../tutorial/path-operation-configuration.md#summary-and-description){.internal-link target=_blank} ææ¡£ã
+åšææ¡£çé¢äžæ·»å **è·¯åŸæäœ**çæŠèŠåæè¿°ïŒè¯·é
读 [æçš - è·¯åŸæäœé
眮 - Summary å Description](../tutorial/path-operation-configuration.md#summary-and-description) ææ¡£ã
## ææ¡£çååºæè¿° - OpenAPI { #documentation-response-description-openapi }
-åšææ¡£çé¢äžå®ä¹å¹¶æŸç€ºååºæè¿°ïŒè¯·é
读 [æçš - è·¯åŸæäœé
眮 - ååºæè¿°](../tutorial/path-operation-configuration.md#response-description){.internal-link target=_blank} ææ¡£ã
+åšææ¡£çé¢äžå®ä¹å¹¶æŸç€ºååºæè¿°ïŒè¯·é
读 [æçš - è·¯åŸæäœé
眮 - ååºæè¿°](../tutorial/path-operation-configuration.md#response-description) ææ¡£ã
## ææ¡£åŒçš**è·¯åŸæäœ** - OpenAPI { #documentation-deprecate-a-path-operation-openapi }
-åšææ¡£çé¢äžæŸç€ºåŒçšç**è·¯åŸæäœ**ïŒè¯·é
读 [æçš - è·¯åŸæäœé
眮 - åŒçš](../tutorial/path-operation-configuration.md#deprecate-a-path-operation){.internal-link target=_blank} ææ¡£ã
+åšææ¡£çé¢äžæŸç€ºåŒçšç**è·¯åŸæäœ**ïŒè¯·é
读 [æçš - è·¯åŸæäœé
眮 - åŒçš](../tutorial/path-operation-configuration.md#deprecate-a-path-operation) ææ¡£ã
## å°ä»»äœæ°æ®èœ¬æ¢äžº JSON å
Œå®¹æ ŒåŒ { #convert-any-data-to-json-compatible }
-èŠå°ä»»äœæ°æ®èœ¬æ¢äžº JSON å
Œå®¹æ ŒåŒïŒè¯·é
读 [æçš - JSON å
Œå®¹çŒç åš](../tutorial/encoder.md){.internal-link target=_blank} ææ¡£ã
+èŠå°ä»»äœæ°æ®èœ¬æ¢äžº JSON å
Œå®¹æ ŒåŒïŒè¯·é
读 [æçš - JSON å
Œå®¹çŒç åš](../tutorial/encoder.md) ææ¡£ã
## OpenAPI å
æ°æ® - ææ¡£ { #openapi-metadata-docs }
-èŠæ·»å OpenAPI çå
æ°æ®ïŒå
æ¬è®žå¯è¯ãçæ¬ãèç³»æ¹åŒçïŒè¯·é
读 [æçš - å
æ°æ®åææ¡£ URL](../tutorial/metadata.md){.internal-link target=_blank} ææ¡£ã
+èŠæ·»å OpenAPI çå
æ°æ®ïŒå
æ¬è®žå¯è¯ãçæ¬ãèç³»æ¹åŒçïŒè¯·é
读 [æçš - å
æ°æ®åææ¡£ URL](../tutorial/metadata.md) ææ¡£ã
## OpenAPI èªå®ä¹ URL { #openapi-custom-url }
-èŠèªå®ä¹ OpenAPI ç URLïŒæå é€å®ïŒïŒè¯·é
读 [æçš - å
æ°æ®åææ¡£ URL](../tutorial/metadata.md#openapi-url){.internal-link target=_blank} ææ¡£ã
+èŠèªå®ä¹ OpenAPI ç URLïŒæå é€å®ïŒïŒè¯·é
读 [æçš - å
æ°æ®åææ¡£ URL](../tutorial/metadata.md#openapi-url) ææ¡£ã
## OpenAPI ææ¡£ URL { #openapi-docs-urls }
-èŠæŽæ¹èªåšçæçææ¡£çšæ·çé¢æäœ¿çšç URLïŒè¯·é
读 [æçš - å
æ°æ®åææ¡£ URL](../tutorial/metadata.md#docs-urls){.internal-link target=_blank}ã
+èŠæŽæ¹èªåšçæçææ¡£çšæ·çé¢æäœ¿çšç URLïŒè¯·é
读 [æçš - å
æ°æ®åææ¡£ URL](../tutorial/metadata.md#docs-urls)ã
diff --git a/docs/zh/docs/how-to/graphql.md b/docs/zh/docs/how-to/graphql.md
index 5384f15137..b33d6759fa 100644
--- a/docs/zh/docs/how-to/graphql.md
+++ b/docs/zh/docs/how-to/graphql.md
@@ -18,18 +18,18 @@
ä»¥äžæ¯äžäºæ¯æ **ASGI** ç **GraphQL** åºãäœ å¯ä»¥å°å®ä»¬äž **FastAPI** äžèµ·äœ¿çšïŒ
-* Strawberry ð
- * æäŸ é¢å FastAPI çææ¡£
-* Ariadne
- * æäŸ é¢å FastAPI çææ¡£
-* Tartiflette
- * æäŸçšäº ASGI éæç Tartiflette ASGI
-* Graphene
- * å¯é
å starlette-graphene3 䜿çš
+* [Strawberry](https://strawberry.rocks/) ð
+ * æäŸ [é¢å FastAPI çææ¡£](https://strawberry.rocks/docs/integrations/fastapi)
+* [Ariadne](https://ariadnegraphql.org/)
+ * æäŸ [é¢å FastAPI çææ¡£](https://ariadnegraphql.org/docs/fastapi-integration)
+* [Tartiflette](https://tartiflette.io/)
+ * æäŸçšäº ASGI éæç [Tartiflette ASGI](https://tartiflette.github.io/tartiflette-asgi/)
+* [Graphene](https://graphene-python.org/)
+ * å¯é
å [starlette-graphene3](https://github.com/ciscorn/starlette-graphene3) 䜿çš
## äœ¿çš Strawberry ç GraphQL { #graphql-with-strawberry }
-åŠæäœ éèŠææ³èŠäœ¿çš **GraphQL**ïŒ**Strawberry** æ¯**æšè**çåºïŒå 䞺å®çè®Ÿè®¡äž **FastAPI** æäžºæ¥è¿ïŒå
šéšåºäº**ç±»åæ³šè§£**ã
+åŠæäœ éèŠææ³èŠäœ¿çš **GraphQL**ïŒ[**Strawberry**](https://strawberry.rocks/) æ¯**æšè**çåºïŒå 䞺å®çè®Ÿè®¡äž **FastAPI** æäžºæ¥è¿ïŒå
šéšåºäº**ç±»åæ³šè§£**ã
æ ¹æ®äœ ççšäŸïŒäœ å¯èœäŒæŽå欢å
¶ä»åºïŒäœåŠæäœ é®æïŒæå€§æŠçäŒå»ºè®®äœ å
è¯è¯ **Strawberry**ã
@@ -37,24 +37,24 @@
{* ../../docs_src/graphql_/tutorial001_py310.py hl[3,22,25] *}
-äœ å¯ä»¥åš Strawberry ææ¡£äžäºè§£æŽå€ä¿¡æ¯ã
+äœ å¯ä»¥åš [Strawberry ææ¡£](https://strawberry.rocks/) äžäºè§£æŽå€ä¿¡æ¯ã
-è¿æå
³äº å° Strawberry äž FastAPI ç»å䜿çšçææ¡£ã
+è¿æå
³äº [å° Strawberry äž FastAPI ç»å䜿çš](https://strawberry.rocks/docs/integrations/fastapi) çææ¡£ã
## Starlette äžèŸæ©ç `GraphQLApp` { #older-graphqlapp-from-starlette }
-æ©æçæ¬ç Starlette å
å«äžäžª `GraphQLApp` ç±»ïŒçšäºäž Graphene éæã
+æ©æçæ¬ç Starlette å
å«äžäžª `GraphQLApp` ç±»ïŒçšäºäž [Graphene](https://graphene-python.org/) éæã
-å®å·²åš Starlette äžè¢«åŒçšïŒäœåŠæäœ ç代ç 䜿çšäºå®ïŒäœ å¯ä»¥èœ»æŸ**è¿ç§»**å° starlette-graphene3ïŒå®èŠççžåççšäŸïŒäžæ¥å£**å ä¹å®å
šäžèŽ**ã
+å®å·²åš Starlette äžè¢«åŒçšïŒäœåŠæäœ ç代ç 䜿çšäºå®ïŒäœ å¯ä»¥èœ»æŸ**è¿ç§»**å° [starlette-graphene3](https://github.com/ciscorn/starlette-graphene3)ïŒå®èŠççžåççšäŸïŒäžæ¥å£**å ä¹å®å
šäžèŽ**ã
/// tip | æç€º
-åŠæäœ éèŠ GraphQLïŒæä»ç¶å»ºè®®çç StrawberryïŒå 䞺å®åºäºç±»å泚解èäžæ¯èªå®ä¹ç±»åç±»åã
+åŠæäœ éèŠ GraphQLïŒæä»ç¶å»ºè®®çç [Strawberry](https://strawberry.rocks/)ïŒå 䞺å®åºäºç±»å泚解èäžæ¯èªå®ä¹ç±»åç±»åã
///
## äºè§£æŽå€ { #learn-more }
-äœ å¯ä»¥åš GraphQL 宿¹ææ¡£äžäºè§£æŽå€å
³äº **GraphQL** çå
容ã
+äœ å¯ä»¥åš [GraphQL 宿¹ææ¡£](https://graphql.org/) äžäºè§£æŽå€å
³äº **GraphQL** çå
容ã
äœ ä¹å¯ä»¥éè¿äžé¢çéŸæ¥é
读å䞪åºçæŽå€ä¿¡æ¯ã
diff --git a/docs/zh/docs/how-to/index.md b/docs/zh/docs/how-to/index.md
index 980dcd1a65..ff3d8afa0c 100644
--- a/docs/zh/docs/how-to/index.md
+++ b/docs/zh/docs/how-to/index.md
@@ -8,6 +8,6 @@
/// tip | æç€º
-åŠæäœ æ³ä»¥ç³»ç»çæ¹åŒ**åŠä¹ FastAPI**ïŒæšèïŒïŒè¯·é
读 [æçš - çšæ·æå](../tutorial/index.md){.internal-link target=_blank} çæ¯äžç« èã
+åŠæäœ æ³ä»¥ç³»ç»çæ¹åŒ**åŠä¹ FastAPI**ïŒæšèïŒïŒè¯·é
读 [æçš - çšæ·æå](../tutorial/index.md) çæ¯äžç« èã
///
diff --git a/docs/zh/docs/how-to/migrate-from-pydantic-v1-to-pydantic-v2.md b/docs/zh/docs/how-to/migrate-from-pydantic-v1-to-pydantic-v2.md
index 2e5445200a..3723eb0327 100644
--- a/docs/zh/docs/how-to/migrate-from-pydantic-v1-to-pydantic-v2.md
+++ b/docs/zh/docs/how-to/migrate-from-pydantic-v1-to-pydantic-v2.md
@@ -22,7 +22,7 @@ FastAPI 0.126.0 ç§»é€äºå¯¹ Pydantic v1 çæ¯æïŒäœåšäžæ®µæ¶éŽå
仿¯
## 宿¹æå { #official-guide }
-Pydantic æäžä»œä» v1 è¿ç§»å° v2 ç宿¹ è¿ç§»æåã
+Pydantic æäžä»œä» v1 è¿ç§»å° v2 ç宿¹[è¿ç§»æå](https://docs.pydantic.dev/latest/migration/)ã
å
¶äžå
å«åæŽå
å®¹ãæ ¡éªåŠäœæŽåç¡®æŽäž¥æ Œãå¯èœç泚æäºé¡¹çã
@@ -30,7 +30,7 @@ Pydantic æäžä»œä» v1 è¿ç§»å° v2 ç宿¹ `bump-pydantic`ã
+äœ å¯ä»¥äœ¿çšåäž Pydantic å¢éæäŸç[`bump-pydantic`](https://github.com/pydantic/bump-pydantic)ã
该工å
·äŒåž®å©äœ èªåšä¿®æ¹å€§éšåéèŠåæŽç代ç ã
diff --git a/docs/zh/docs/how-to/testing-database.md b/docs/zh/docs/how-to/testing-database.md
index e4a20d8436..57219832bb 100644
--- a/docs/zh/docs/how-to/testing-database.md
+++ b/docs/zh/docs/how-to/testing-database.md
@@ -1,7 +1,7 @@
# æµè¯æ°æ®åº { #testing-a-database }
-äœ å¯ä»¥åš SQLModel ææ¡£ äžåŠä¹ æ°æ®åºãSQL å SQLModelãð€
+äœ å¯ä»¥åš[SQLModel ææ¡£](https://sqlmodel.tiangolo.com/)äžåŠä¹ æ°æ®åºãSQL å SQLModelãð€
-è¿éæäžäžªå
³äºåš FastAPI äžäœ¿çš SQLModel çå°æçšïŒäœ¿çš SQLModel æé
FastAPI çæçšãâš
+è¿éæäžäžª[åš FastAPI äžäœ¿çš SQLModel çå°æçš](https://sqlmodel.tiangolo.com/tutorial/fastapi/)ãâš
-该æçšå
å«äžäžªå
³äº æµè¯ SQL æ°æ®åº çç« èãð
+该æçšå
å«äžäžªå
³äº[æµè¯ SQL æ°æ®åº](https://sqlmodel.tiangolo.com/tutorial/fastapi/tests/)çç« èãð
diff --git a/docs/zh/docs/index.md b/docs/zh/docs/index.md
index 38e128bf14..a88c25efb1 100644
--- a/docs/zh/docs/index.md
+++ b/docs/zh/docs/index.md
@@ -11,25 +11,25 @@
FastAPI æ¡æ¶ïŒé«æ§èœïŒæäºåŠä¹ ïŒé«æçŒç ïŒç产å¯çš
-
+
-
+
-
+
-
+
---
-**ææ¡£**ïŒ https://fastapi.tiangolo.com
+**ææ¡£**ïŒ [https://fastapi.tiangolo.com/zh](https://fastapi.tiangolo.com/zh)
-**æºç **ïŒ https://github.com/fastapi/fastapi
+**æºç **ïŒ [https://github.com/fastapi/fastapi](https://github.com/fastapi/fastapi)
---
@@ -44,7 +44,7 @@ FastAPI æ¯äžäžªçšäºæå»º API çç°ä»£ãå¿«éïŒé«æ§èœïŒç Web æ¡
* **æçš**ïŒäžºæçšåæåŠèè®Ÿè®¡ãæŽå°çææ¡£é
读æ¶éŽã
* **ç®ç**ïŒæå°å代ç éå€ãäžæ¬¡åæ°å£°æå³å¯è·åŸå€ç§åèœãæŽå°ç bugã
* **å¥å£®**ïŒç产å¯çšçº§ä»£ç ã并垊æèªåšçæç亀äºåŒææ¡£ã
-* **æ åå**ïŒåºäºïŒå¹¶å®å
šå
Œå®¹ïŒAPI çåŒæŸæ åïŒOpenAPIïŒä»¥å称䞺 SwaggerïŒå JSON Schemaã
+* **æ åå**ïŒåºäºïŒå¹¶å®å
šå
Œå®¹ïŒAPI çåŒæŸæ åïŒ[OpenAPI](https://github.com/OAI/OpenAPI-Specification)ïŒä»¥å称䞺 SwaggerïŒå [JSON Schema](https://json-schema.org/)ã
* åºäºæå
éšåŒåå¢éåšæå»ºç产åºçšæ¶çæµè¯äŒ°ç®ã
@@ -55,51 +55,51 @@ FastAPI æ¯äžäžªçšäºæå»º API çç°ä»£ãå¿«éïŒé«æ§èœïŒç Web æ¡
### Keystone èµå©å { #keystone-sponsor }
{% for sponsor in sponsors.keystone -%}
-
+
{% endfor -%}
### éçåé¶çèµå©å { #gold-and-silver-sponsors }
{% for sponsor in sponsors.gold -%}
-
+
{% endfor -%}
{%- for sponsor in sponsors.silver -%}
-
+
{% endfor %}
-å
¶ä»èµå©å
+[å
¶ä»èµå©å](https://fastapi.tiangolo.com/zh/fastapi-people/#sponsors)
## è¯ä»· { #opinions }
ã_[...] æè¿æå€§éäœ¿çš **FastAPI**ã[...] æå®é
äžè®¡åæå®çšäºæå¢éåš **埮蜯** çææ **æºåšåŠä¹ æå¡**ãå
¶äžäžäºæ£åšéæè¿æ žå¿ **Windows** 产å以åäžäº **Office** 产åã_ã
-Kabir Khan -
Microsoft (ref)
+Kabir Khan -
Microsoft (ref)
---
ã_æä»¬éçš **FastAPI** æ¥æå»ºå¯æ¥è¯¢ä»¥è·å**颿µç»æ**ç **REST** æå¡åšã[çšäº Ludwig]_ã
-Piero MolinoïŒYaroslav DudinïŒSai Sumanth Miryala -
Uber (ref)
+Piero MolinoïŒYaroslav DudinïŒSai Sumanth Miryala -
Uber (ref)
---
ã_**Netflix** åŸé«å
Žå®£åžåŒæºæä»¬ç**屿ºç®¡ç**çŒææ¡æ¶ïŒ**Dispatch**ïŒ[äœ¿çš **FastAPI** æå»º]_ã
-Kevin GlissonïŒMarc VilanovaïŒForest Monsen -
Netflix (ref)
+Kevin GlissonïŒMarc VilanovaïŒForest Monsen -
Netflix (ref)
---
ã_æå¯¹ **FastAPI** å
Žå¥å°é£èµ·ãå®å€ªæè¶£äºïŒ_ã
-
+Brian Okken -
[Python Bytes](https://pythonbytes.fm/episodes/show/123/time-to-right-the-py-wrongs?time_in_sec=855) æå®¢äž»æäºº (ref)
---
ã_èå®è¯ŽïŒäœ æå»ºçäžè¥¿éåžžçš³å¥èäžæç£šåŸåŸå¥œãä»åŸå€æ¹é¢çïŒè¿å°±æ¯ææ³è®© **Hug** æäžºçæ ·å ââ çå°æäººæå®ååºæ¥ççåŸéŒè人å¿ã_ã
-
+Timothy Crosley -
[Hug](https://github.com/hugapi/hug) äœè
(ref)
---
@@ -107,27 +107,27 @@ FastAPI æ¯äžäžªçšäºæå»º API çç°ä»£ãå¿«éïŒé«æ§èœïŒç Web æ¡
ã_æä»¬å·²ç»ææä»¬ç **API** åæ¢å° **FastAPI** [...] ææ³äœ äŒåæ¬¢å® [...]_ã
-
+Ines Montani - Matthew Honnibal -
[Explosion AI](https://explosion.ai) åå§äºº - [spaCy](https://spacy.io) äœè
(ref) -
(ref)
---
ã_åŠææäººæ£åšæå»ºç产级ç Python APIïŒæåŒºçæšè **FastAPI**ãå®**讟计äŒé
**ã**䜿çšç®å**äž**é«åºŠå¯æ©å±**ïŒå·²ç»æäžºæä»¬ API äŒå
åŒåæç¥äžç**å
³é®ç»ä»¶**ïŒå¹¶é©±åšäºè®žå€èªåšååæå¡ïŒæ¯åп们ç Virtual TAC Engineerã_ã
-Deon Pillsbury -
Cisco (ref)
+Deon Pillsbury -
Cisco (ref)
---
## FastAPI è¿·äœ çºªåœç { #fastapi-mini-documentary }
-åš 2025 幎æ«ååžäºäžéšFastAPI è¿·äœ çºªåœçïŒäœ å¯ä»¥åšçº¿è§çïŒ
+åš 2025 幎æ«ååžäºäžéš [FastAPI è¿·äœ çºªåœç](https://www.youtube.com/watch?v=mpR8ngthqiE)ïŒäœ å¯ä»¥åšçº¿è§çïŒ
-
+
## **Typer**ïŒåœä»€è¡äžç FastAPI { #typer-the-fastapi-of-clis }
-
+
-åŠæäœ èŠåŒåäžäžªçšäºç»ç«¯ç åœä»€è¡åºçšèäžæ¯ Web APIïŒçç **Typer**ã
+åŠæäœ èŠåŒåäžäžªçšäºç»ç«¯ç åœä»€è¡åºçšèäžæ¯ Web APIïŒçç [**Typer**](https://typer.tiangolo.com/)ã
**Typer** æ¯ FastAPI çå°åèãå®çç®æ æ¯æäžº**åœä»€è¡äžç FastAPI**ãâšïž ð
@@ -135,12 +135,12 @@ FastAPI æ¯äžäžªçšäºæå»º API çç°ä»£ãå¿«éïŒé«æ§èœïŒç Web æ¡
FastAPI ç«åšå·šäººçè©èä¹äžïŒ
-* Starlette èŽèŽ£ Web éšåã
-* Pydantic èŽèŽ£æ°æ®éšåã
+* [Starlette](https://www.starlette.dev/) èŽèŽ£ Web éšåã
+* [Pydantic](https://docs.pydantic.dev/) èŽèŽ£æ°æ®éšåã
## å®è£
{ #installation }
-åå»ºå¹¶æ¿æŽ»äžäžªèæç¯å¢ïŒç¶åå®è£
FastAPIïŒ
+åå»ºå¹¶æ¿æŽ»äžäžª [èæç¯å¢](https://fastapi.tiangolo.com/zh/virtual-environments/)ïŒç¶åå®è£
FastAPIïŒ
@@ -199,7 +199,7 @@ async def read_item(item_id: int, q: str | None = None):
**Note**:
-åŠæäœ äžç¡®å®ïŒè¯·æ¥çææ¡£äž _"In a hurry?"_ ç« èç
`async` å `await`éšåã
+åŠæäœ äžç¡®å®ïŒè¯·æ¥çææ¡£äž _"In a hurry?"_ ç« èç [`async` å `await`](https://fastapi.tiangolo.com/zh/async/#in-a-hurry) éšåã
@@ -210,7 +210,7 @@ async def read_item(item_id: int, q: str | None = None):
```console
-$ fastapi dev main.py
+$ fastapi dev
âââââââââââ FastAPI CLI - Development mode ââââââââââââ®
â â
@@ -235,19 +235,19 @@ INFO: Application startup complete.
-å
³äºåœä»€ fastapi dev main.py...
+å
³äºåœä»€ fastapi dev...
-`fastapi dev` åœä»€äŒè¯»åäœ ç `main.py` æä»¶ïŒæ£æµå
¶äžç **FastAPI** åºçšïŒå¹¶äœ¿çš Uvicorn å¯åšæå¡åšã
+`fastapi dev` åœä»€äŒè¯»åäœ ç `main.py` æä»¶ïŒæ£æµå
¶äžç **FastAPI** åºçšïŒå¹¶äœ¿çš [Uvicorn](https://www.uvicorn.dev) å¯åšæå¡åšã
é»è®€æ
åµäžïŒ`fastapi dev` äŒåšæ¬å°åŒåæ¶å¯çšèªåšé蜜ã
-äœ å¯ä»¥åš FastAPI CLI ææ¡£äžäºè§£æŽå€ã
+äœ å¯ä»¥åš [FastAPI CLI ææ¡£](https://fastapi.tiangolo.com/zh/fastapi-cli/) äžäºè§£æŽå€ã
### æ£æ¥ { #check-it }
-çšæµè§åšæåŒ
http://127.0.0.1:8000/items/5?q=somequeryã
+çšæµè§åšæåŒ [http://127.0.0.1:8000/items/5?q=somequery](http://127.0.0.1:8000/items/5?q=somequery)ã
äœ äŒçå°åŠäž JSON ååºïŒ
@@ -264,17 +264,17 @@ INFO: Application startup complete.
### 亀äºåŒ API ææ¡£ { #interactive-api-docs }
-ç°åšè®¿é®
http://127.0.0.1:8000/docsã
+ç°åšè®¿é® [http://127.0.0.1:8000/docs](http://127.0.0.1:8000/docs)ã
-äœ äŒçå°èªåšçæç亀äºåŒ API ææ¡£ïŒç±
Swagger UI æäŸïŒïŒ
+äœ äŒçå°èªåšçæç亀äºåŒ API ææ¡£ïŒç± [Swagger UI](https://github.com/swagger-api/swagger-ui) æäŸïŒïŒ

### å¯éç API ææ¡£ { #alternative-api-docs }
-ç¶å访é®
http://127.0.0.1:8000/redocã
+ç¶åè®¿é® [http://127.0.0.1:8000/redoc](http://127.0.0.1:8000/redoc)ã
-äœ äŒçå°åŠäžäžªèªåšçæçææ¡£ïŒç±
ReDoc æäŸïŒïŒ
+äœ äŒçå°åŠäžäžªèªåšçæçææ¡£ïŒç± [ReDoc](https://github.com/Rebilly/ReDoc) æäŸïŒïŒ

@@ -316,7 +316,7 @@ def update_item(item_id: int, item: Item):
### 亀äºåŒ API ææ¡£å级 { #interactive-api-docs-upgrade }
-ç°åšè®¿é®
http://127.0.0.1:8000/docsã
+ç°åšè®¿é® [http://127.0.0.1:8000/docs](http://127.0.0.1:8000/docs)ã
* 亀äºåŒ API ææ¡£äŒèªåšæŽæ°ïŒå¹¶å
嫿°ç请æ±äœïŒ
@@ -332,7 +332,7 @@ def update_item(item_id: int, item: Item):
### å¯éææ¡£å级 { #alternative-api-docs-upgrade }
-å访é®
http://127.0.0.1:8000/redocã
+åè®¿é® [http://127.0.0.1:8000/redoc](http://127.0.0.1:8000/redoc)ã
* å¯éææ¡£åæ ·äŒäœç°æ°çæ¥è¯¢åæ°å请æ±äœïŒ
@@ -442,7 +442,7 @@ item: Item
* åèœåŒºå€§äžæçšç **
äŸèµæ³šå
¥** ç³»ç»ã
* å®å
šäžè®€è¯ïŒå
æ¬å¯¹ **OAuth2**ã**JWT tokens** å **HTTP Basic** 讀è¯çæ¯æã
* æŽé«çº§ïŒäœåæ ·ç®åïŒç **å€å±åµå¥ JSON æš¡å** 声ææå·§ïŒåŸçäº PydanticïŒã
-* éè¿
Strawberry çåºè¿è¡ **GraphQL** éæã
+* éè¿ [Strawberry](https://strawberry.rocks) çåºè¿è¡ **GraphQL** éæã
* 讞å€é¢å€ç¹æ§ïŒåœåäº StarletteïŒïŒäŸåŠïŒ
* **WebSockets**
* åºäº HTTPX å `pytest` çæå
¶ç®åçæµè¯
@@ -452,24 +452,10 @@ item: Item
### éšçœ²äœ çåºçšïŒå¯éïŒ { #deploy-your-app-optional }
-äœ å¯ä»¥éæ©æ FastAPI åºçšéšçœ²å°
FastAPI CloudïŒåŠæè¿æ²¡æçè¯å»å å
¥åè¡¥ååå§ãð
+äœ å¯ä»¥éæ©æ FastAPI åºçšéšçœ²å° [FastAPI Cloud](https://fastapicloud.com)ïŒåŠæè¿æ²¡æçè¯å»å å
¥åè¡¥ååå§ãð
åŠæäœ å·²ç»æ **FastAPI Cloud** 莊å·ïŒæä»¬ä»åè¡¥ååé请äºäœ ðïŒïŒäœ å¯ä»¥çšäžäžªåœä»€éšçœ²äœ çåºçšã
-éšçœ²åïŒå
确讀已ç»åœïŒ
-
-
-
-```console
-$ fastapi login
-
-You are logged in to FastAPI Cloud ð
-```
-
-
-
-ç¶åéšçœ²äœ çåºçšïŒ
-
```console
@@ -488,7 +474,7 @@ Deploying to FastAPI Cloud...
#### å
³äº FastAPI Cloud { #about-fastapi-cloud }
-**
FastAPI Cloud** ç± **FastAPI** çåäžäœäœè
åå¢éæé ã
+**[FastAPI Cloud](https://fastapicloud.com)** ç± **FastAPI** çåäžäœäœè
åå¢éæé ã
å®è®©äœ 以æå°çå·¥äœéå°±èœ**æå»º**ã**éšçœ²**å¹¶**访é®**äžäžª APIã
@@ -504,9 +490,9 @@ FastAPI æ¯åŒæºäžåºäºæ åçãäœ å¯ä»¥éšçœ² FastAPI åºçšå°äœ éæ©
## æ§èœ { #performance }
-ç¬ç«æºæ TechEmpower çåºåæµè¯æŸç€ºïŒè¿è¡åš Uvicorn äžç **FastAPI** åºçšæ¯
æå¿«ç Python æ¡æ¶ä¹äžïŒä»
æ¬¡äº Starlette å Uvicorn æ¬èº«ïŒFastAPI å
éšäœ¿çšå®ä»¬ïŒã(*)
+ç¬ç«æºæ TechEmpower çåºåæµè¯æŸç€ºïŒè¿è¡åš Uvicorn äžç **FastAPI** åºç𿝠[æå¿«ç Python æ¡æ¶ä¹äž](https://www.techempower.com/benchmarks/#section=test&runid=7464e520-0dc2-473d-bd34-dbdfd7e85911&hw=ph&test=query&l=zijzen-7)ïŒä»
æ¬¡äº Starlette å Uvicorn æ¬èº«ïŒFastAPI å
éšäœ¿çšå®ä»¬ïŒã(*)
-æ³äºè§£æŽå€ïŒè¯·åé
åºåæµè¯ç« èã
+æ³äºè§£æŽå€ïŒè¯·åé
[åºåæµè¯](https://fastapi.tiangolo.com/zh/benchmarks/) ç« èã
## äŸèµé¡¹ { #dependencies }
@@ -518,19 +504,19 @@ FastAPI äŸèµ Pydantic å Starletteã
Pydantic 䜿çšïŒ
-*
email-validator - çšäº email æ ¡éªã
+* [`email-validator`](https://github.com/JoshData/python-email-validator) - çšäº email æ ¡éªã
Starlette 䜿çšïŒ
-*
httpx - äœ¿çš `TestClient` æ¶éèŠã
-*
jinja2 - 䜿çšé»è®€æš¡æ¿é
眮æ¶éèŠã
-*
python-multipart - äœ¿çš `request.form()` æ¯æè¡šå
ãè§£æãæ¶éèŠã
+* [`httpx`](https://www.python-httpx.org) - äœ¿çš `TestClient` æ¶éèŠã
+* [`jinja2`](https://jinja.palletsprojects.com) - 䜿çšé»è®€æš¡æ¿é
眮æ¶éèŠã
+* [`python-multipart`](https://github.com/Kludex/python-multipart) - äœ¿çš `request.form()` æ¯æè¡šå
ãè§£æãæ¶éèŠã
FastAPI 䜿çšïŒ
-*
uvicorn - å 蜜并æäŸäœ çåºçšçæå¡åšãå
å« `uvicorn[standard]`ïŒå
¶äžå
å«é«æ§èœæå¡æéçäžäºäŸèµïŒäŸåŠ `uvloop`ïŒã
+* [`uvicorn`](https://www.uvicorn.dev) - å 蜜并æäŸäœ çåºçšçæå¡åšãå
å« `uvicorn[standard]`ïŒå
¶äžå
å«é«æ§èœæå¡æéçäžäºäŸèµïŒäŸåŠ `uvloop`ïŒã
* `fastapi-cli[standard]` - æäŸ `fastapi` åœä»€ã
- * å
¶äžå
å« `fastapi-cloud-cli`ïŒå®å
è®žäœ å° FastAPI åºçšéšçœ²å°
FastAPI Cloudã
+ * å
¶äžå
å« `fastapi-cloud-cli`ïŒå®å
è®žäœ å° FastAPI åºçšéšçœ²å° [FastAPI Cloud](https://fastapicloud.com)ã
### äžå
å« `standard` äŸèµ { #without-standard-dependencies }
@@ -546,13 +532,13 @@ FastAPI 䜿çšïŒ
é¢å€ç Pydantic å¯éäŸèµïŒ
-*
pydantic-settings - çšäºé
眮管çã
-*
pydantic-extra-types - çšäºåš Pydantic äžäœ¿çšçé¢å€ç±»åã
+* [`pydantic-settings`](https://docs.pydantic.dev/latest/usage/pydantic_settings/) - çšäºé
眮管çã
+* [`pydantic-extra-types`](https://docs.pydantic.dev/latest/usage/types/extra_types/extra_types/) - çšäºåš Pydantic äžäœ¿çšçé¢å€ç±»åã
é¢å€ç FastAPI å¯éäŸèµïŒ
-*
orjson - äœ¿çš `ORJSONResponse` æ¶éèŠã
-*
ujson - äœ¿çš `UJSONResponse` æ¶éèŠã
+* [`orjson`](https://github.com/ijl/orjson) - äœ¿çš `ORJSONResponse` æ¶éèŠã
+* [`ujson`](https://github.com/esnme/ultrajson) - äœ¿çš `UJSONResponse` æ¶éèŠã
## 讞å¯åè®® { #license }
diff --git a/docs/zh/docs/project-generation.md b/docs/zh/docs/project-generation.md
index a6ad9f94ac..8cc50c0963 100644
--- a/docs/zh/docs/project-generation.md
+++ b/docs/zh/docs/project-generation.md
@@ -4,7 +4,7 @@
äœ å¯ä»¥äœ¿çšæ€æš¡æ¿åŒå§ïŒå®å·²ç»äžºäœ 宿äºå€§éçåå§è®Ÿçœ®ãå®å
šæ§ãæ°æ®åºä»¥åäžäº API 端ç¹ã
-GitHub ä»åºïŒ
Full Stack FastAPI Template
+GitHub ä»åºïŒ[Full Stack FastAPI Template](https://github.com/tiangolo/full-stack-fastapi-template)
## FastAPIå
šæ æš¡æ¿ - ææ¯æ åç¹æ§ { #full-stack-fastapi-template-technology-stack-and-features }
diff --git a/docs/zh/docs/python-types.md b/docs/zh/docs/python-types.md
index 4824b7558d..9b2fceb98e 100644
--- a/docs/zh/docs/python-types.md
+++ b/docs/zh/docs/python-types.md
@@ -269,7 +269,7 @@ def some_function(data: Any):
## Pydantic æš¡å { #pydantic-models }
-
Pydantic æ¯äžäžªçšäºæ§è¡æ°æ®æ ¡éªç Python åºã
+[Pydantic](https://docs.pydantic.dev/) æ¯äžäžªçšäºæ§è¡æ°æ®æ ¡éªç Python åºã
äœ å°æ°æ®çâç»æâ声æäžºåžŠæå±æ§çç±»ã
@@ -285,13 +285,13 @@ def some_function(data: Any):
/// info | ä¿¡æ¯
-æ³äºè§£æŽå€å
³äº
Pydantic çä¿¡æ¯ïŒè¯·æ¥çå
¶ææ¡£ã
+æ³äºè§£æŽå€å
³äº [Pydantic](https://docs.pydantic.dev/) çä¿¡æ¯ïŒè¯·æ¥çå
¶ææ¡£ã
///
**FastAPI** å®å
šå»ºç«åš Pydantic ä¹äžã
-äœ äŒåš[æçš - çšæ·æå](tutorial/index.md){.internal-link target=_blank}äžçå°æŽå€çå®æç€ºäŸã
+äœ äŒåš[æçš - çšæ·æå](tutorial/index.md)äžçå°æŽå€çå®æç€ºäŸã
## 垊å
æ°æ®æ³šè§£çç±»åæç€º { #type-hints-with-metadata-annotations }
@@ -337,12 +337,12 @@ Python æ¬èº«äžäŒå¯¹è¿äžª `Annotated` åä»»äœå€çã对äºçŒèŸåšåå
¶
* äœ¿çš OpenAPI è®°åœ APIïŒ
* ç¶åçšäºèªåšçæäº€äºåŒææ¡£çé¢ã
-è¿äºå¬èµ·æ¥å¯èœæç¹æœè±¡ã嫿
å¿ãäœ äŒåš[æçš - çšæ·æå](tutorial/index.md){.internal-link target=_blank}äžçå°ææè¿äºçå®é
ææã
+è¿äºå¬èµ·æ¥å¯èœæç¹æœè±¡ã嫿
å¿ãäœ äŒåš[æçš - çšæ·æå](tutorial/index.md)äžçå°ææè¿äºçå®é
ææã
éèŠçæ¯ïŒéè¿äœ¿çšæ åç Python ç±»åïŒèäžåªåšäžäžªå°æ¹å£°æïŒèäžæ¯æ·»å æŽå€ç±»ãè£
饰åšçïŒïŒ**FastAPI** äŒäžºäœ 宿倧éå·¥äœã
/// info | ä¿¡æ¯
-åŠæäœ å·²ç»è¯»å®æææçšïŒå忥æ³è¿äžæ¥äºè§£ç±»åïŒäžäžªäžéçèµæºæ¯
`mypy` çâéæ¥è¡šâã
+åŠæäœ å·²ç»è¯»å®æææçšïŒå忥æ³è¿äžæ¥äºè§£ç±»åïŒäžäžªäžéçèµæºæ¯ [`mypy` çâéæ¥è¡šâ](https://mypy.readthedocs.io/en/latest/cheat_sheet_py3.html)ã
///
diff --git a/docs/zh/docs/tutorial/background-tasks.md b/docs/zh/docs/tutorial/background-tasks.md
index d73fee4299..975bb2688c 100644
--- a/docs/zh/docs/tutorial/background-tasks.md
+++ b/docs/zh/docs/tutorial/background-tasks.md
@@ -61,7 +61,7 @@
## ææ¯ç»è { #technical-details }
-`BackgroundTasks` ç±»çŽæ¥æ¥èª
`starlette.background`ã
+`BackgroundTasks` ç±»çŽæ¥æ¥èª [`starlette.background`](https://www.starlette.dev/background/)ã
å®è¢«çŽæ¥å¯Œå
¥/å
å«å°FastAPIä»¥äŸ¿äœ å¯ä»¥ä» `fastapi` 富å
¥ïŒå¹¶é¿å
æå€ä» `starlette.background` 富å
¥å€çšç `BackgroundTask` (å颿²¡æ `s`)ã
@@ -69,11 +69,11 @@
åšFastAPIäžä»ç¶å¯ä»¥åç¬äœ¿çš `BackgroundTask`ïŒäœæšå¿
é¡»åšä»£ç äžå建对象ïŒå¹¶è¿åå
å«å®çStarlette `Response`ã
-æŽå€ç»èæ¥ç
Starlette åå°ä»»å¡ç宿¹ææ¡£.
+æŽå€ç»èæ¥ç [Starlette åå°ä»»å¡ç宿¹ææ¡£](https://www.starlette.dev/background/)ã
## å诫 { #caveat }
-åŠææšéèŠæ§è¡ç¹éçåå°è®¡ç®ïŒå¹¶äžäžäžå®éèŠç±åäžè¿çšè¿è¡ïŒäŸåŠïŒæšäžéèŠå
±äº«å
åãåéçïŒïŒé£ä¹äœ¿çšå
¶ä»æŽå€§çå·¥å
·ïŒåŠ
CeleryïŒå¯èœæŽå¥œã
+åŠææšéèŠæ§è¡ç¹éçåå°è®¡ç®ïŒå¹¶äžäžäžå®éèŠç±åäžè¿çšè¿è¡ïŒäŸåŠïŒæšäžéèŠå
±äº«å
åãåéçïŒïŒé£ä¹äœ¿çšå
¶ä»æŽå€§çå·¥å
·ïŒåŠ [Celery](https://docs.celeryq.dev)ïŒå¯èœæŽå¥œã
å®ä»¬åŸåŸéèŠæŽå€æçé
眮ïŒå³æ¶æ¯/äœäžéå管çåšïŒåŠRabbitMQæRedisïŒäœå®ä»¬å
讞æšåšå€äžªè¿çšäžè¿è¡åå°ä»»å¡ïŒçè³æ¯åšå€äžªæå¡åšäžã
diff --git a/docs/zh/docs/tutorial/bigger-applications.md b/docs/zh/docs/tutorial/bigger-applications.md
index a667d596f8..74522f8384 100644
--- a/docs/zh/docs/tutorial/bigger-applications.md
+++ b/docs/zh/docs/tutorial/bigger-applications.md
@@ -123,7 +123,7 @@ from app.routers import items
æä»¬æ£åšäœ¿çšèæç请æ±éŠéšæ¥ç®åæ€ç€ºäŸã
-äœåšå®é
æ
åµäžïŒäœ¿çšéæç[å®å
šæ§å®çšå·¥å
·](security/index.md){.internal-link target=_blank}äŒåŸå°æŽå¥œçææã
+äœåšå®é
æ
åµäžïŒäœ¿çšéæç[å®å
šæ§å®çšå·¥å
·](security/index.md)äŒåŸå°æŽå¥œçææã
///
@@ -169,7 +169,7 @@ async def read_item(item_id: str):
/// tip | æç€º
-请泚æïŒå[*è·¯åŸæäœè£
饰åš*äžçäŸèµé¡¹](dependencies/dependencies-in-path-operation-decorators.md){.internal-link target=_blank}åŸç±»äŒŒïŒæ²¡æåŒäŒè¢«äŒ éç»äœ ç*è·¯åŸæäœåœæ°*ã
+请泚æïŒå[*è·¯åŸæäœè£
饰åš*äžçäŸèµé¡¹](dependencies/dependencies-in-path-operation-decorators.md)åŸç±»äŒŒïŒæ²¡æåŒäŒè¢«äŒ éç»äœ ç*è·¯åŸæäœåœæ°*ã
///
@@ -185,8 +185,8 @@ async def read_item(item_id: str):
* ææçè·¯åŸæäœéœå°å
å«é¢å®ä¹ç `responses`ã
* ææçè¿äº*è·¯åŸæäœ*éœå°åšèªèº«ä¹å计ç®/æ§è¡ `dependencies` å衚ã
* åŠæäœ è¿åšäžäžªå
·äœç*è·¯åŸæäœ*äžå£°æäºäŸèµé¡¹ïŒ**å®ä»¬ä¹äŒè¢«æ§è¡**ã
- * è·¯ç±åšçäŸèµé¡¹æå
æ§è¡ïŒç¶åæ¯[è£
饰åšäžç `dependencies`](dependencies/dependencies-in-path-operation-decorators.md){.internal-link target=_blank}ïŒåç¶åæ¯æ®éçåæ°äŸèµé¡¹ã
- * äœ è¿å¯ä»¥æ·»å [å
·æ `scopes` ç `Security` äŸèµé¡¹](../advanced/security/oauth2-scopes.md){.internal-link target=_blank}ã
+ * è·¯ç±åšçäŸèµé¡¹æå
æ§è¡ïŒç¶åæ¯[è£
饰åšäžç `dependencies`](dependencies/dependencies-in-path-operation-decorators.md)ïŒåç¶åæ¯æ®éçåæ°äŸèµé¡¹ã
+ * äœ è¿å¯ä»¥æ·»å [å
·æ `scopes` ç `Security` äŸèµé¡¹](../advanced/security/oauth2-scopes.md)ã
/// tip | æç€º
@@ -303,7 +303,7 @@ from ...dependencies import get_token_header
äœ å¯ä»¥åå¹³åžžäžæ ·å¯Œå
¥å¹¶å建äžäžª `FastAPI` ç±»ã
-æä»¬çè³å¯ä»¥å£°æ[å
šå±äŸèµé¡¹](dependencies/global-dependencies.md){.internal-link target=_blank}ïŒå®äŒåæ¯äžª `APIRouter` çäŸèµé¡¹ç»ååšäžèµ·ïŒ
+æä»¬çè³å¯ä»¥å£°æ[å
šå±äŸèµé¡¹](dependencies/global-dependencies.md)ïŒå®äŒåæ¯äžª `APIRouter` çäŸèµé¡¹ç»ååšäžèµ·ïŒ
{* ../../docs_src/bigger_applications/app_an_py310/main.py hl[1,3,7] title["app/main.py"] *}
@@ -353,7 +353,7 @@ from .routers import items, users
from app.routers import items, users
```
-èŠäºè§£æå
³ Python å
åæš¡åçæŽå€ä¿¡æ¯ïŒè¯·æ¥é
å
³äº Modules ç Python 宿¹ææ¡£ã
+èŠäºè§£æå
³ Python å
åæš¡åçæŽå€ä¿¡æ¯ïŒè¯·æ¥é
[å
³äº Modules ç Python 宿¹ææ¡£](https://docs.python.org/3/tutorial/modules.html)ã
///
@@ -451,7 +451,7 @@ from .routers.users import router
å®å°äžéè¿ `app.include_router()` æ·»å çææå
¶ä»*è·¯åŸæäœ*äžèµ·æ£åžžè¿è¡ã
-/// info | ç¹å«çææ¯ç»è
+/// info | éåžžææ¯ç»è
**泚æ**ïŒè¿æ¯äžäžªéåžžææ¯æ§çç»èïŒäœ ä¹è®žå¯ä»¥**çŽæ¥è·³è¿**ã
@@ -465,6 +465,37 @@ from .routers.users import router
///
+## åš `pyproject.toml` äžé
眮 `entrypoint` { #configure-the-entrypoint-in-pyproject-toml }
+
+å äžºäœ ç FastAPI `app` 对象äœäº `app/main.py` äžïŒäœ å¯ä»¥åš `pyproject.toml` äžè¿æ ·é
眮 `entrypoint`ïŒ
+
+```toml
+[tool.fastapi]
+entrypoint = "app.main:app"
+```
+
+çä»·äºåè¿æ ·å¯Œå
¥ïŒ
+
+```python
+from app.main import app
+```
+
+è¿æ · `fastapi` åœä»€å°±ç¥éå°åªé廿Ÿå°äœ çåºçšäºã
+
+/// Note | 泚æ
+
+äœ ä¹å¯ä»¥æè·¯åŸäŒ ç»åœä»€ïŒæ¯åŠïŒ
+
+```console
+$ fastapi dev app/main.py
+```
+
+äœæ¯æ¯æ¬¡è°çš `fastapi` åœä»€æ¶ïŒäœ éœéèŠè®°åŸäŒ å
¥æ£ç¡®çè·¯åŸã
+
+åŠå€ïŒå
¶ä»å·¥å
·å¯èœæŸäžå°å®ïŒæ¯åŠ [VS Code æ©å±](../editor-support.md) æ [FastAPI Cloud](https://fastapicloud.com)ïŒå æ€æšèåš `pyproject.toml` äžäœ¿çš `entrypoint`ã
+
+///
+
## æ¥çèªåšåç API ææ¡£ { #check-the-automatic-api-docs }
ç°åšïŒè¿è¡äœ çåºçšïŒ
@@ -472,14 +503,14 @@ from .routers.users import router
```console
-$ fastapi dev app/main.py
+$ fastapi dev
INFO: Uvicorn running on http://127.0.0.1:8000 (Press CTRL+C to quit)
```
-ç¶åæåŒäœäº
http://127.0.0.1:8000/docs çææ¡£ã
+ç¶åæåŒäœäº [http://127.0.0.1:8000/docs](http://127.0.0.1:8000/docs) çææ¡£ã
äœ å°çå°äœ¿çšäºæ£ç¡®è·¯åŸïŒååçŒïŒåæ£ç¡®æ çŸçèªåšå API ææ¡£ïŒå
æ¬äºæ¥èªææåæš¡åçè·¯åŸïŒ
diff --git a/docs/zh/docs/tutorial/body-nested-models.md b/docs/zh/docs/tutorial/body-nested-models.md
index fe6902e83f..93a34da553 100644
--- a/docs/zh/docs/tutorial/body-nested-models.md
+++ b/docs/zh/docs/tutorial/body-nested-models.md
@@ -95,7 +95,7 @@ Pydantic æš¡åçæ¯äžªå±æ§éœå
·æç±»åã
é€äºæ®éçåäžåŒç±»åïŒåŠ `str`ã`int`ã`float` çïŒå€ïŒäœ è¿å¯ä»¥äœ¿çšä» `str` ç»§æ¿çæŽå€æçåäžåŒç±»åã
-èŠäºè§£ææçå¯çšé项ïŒè¯·æ¥ç
Pydantic çç±»åæŠè§ãäœ å°åšäžäžç« èäžçå°äžäºç€ºäŸã
+èŠäºè§£ææçå¯çšé项ïŒè¯·æ¥ç [Pydantic çç±»åæŠè§](https://docs.pydantic.dev/latest/concepts/types/)ãäœ å°åšäžäžç« èäžçå°äžäºç€ºäŸã
äŸåŠïŒåš `Image` æš¡åäžæä»¬æäžäžª `url` åæ®µïŒæä»¬å¯ä»¥æå®å£°æäžº Pydantic ç `HttpUrl`ïŒèäžæ¯ `str`ïŒ
diff --git a/docs/zh/docs/tutorial/body-updates.md b/docs/zh/docs/tutorial/body-updates.md
index 000201de99..5b181642cb 100644
--- a/docs/zh/docs/tutorial/body-updates.md
+++ b/docs/zh/docs/tutorial/body-updates.md
@@ -2,7 +2,7 @@
## çš `PUT` æ¿æ¢åŒæŽæ° { #update-replacing-with-put }
-æŽæ°æ°æ®å¯ä»¥äœ¿çš
HTTP `PUT` æäœã
+æŽæ°æ°æ®å¯ä»¥äœ¿çš [HTTP `PUT`](https://developer.mozilla.org/en-US/docs/Web/HTTP/Methods/PUT) æäœã
æèŸå
¥æ°æ®èœ¬æ¢äžºä»¥ JSON æ ŒåŒååšçæ°æ®ïŒæ¯åŠïŒäœ¿çš NoSQL æ°æ®åºæ¶ïŒïŒå¯ä»¥äœ¿çš `jsonable_encoder`ãäŸåŠïŒæ `datetime` 蜬æ¢äžº `str`ã
@@ -28,7 +28,7 @@
## çš `PATCH` è¿è¡éšåæŽæ° { #partial-updates-with-patch }
-ä¹å¯ä»¥äœ¿çš
HTTP `PATCH` æäœå¯¹æ°æ®è¿è¡*éšå*æŽæ°ã
+ä¹å¯ä»¥äœ¿çš [HTTP `PATCH`](https://developer.mozilla.org/en-US/docs/Web/HTTP/Methods/PATCH) æäœå¯¹æ°æ®è¿è¡*éšå*æŽæ°ã
ä¹å°±æ¯è¯ŽïŒäœ åªéåéæ³èŠæŽæ°çæ°æ®ïŒå
¶äœæ°æ®ä¿æäžåã
@@ -95,6 +95,6 @@
å æ€ïŒåŠæåžææ¥æ¶çéšåæŽæ°å¯ä»¥çç¥ææå±æ§ïŒåéèŠäžäžªææå±æ§éœæ 记䞺å¯éïŒåžŠé»è®€åŒæ `None`ïŒçæš¡åã
-䞺äºåºåçšäº**æŽæ°**ïŒå
šéšå¯éïŒåçšäº**å建**ïŒå¿
å¡«ïŒçæš¡åïŒå¯ä»¥åè[æŽå€æš¡å](extra-models.md){.internal-link target=_blank} äžä»ç»çæè·¯ã
+䞺äºåºåçšäº**æŽæ°**ïŒå
šéšå¯éïŒåçšäº**å建**ïŒå¿
å¡«ïŒçæš¡åïŒå¯ä»¥åè[æŽå€æš¡å](extra-models.md) äžä»ç»çæè·¯ã
///
diff --git a/docs/zh/docs/tutorial/body.md b/docs/zh/docs/tutorial/body.md
index 4a72ba17c5..0a4c9c5e53 100644
--- a/docs/zh/docs/tutorial/body.md
+++ b/docs/zh/docs/tutorial/body.md
@@ -6,7 +6,7 @@
äœ ç API å 乿»æ¯éèŠåé**ååºäœ**ãäœå®¢æ·ç«¯äžäžå®æ»æ¯èŠåé**请æ±äœ**ïŒææ¶å®ä»¬åªè¯·æ±æäžªè·¯åŸïŒå¯èœåžŠäžäºæ¥è¯¢åæ°ïŒäœäžäŒåé请æ±äœã
-䜿çš
Pydantic æš¡åæ¥å£°æ**请æ±äœ**ïŒèœå
åå©çšå®çåèœåäŒç¹ã
+äœ¿çš [Pydantic](https://docs.pydantic.dev/) æš¡åæ¥å£°æ**请æ±äœ**ïŒèœå
åå©çšå®çåèœåäŒç¹ã
/// info | ä¿¡æ¯
@@ -72,7 +72,7 @@
* æ°æ®æ ææ¶è¿åæž
æ°çé误信æ¯ïŒå¹¶æåºéè¯¯æ°æ®çç¡®åäœçœ®åå
容ã
* ææ¥æ¶çæ°æ®èµåŒç»åæ° `item`ã
* å äžºäœ æåœæ°äžçåæ°ç±»å声æäžº `Item`ïŒæä»¥è¿èœè·åŸææå±æ§åå
¶ç±»åççŒèŸå𿝿ïŒè¡¥å
šçïŒã
-* äžºäœ çæš¡åçæ
JSON Schema å®ä¹ïŒåŠæå¯¹äœ çé¡¹ç®ææä¹ïŒè¿å¯ä»¥åšå
¶ä»å°æ¹äœ¿çšå®ä»¬ã
+* äžºäœ çæš¡åçæ [JSON Schema](https://json-schema.org) å®ä¹ïŒåŠæå¯¹äœ çé¡¹ç®ææä¹ïŒè¿å¯ä»¥åšå
¶ä»å°æ¹äœ¿çšå®ä»¬ã
* è¿äº schema äŒæäžºçæç OpenAPI Schema çäžéšåïŒå¹¶è¢«èªåšææ¡£ç
UIs 䜿çšã
## èªåšææ¡£ { #automatic-docs }
@@ -101,15 +101,15 @@
æä»¬çè³å¯¹ Pydantic æ¬èº«åäºäžäºæ¹åšä»¥æ¯æè¿äºåèœã
-äžé¢çæªåŸæ¥èª
Visual Studio Codeã
+äžé¢çæªåŸæ¥èª [Visual Studio Code](https://code.visualstudio.com)ã
-äœäœ¿çš
PyCharm å倧倿°å
¶ä» Python çŒèŸåšïŒäœ ä¹äŒè·åŸçžåççŒèŸå𿝿ïŒ
+äœäœ¿çš [PyCharm](https://www.jetbrains.com/pycharm/) å倧倿°å
¶ä» Python çŒèŸåšïŒäœ ä¹äŒè·åŸçžåççŒèŸå𿝿ïŒ

/// tip | æç€º
-åŠæäœ äœ¿çš
PyCharm äœäžºçŒèŸåšïŒå¯ä»¥äœ¿çš
Pydantic PyCharm æä»¶ã
+åŠæäœ äœ¿çš [PyCharm](https://www.jetbrains.com/pycharm/) äœäžºçŒèŸåšïŒå¯ä»¥äœ¿çš [Pydantic PyCharm æä»¶](https://github.com/koxudaxi/pydantic-pycharm-plugin/)ã
å®èœæ¹è¿å¯¹ Pydantic æš¡åççŒèŸå𿝿ïŒå
æ¬ïŒ
@@ -161,4 +161,4 @@ FastAPI äŒæ ¹æ®é»è®€åŒ `= None` ç¥é `q` çåŒäžæ¯å¿
å¡«çã
## äžäœ¿çš Pydantic { #without-pydantic }
-å³äŸ¿äžäœ¿çš Pydantic æš¡åä¹èœäœ¿çš **Body** åæ°ã诊è§[请æ±äœ - å€åæ°ïŒè¯·æ±äœäžçååŒ](body-multiple-params.md#singular-values-in-body){.internal-link target=_blank}ã
+å³äŸ¿äžäœ¿çš Pydantic æš¡åä¹èœäœ¿çš **Body** åæ°ã诊è§[请æ±äœ - å€åæ°ïŒè¯·æ±äœäžçååŒ](body-multiple-params.md#singular-values-in-body)ã
diff --git a/docs/zh/docs/tutorial/cors.md b/docs/zh/docs/tutorial/cors.md
index 2e271ec758..ebea43edba 100644
--- a/docs/zh/docs/tutorial/cors.md
+++ b/docs/zh/docs/tutorial/cors.md
@@ -1,6 +1,6 @@
# CORSïŒè·šåèµæºå
±äº«ïŒ { #cors-cross-origin-resource-sharing }
-
CORS æè
ãè·šåèµæºå
±äº«ã ææµè§åšäžè¿è¡çåç«¯æ¥æäžå端éä¿¡ç JavaScript 代ç ïŒèå端å€äºäžå端äžåçãæºãçæ
åµã
+[CORS æè
ãè·šåèµæºå
±äº«ã](https://developer.mozilla.org/en-US/docs/Web/HTTP/CORS) ææµè§åšäžè¿è¡çåç«¯æ¥æäžå端éä¿¡ç JavaScript 代ç ïŒèå端å€äºäžå端äžåçãæºãçæ
åµã
## æº { #origin }
@@ -55,10 +55,10 @@
* `allow_origins` - äžäžªå
讞跚å请æ±çæºå衚ãäŸåŠ `['https://example.org', 'https://www.example.org']`ãäœ å¯ä»¥äœ¿çš `['*']` å
è®žä»»äœæºã
* `allow_origin_regex` - äžäžªæ£å衚蟟åŒå笊䞲ïŒå¹é
çæºå
讞跚å请æ±ãäŸåŠ `'https://.*\.example\.org'`ã
* `allow_methods` - äžäžªå
讞跚å请æ±ç HTTP æ¹æ³å衚ãé»è®€äžº `['GET']`ãäœ å¯ä»¥äœ¿çš `['*']` æ¥å
è®žæææ åæ¹æ³ã
-* `allow_headers` - äžäžªå
讞跚å请æ±ç HTTP 请æ±å€Žå衚ãé»è®€äžº `[]`ãäœ å¯ä»¥äœ¿çš `['*']` å
讞ææç请æ±å€Žã`Accept`ã`Accept-Language`ã`Content-Language` 以å `Content-Type` è¿å 䞪请æ±å€Žåš
ç®å CORS 请æ±äžæ»æ¯è¢«å
讞ã
+* `allow_headers` - äžäžªå
讞跚å请æ±ç HTTP 请æ±å€Žå衚ãé»è®€äžº `[]`ãäœ å¯ä»¥äœ¿çš `['*']` å
讞ææç请æ±å€Žã`Accept`ã`Accept-Language`ã`Content-Language` 以å `Content-Type` è¿å 䞪请æ±å€Žåš[ç®å CORS 请æ±](https://developer.mozilla.org/en-US/docs/Web/HTTP/CORS#simple_requests)äžæ»æ¯è¢«å
讞ã
* `allow_credentials` - æç€ºè·šåè¯·æ±æ¯æ cookiesãé»è®€æ¯ `False`ã
- åœ `allow_credentials` 讟䞺 `True` æ¶ïŒ`allow_origins`ã`allow_methods` å `allow_headers` éœäžèœè®Ÿäžº `['*']`ãå®ä»¬å¿
é¡»
æŸåŒæå®ã
+ åœ `allow_credentials` 讟䞺 `True` æ¶ïŒ`allow_origins`ã`allow_methods` å `allow_headers` éœäžèœè®Ÿäžº `['*']`ãå®ä»¬å¿
é¡»[æŸåŒæå®](https://developer.mozilla.org/en-US/docs/Web/HTTP/CORS#credentialed_requests_and_wildcards)ã
* `expose_headers` - æç€ºå¯ä»¥è¢«æµè§åšè®¿é®çååºå€Žãé»è®€äžº `[]`ã
* `max_age` - è®Ÿå®æµè§åšçŒå CORS ååºçæé¿æ¶éŽïŒåäœæ¯ç§ãé»è®€äžº `600`ã
@@ -77,7 +77,7 @@
## æŽå€ä¿¡æ¯ { #more-info }
-æŽå€å
³äº
CORS çä¿¡æ¯ïŒè¯·æ¥ç
Mozilla CORS ææ¡£ã
+æŽå€å
³äº
CORS çä¿¡æ¯ïŒè¯·æ¥ç [Mozilla CORS ææ¡£](https://developer.mozilla.org/en-US/docs/Web/HTTP/CORS)ã
/// note | ææ¯ç»è
diff --git a/docs/zh/docs/tutorial/debugging.md b/docs/zh/docs/tutorial/debugging.md
index 1ff7d61275..19e6f8a612 100644
--- a/docs/zh/docs/tutorial/debugging.md
+++ b/docs/zh/docs/tutorial/debugging.md
@@ -70,7 +70,7 @@ from myapp import app
/// info | ä¿¡æ¯
-æŽå€ä¿¡æ¯è¯·æ£æ¥
Python 宿¹ææ¡£.
+æŽå€ä¿¡æ¯è¯·æ£æ¥ [Python 宿¹ææ¡£](https://docs.python.org/3/library/__main__.html).
///
diff --git a/docs/zh/docs/tutorial/dependencies/dependencies-in-path-operation-decorators.md b/docs/zh/docs/tutorial/dependencies/dependencies-in-path-operation-decorators.md
index 23412e4650..a3b2e6a41e 100644
--- a/docs/zh/docs/tutorial/dependencies/dependencies-in-path-operation-decorators.md
+++ b/docs/zh/docs/tutorial/dependencies/dependencies-in-path-operation-decorators.md
@@ -32,7 +32,7 @@
æ¬äŸäžïŒäœ¿çšçæ¯èªå®ä¹ååºå€Ž `X-Key` å `X-Token`ã
-äœå®é
åŒåäžïŒå°€å
¶æ¯åšå®ç°å®å
šæªæœæ¶ïŒæå¥œäœ¿çš FastAPI å
眮ç[å®å
šå·¥å
·](../security/index.md){.internal-link target=_blank}ïŒè¯Šè§äžäžç« ïŒã
+äœå®é
åŒåäžïŒå°€å
¶æ¯åšå®ç°å®å
šæªæœæ¶ïŒæå¥œäœ¿çš FastAPI å
眮ç[å®å
šå·¥å
·ïŒäžäžç« ïŒ](../security/index.md)ã
///
@@ -62,7 +62,7 @@
## 䞺äžç»è·¯åŸæäœå®ä¹äŸèµé¡¹ { #dependencies-for-a-group-of-path-operations }
-çšåïŒ[倧ååºçš - 倿件](../../tutorial/bigger-applications.md){.internal-link target=_blank}äžç« äžäŒä»ç»åŠäœäœ¿çšå€äžªæä»¶å建倧ååºçšçšåºïŒåšè¿äžç« äžïŒæšå°äºè§£å°åŠäœäžºäžç»*è·¯åŸæäœ*声æå䞪 `dependencies` åæ°ã
+çšåïŒ[倧ååºçš - 倿件](../../tutorial/bigger-applications.md)äžç« äžäŒä»ç»åŠäœäœ¿çšå€äžªæä»¶å建倧ååºçšçšåºïŒåšè¿äžç« äžïŒæšå°äºè§£å°åŠäœäžºäžç»*è·¯åŸæäœ*声æå䞪 `dependencies` åæ°ã
## å
šå±äŸèµé¡¹ { #global-dependencies }
diff --git a/docs/zh/docs/tutorial/dependencies/dependencies-with-yield.md b/docs/zh/docs/tutorial/dependencies/dependencies-with-yield.md
index 413dedb96b..a365bccf04 100644
--- a/docs/zh/docs/tutorial/dependencies/dependencies-with-yield.md
+++ b/docs/zh/docs/tutorial/dependencies/dependencies-with-yield.md
@@ -14,8 +14,8 @@ FastAPI æ¯æé£äºåšå®æåæ§è¡äžäº
`@contextlib.contextmanager` æ
-* `@contextlib.asynccontextmanager`
+* [`@contextlib.contextmanager`](https://docs.python.org/3/library/contextlib.html#contextlib.contextmanager) æ
+* [`@contextlib.asynccontextmanager`](https://docs.python.org/3/library/contextlib.html#contextlib.asynccontextmanager)
éœå¯ä»¥äœäžº **FastAPI** çäŸèµé¡¹ã
@@ -87,7 +87,7 @@ FastAPI æ¯æé£äºåšå®æåæ§è¡äžäºäžäžæç®¡çåšã
+è¿èŠåœåäº Python ç[äžäžæç®¡çåš](https://docs.python.org/3/library/contextlib.html)ã
**FastAPI** åšå
éšäœ¿çšå®ä»¬æ¥å®ç°è¿äžç¹ã
@@ -111,7 +111,7 @@ FastAPI æ¯æé£äºåšå®æåæ§è¡äžäºäœ å¯ä»¥çš `with` æ¥è¯»åæä»¶ïŒ
+äŸåŠïŒ[äœ å¯ä»¥çš `with` æ¥è¯»åæä»¶](https://docs.python.org/3/tutorial/inputoutput.html#reading-and-writing-files)ïŒ
```Python
with open("./somefile.txt") as f:
@@ -265,7 +265,7 @@ with open("./somefile.txt") as f:
///
-åš Python äžïŒäœ å¯ä»¥éè¿å建äžäžªåžŠæ `__enter__()` å `__exit__()` æ¹æ³çç±»æ¥å建äžäžæç®¡çåšã
+åš Python äžïŒäœ å¯ä»¥éè¿[å建äžäžªåžŠæ `__enter__()` å `__exit__()` æ¹æ³çç±»](https://docs.python.org/3/reference/datamodel.html#context-managers)æ¥å建äžäžæç®¡çåšã
äœ ä¹å¯ä»¥åš **FastAPI** ç垊æ `yield` çäŸèµäžïŒäœ¿çšäŸèµåœæ°å
éšç `with` æ `async with` è¯å¥æ¥äœ¿çšå®ä»¬ïŒ
@@ -275,8 +275,8 @@ with open("./somefile.txt") as f:
åŠäžç§å建äžäžæç®¡çåšçæ¹åŒæ¯ïŒ
-* `@contextlib.contextmanager` æ
-* `@contextlib.asynccontextmanager`
+* [`@contextlib.contextmanager`](https://docs.python.org/3/library/contextlib.html#contextlib.contextmanager) æ
+* [`@contextlib.asynccontextmanager`](https://docs.python.org/3/library/contextlib.html#contextlib.asynccontextmanager)
çšå®ä»¬å»è£
饰äžäžªåªå
å«å䞪 `yield` çåœæ°ã
diff --git a/docs/zh/docs/tutorial/dependencies/global-dependencies.md b/docs/zh/docs/tutorial/dependencies/global-dependencies.md
index e33aab65cc..cf083f053d 100644
--- a/docs/zh/docs/tutorial/dependencies/global-dependencies.md
+++ b/docs/zh/docs/tutorial/dependencies/global-dependencies.md
@@ -2,14 +2,14 @@
ææ¶ïŒæä»¬èŠäžºæŽäžªåºçšæ·»å äŸèµé¡¹ã
-éè¿äž[å° `dependencies` æ·»å å°*è·¯åŸæäœè£
饰åš*](dependencies-in-path-operation-decorators.md){.internal-link target=_blank} ç±»äŒŒçæ¹åŒïŒå¯ä»¥æäŸèµé¡¹æ·»å è³æŽäžª `FastAPI` åºçšã
+éè¿äž[å° `dependencies` æ·»å å°*è·¯åŸæäœè£
饰åš*](dependencies-in-path-operation-decorators.md) ç±»äŒŒçæ¹åŒïŒå¯ä»¥æäŸèµé¡¹æ·»å è³æŽäžª `FastAPI` åºçšã
è¿æ ·äžæ¥ïŒå°±å¯ä»¥äžºææ*è·¯åŸæäœ*åºçšè¯¥äŸèµé¡¹ïŒ
{* ../../docs_src/dependencies/tutorial012_an_py310.py hl[17] *}
-[å° `dependencies` æ·»å å°*è·¯åŸæäœè£
饰åš*](dependencies-in-path-operation-decorators.md){.internal-link target=_blank} äžç« çæè·¯åéçšäºå
šå±äŸèµé¡¹ïŒ åšæ¬äŸäžïŒè¿äºäŸèµé¡¹å¯ä»¥çšäºåºçšäžçææ*è·¯åŸæäœ*ã
+[å° `dependencies` æ·»å å°*è·¯åŸæäœè£
饰åš*](dependencies-in-path-operation-decorators.md) äžç« çæè·¯åéçšäºå
šå±äŸèµé¡¹ïŒ åšæ¬äŸäžïŒè¿äºäŸèµé¡¹å¯ä»¥çšäºåºçšäžçææ*è·¯åŸæäœ*ã
## 䞺äžç»è·¯åŸæäœå®ä¹äŸèµé¡¹ { #dependencies-for-groups-of-path-operations }
-çšåïŒ[倧ååºçš - 倿件](../../tutorial/bigger-applications.md){.internal-link target=_blank}äžç« äžäŒä»ç»åŠäœäœ¿çšå€äžªæä»¶å建倧ååºçšçšåºïŒåšè¿äžç« äžïŒæšå°äºè§£å°åŠäœäžºäžç»*è·¯åŸæäœ*声æå䞪 `dependencies` åæ°ã
+çšåïŒ[倧ååºçš - 倿件](../../tutorial/bigger-applications.md)äžç« äžäŒä»ç»åŠäœäœ¿çšå€äžªæä»¶å建倧ååºçšçšåºïŒåšè¿äžç« äžïŒäœ å°äºè§£å°åŠäœäžºäžç»*è·¯åŸæäœ*声æå䞪 `dependencies` åæ°ã
diff --git a/docs/zh/docs/tutorial/dependencies/index.md b/docs/zh/docs/tutorial/dependencies/index.md
index 7db9ef9d95..939470f409 100644
--- a/docs/zh/docs/tutorial/dependencies/index.md
+++ b/docs/zh/docs/tutorial/dependencies/index.md
@@ -57,7 +57,7 @@ FastAPI åš 0.95.0 çæ¬äžæ°å¢äºå¯¹ `Annotated` çæ¯æïŒå¹¶åŒå§æšè
åŠæäœ ççæ¬èŸæ§ïŒå°è¯äœ¿çš `Annotated` äŒæ¥éã
-åšäœ¿çš `Annotated` ä¹åïŒè¯·ç¡®ä¿[å级 FastAPI çæ¬](../../deployment/versions.md#upgrading-the-fastapi-versions){.internal-link target=_blank}å°è³å° 0.95.1ã
+åšäœ¿çš `Annotated` ä¹åïŒè¯·ç¡®ä¿[å级 FastAPI çæ¬](../../deployment/versions.md#upgrading-the-fastapi-versions)å°è³å° 0.95.1ã
///
@@ -152,7 +152,7 @@ commons: Annotated[dict, Depends(common_parameters)]
/// note | 泚æ
-åŠæäžäºè§£åŒæ¥ïŒè¯·åé
ææ¡£äžå
³äº `async` å `await` çç« èïŒ[åŒæ¥ïŒ*âçæ¥äºïŒâ*](../../async.md#in-a-hurry){.internal-link target=_blank}ã
+åŠæäžäºè§£åŒæ¥ïŒè¯·åé
ææ¡£äžå
³äº `async` å `await` çç« èïŒ[åŒæ¥ïŒ*âçæ¥äºïŒâ*](../../async.md#in-a-hurry)ã
///
diff --git a/docs/zh/docs/tutorial/encoder.md b/docs/zh/docs/tutorial/encoder.md
index 88be497493..8327ab6c7c 100644
--- a/docs/zh/docs/tutorial/encoder.md
+++ b/docs/zh/docs/tutorial/encoder.md
@@ -12,7 +12,7 @@
äŸåŠïŒå®äžæ¥æ¶`datetime`è¿ç±»ç对象ïŒå 䞺è¿äºå¯¹è±¡äžJSONäžå
Œå®¹ã
-å æ€ïŒ`datetime`对象å¿
须蜬æ¢äžºå
å«ISO æ ŒåŒç`str`ç±»å对象ã
+å æ€ïŒ`datetime`对象å¿
须蜬æ¢äžºå
å«[ISO æ ŒåŒ](https://en.wikipedia.org/wiki/ISO_8601)ç`str`ç±»å对象ã
åæ ·ïŒè¿äžªæ°æ®åºä¹äžäŒæ¥æ¶Pydanticæš¡åïŒåžŠæå±æ§ç对象ïŒïŒèåªæ¥æ¶`dict`ã
@@ -24,7 +24,7 @@
åšè¿äžªäŸåäžïŒå®å°Pydanticæš¡å蜬æ¢äžº`dict`ïŒå¹¶å°`datetime`蜬æ¢äžº`str`ã
-è°çšå®çç»æåå°±å¯ä»¥äœ¿çšPythonæ åçŒç äžç`json.dumps()`ã
+è°çšå®çç»æåå°±å¯ä»¥äœ¿çšPythonæ åçŒç äžç[`json.dumps()`](https://docs.python.org/3/library/json.html#json.dumps)ã
è¿äžªæäœäžäŒè¿åäžäžªå
å«JSONæ ŒåŒïŒäœäžºåç¬Šäž²ïŒæ°æ®çåºå€§ç`str`ãå®å°è¿åäžäžªPythonæ åæ°æ®ç»æïŒäŸåŠ`dict`ïŒïŒå
¶åŒåååŒéœäžJSONå
Œå®¹ã
diff --git a/docs/zh/docs/tutorial/extra-data-types.md b/docs/zh/docs/tutorial/extra-data-types.md
index 2cefd163d3..76748a7a38 100644
--- a/docs/zh/docs/tutorial/extra-data-types.md
+++ b/docs/zh/docs/tutorial/extra-data-types.md
@@ -36,7 +36,7 @@
* `datetime.timedelta`:
* äžäžª Python `datetime.timedelta`.
* åšè¯·æ±åååºäžå°è¡šç€ºäžº `float` 代衚æ»ç§æ°ã
- * Pydantic ä¹å
讞å°å
¶è¡šç€ºäžº "ISO 8601 æ¶éŽå·®åŒçŒç ", æ¥çææ¡£äºè§£æŽå€ä¿¡æ¯ã
+ * Pydantic ä¹å
讞å°å
¶è¡šç€ºäžº "ISO 8601 æ¶éŽå·®åŒçŒç ", [æ¥çææ¡£äºè§£æŽå€ä¿¡æ¯](https://docs.pydantic.dev/latest/concepts/serialization/#custom-serializers)ã
* `frozenset`:
* åšè¯·æ±åååºäžïŒäœäžº `set` 对åŸ
ïŒ
* åšè¯·æ±äžïŒå衚å°è¢«è¯»åïŒæ¶é€éå€ïŒå¹¶å°å
¶èœ¬æ¢äžºäžäžª `set`ã
@@ -49,7 +49,7 @@
* `Decimal`:
* æ åç Python `Decimal`ã
* åšè¯·æ±åååºäžè¢«åœå `float` äžæ ·å€çã
-* æšå¯ä»¥åšè¿éæ£æ¥ææææç Pydantic æ°æ®ç±»å: Pydantic data types.
+* æšå¯ä»¥åšè¿éæ£æ¥ææææç Pydantic æ°æ®ç±»å: [Pydantic data types](https://docs.pydantic.dev/latest/usage/types/types/)ã
## äŸå { #example }
diff --git a/docs/zh/docs/tutorial/extra-models.md b/docs/zh/docs/tutorial/extra-models.md
index 09baa47319..0ad35cc4fc 100644
--- a/docs/zh/docs/tutorial/extra-models.md
+++ b/docs/zh/docs/tutorial/extra-models.md
@@ -12,7 +12,7 @@
äžèŠååšçšæ·çææå¯ç ãå§ç»åªååšä¹åå¯çšäºæ ¡éªçâå®å
šååžâã
-åŠæäœ è¿äžäºè§£ïŒå¯ä»¥åš[å®å
šæ§ç« è](security/simple-oauth2.md#password-hashing){.internal-link target=_blank}äžåŠä¹ ä»ä¹æ¯âå¯ç ååžâã
+åŠæäœ è¿äžäºè§£ïŒå¯ä»¥åš[å®å
šæ§ç« è](security/simple-oauth2.md#password-hashing)äžåŠä¹ ä»ä¹æ¯âå¯ç ååžâã
///
@@ -108,7 +108,7 @@ UserInDB(**user_dict)
UserInDB(**user_in.model_dump())
```
-âŠâŠå 䞺 `user_in.model_dump()` æ¯ `dict`ïŒåšäŒ éç» `UserInDB` æ¶ïŒæ `**` å åš `user_in.model_dump()` åïŒå¯ä»¥è®© Python è¿è¡è§£å
ã
+...å 䞺 `user_in.model_dump()` æ¯ `dict`ïŒåšäŒ éç» `UserInDB` æ¶ïŒæ `**` å åš `user_in.model_dump()` åïŒå¯ä»¥è®© Python è¿è¡è§£å
ã
è¿æ ·ïŒå°±å¯ä»¥çšå
¶å® Pydantic æš¡åäžçæ°æ®çæ Pydantic æš¡åã
@@ -120,7 +120,7 @@ UserInDB(**user_in.model_dump())
UserInDB(**user_in.model_dump(), hashed_password=hashed_password)
```
-âŠâŠèŸåºç»æåŠäžïŒ
+...èŸåºç»æåŠäžïŒ
```Python
UserInDB(
@@ -162,11 +162,11 @@ UserInDB(
åš OpenAPI äžäŒçš `anyOf` 衚瀺ã
-䞺æ€ïŒè¯·äœ¿çš Python æ åç±»åæç€º `typing.Union`ïŒ
+䞺æ€ïŒè¯·äœ¿çš Python æ åç±»åæç€º [`typing.Union`](https://docs.python.org/3/library/typing.html#typing.Union)ïŒ
/// note | 泚æ
-å®ä¹ `Union` ç±»åæ¶ïŒèŠææŽå
·äœçç±»åååšåé¢ïŒç¶åæ¯äžå€ªå
·äœçç±»åãäžäŸäžïŒæŽå
·äœç `PlaneItem` äœäº `Union[PlaneItem, CarItem]` äžç `CarItem` ä¹åã
+å®ä¹ [`Union`](https://docs.pydantic.dev/latest/concepts/types/#unions) ç±»åæ¶ïŒèŠææŽå
·äœçç±»åååšåé¢ïŒç¶åæ¯äžå€ªå
·äœçç±»åãäžäŸäžïŒæŽå
·äœç `PlaneItem` äœäº `Union[PlaneItem, CarItem]` äžç `CarItem` ä¹åã
///
diff --git a/docs/zh/docs/tutorial/first-steps.md b/docs/zh/docs/tutorial/first-steps.md
index 4c23807b8f..78db1fefc0 100644
--- a/docs/zh/docs/tutorial/first-steps.md
+++ b/docs/zh/docs/tutorial/first-steps.md
@@ -11,7 +11,7 @@
```console
-$
fastapi dev
main.py
+$
fastapi dev
FastAPI Starting development server ð
@@ -58,7 +58,7 @@ INFO: Uvicorn running on http://127.0.0.1:8000 (Press CTRL+C to quit)
### æ¥ç { #check-it }
-æåŒæµè§åšè®¿é®
http://127.0.0.1:8000ã
+æåŒæµè§åšè®¿é® [http://127.0.0.1:8000](http://127.0.0.1:8000)ã
äœ å°çå°åŠäžç JSON ååºïŒ
@@ -68,17 +68,17 @@ INFO: Uvicorn running on http://127.0.0.1:8000 (Press CTRL+C to quit)
### 亀äºåŒ API ææ¡£ { #interactive-api-docs }
-跳蜬å°
http://127.0.0.1:8000/docsã
+è·³èœ¬å° [http://127.0.0.1:8000/docs](http://127.0.0.1:8000/docs)ã
-äœ å°äŒçå°èªåšçæç亀äºåŒ API ææ¡£ïŒç±
Swagger UI æäŸïŒïŒ
+äœ å°äŒçå°èªåšçæç亀äºåŒ API ææ¡£ïŒç± [Swagger UI](https://github.com/swagger-api/swagger-ui) æäŸïŒïŒ

### å¯éç API ææ¡£ { #alternative-api-docs }
-ååŸ
http://127.0.0.1:8000/redocã
+ååŸ [http://127.0.0.1:8000/redoc](http://127.0.0.1:8000/redoc)ã
-äœ å°äŒçå°å¯éçèªåšçæææ¡£ ïŒç±
ReDoc æäŸïŒïŒ
+äœ å°äŒçå°å¯éçèªåšçæææ¡£ ïŒç± [ReDoc](https://github.com/Rebilly/ReDoc) æäŸïŒïŒ

@@ -92,7 +92,7 @@ INFO: Uvicorn running on http://127.0.0.1:8000 (Press CTRL+C to quit)
#### APIãæš¡åŒã { #api-schema }
-åšè¿ç§åºæ¯äžïŒ
OpenAPI æ¯äžç§è§å®åŠäœå®ä¹ API æš¡åŒçè§èã
+åšè¿ç§åºæ¯äžïŒ[OpenAPI](https://github.com/OAI/OpenAPI-Specification) æ¯äžç§è§å®åŠäœå®ä¹ API æš¡åŒçè§èã
ãæš¡åŒãçå®ä¹å
æ¬äœ ç API è·¯åŸïŒä»¥åå®ä»¬å¯èœäœ¿çšçåæ°ççã
@@ -110,7 +110,7 @@ OpenAPI äžºäœ ç API å®ä¹ API æš¡åŒã该暡åŒäžå
å«äºäœ ç API åé
åŠæäœ å¯¹åå§ç OpenAPI æš¡åŒé¿ä»ä¹æ ·åæå°å¥œå¥ïŒFastAPI èªåšçæäºå
嫿æ API æè¿°ç JSONïŒæš¡åŒïŒã
-äœ å¯ä»¥çŽæ¥åšïŒ
http://127.0.0.1:8000/openapi.json çå°å®ã
+äœ å¯ä»¥çŽæ¥åšïŒ[http://127.0.0.1:8000/openapi.json](http://127.0.0.1:8000/openapi.json) çå°å®ã
å®å°æŸç€ºä»¥åŠäžå
容åŒå€Žç JSONïŒ
@@ -143,9 +143,58 @@ OpenAPI äžºäœ ç API å®ä¹ API æš¡åŒã该暡åŒäžå
å«äºäœ ç API åé
äœ è¿å¯ä»¥äœ¿çšå®èªåšçæäžäœ ç API è¿è¡éä¿¡ç客æ·ç«¯ä»£ç ãäŸåŠ web å端ïŒç§»åšç«¯æç©èçœåµå
¥çšåºã
+### åš `pyproject.toml` äžé
眮åºçš `entrypoint` { #configure-the-app-entrypoint-in-pyproject-toml }
+
+äœ å¯ä»¥åš `pyproject.toml` æä»¶äžé
眮åºçšçäœçœ®ïŒäŸåŠïŒ
+
+```toml
+[tool.fastapi]
+entrypoint = "main:app"
+```
+
+该 `entrypoint` äŒåè¯ `fastapi` åœä»€æåŠäžæ¹åŒå¯Œå
¥åºçšïŒ
+
+```python
+from main import app
+```
+
+åŠæäœ ç代ç ç»æåŠäžïŒ
+
+```
+.
+âââ backend
+â  âââ main.py
+â  âââ __init__.py
+```
+
+é£ä¹äœ å¯ä»¥å° `entrypoint` 讟眮䞺ïŒ
+
+```toml
+[tool.fastapi]
+entrypoint = "backend.main:app"
+```
+
+è¿çä»·äºïŒ
+
+```python
+from backend.main import app
+```
+
+### `fastapi dev` åžŠè·¯åŸ { #fastapi-dev-with-path }
+
+äœ ä¹å¯ä»¥ææä»¶è·¯åŸäŒ ç» `fastapi dev` åœä»€ïŒå®äŒå°è¯æšæèŠäœ¿çšç FastAPI åºçšå¯¹è±¡ïŒ
+
+```console
+$ fastapi dev main.py
+```
+
+äœè¿æ ·æ¯æ¬¡è°çš `fastapi` åœä»€æ¶éœéèŠè®°åŸäŒ å
¥æ£ç¡®çè·¯åŸã
+
+åŠå€ïŒå
¶ä»å·¥å
·å¯èœæ æ³æŸå°å®ïŒäŸåŠ [VS Code æ©å±](../editor-support.md) æ [FastAPI Cloud](https://fastapicloud.com)ïŒå æ€æšèåš `pyproject.toml` äžäœ¿çš `entrypoint`ã
+
### éšçœ²äœ çåºçšïŒå¯éïŒ { #deploy-your-app-optional }
-äœ å¯ä»¥éæ©å° FastAPI åºçšéšçœ²å°
FastAPI CloudïŒåŠæè¿æ²¡æïŒå
å»å å
¥åè¡¥ååãð
+äœ å¯ä»¥éæ©å° FastAPI åºçšéšçœ²å° [FastAPI Cloud](https://fastapicloud.com)ïŒåŠæè¿æ²¡æïŒå
å»å å
¥åè¡¥ååãð
åŠæäœ å·²ç»æ¥æ **FastAPI Cloud** 莊æ·ïŒæä»¬ä»åè¡¥ååé请äºäœ ðïŒïŒäœ å¯ä»¥çšäžæ¡åœä»€éšçœ²åºçšã
@@ -191,7 +240,7 @@ Deploying to FastAPI Cloud...
`FastAPI` æ¯çŽæ¥ä» `Starlette` ç»§æ¿çç±»ã
-äœ å¯ä»¥éè¿ `FastAPI` äœ¿çšææç
Starlette çåèœã
+äœ å¯ä»¥éè¿ `FastAPI` äœ¿çšææç [Starlette](https://www.starlette.dev/) çåèœã
///
@@ -273,7 +322,7 @@ https://example.com/items/foo
* 请æ±è·¯åŸäžº `/`
* 䜿çš
get æäœ
-/// info | `@decorator` Info
+/// info | `@decorator` ä¿¡æ¯
`@something` è¯æ³åš Python äžè¢«ç§°äžºãè£
饰åšãã
@@ -336,7 +385,7 @@ https://example.com/items/foo
/// note
-åŠæäœ äžç¥é䞀è
çåºå«ïŒè¯·æ¥é
[å¹¶å: *èµ¶æ¶éŽåïŒ*](../async.md#in-a-hurry){.internal-link target=_blank}ã
+åŠæäœ äžç¥é䞀è
çåºå«ïŒè¯·æ¥é
[å¹¶å: *èµ¶æ¶éŽåïŒ*](../async.md#in-a-hurry)ã
///
@@ -352,11 +401,11 @@ https://example.com/items/foo
### æ¥éª€ 6ïŒéšçœ² { #step-6-deploy-it }
-çšäžæ¡åœä»€å°äœ çåºçšéšçœ²å° **
FastAPI Cloud**ïŒ`fastapi deploy`ãð
+çšäžæ¡åœä»€å°äœ çåºçšéšçœ²å° **[FastAPI Cloud](https://fastapicloud.com)**ïŒ`fastapi deploy`ãð
#### å
³äº FastAPI Cloud { #about-fastapi-cloud }
-**
FastAPI Cloud** ç± **FastAPI** çäœè
åå¢éæé ã
+**[FastAPI Cloud](https://fastapicloud.com)** ç± **FastAPI** çäœè
åå¢éæé ã
å®ä»¥æå°çæå
¥ç®åäº **æå»º**ã**éšçœ²** å **访é®** API çæµçšã
diff --git a/docs/zh/docs/tutorial/handling-errors.md b/docs/zh/docs/tutorial/handling-errors.md
index 9782f3d225..f3a23fab0a 100644
--- a/docs/zh/docs/tutorial/handling-errors.md
+++ b/docs/zh/docs/tutorial/handling-errors.md
@@ -81,7 +81,7 @@
## å®è£
èªå®ä¹åŒåžžå€çåš { #install-custom-exception-handlers }
-å¯ä»¥äœ¿çš
äž Starlette çžåçåŒåžžå€çå·¥å
·æ·»å èªå®ä¹åŒåžžå€çåšã
+å¯ä»¥äœ¿çš[äž Starlette çžåçåŒåžžå€çå·¥å
·](https://www.starlette.dev/exceptions/)æ·»å èªå®ä¹åŒåžžå€çåšã
å讟æäžäžªèªå®ä¹åŒåžž `UnicornException`ïŒäœ èªå·±æäœ 䜿çšçåºå¯èœäŒ `raise` å®ïŒã
diff --git a/docs/zh/docs/tutorial/index.md b/docs/zh/docs/tutorial/index.md
index 7934583023..8d6cbc7a6d 100644
--- a/docs/zh/docs/tutorial/index.md
+++ b/docs/zh/docs/tutorial/index.md
@@ -10,12 +10,12 @@
ææä»£ç çæ®µéœå¯ä»¥å€å¶åçŽæ¥äœ¿çšïŒå®ä»¬å®é
äžæ¯ç»è¿æµè¯ç Python æä»¶ïŒã
-èŠè¿è¡ä»»äœç€ºäŸïŒè¯·å°ä»£ç å€å¶å° `main.py` æä»¶äžïŒç¶å䜿çšä»¥äžåœä»€å¯åš `fastapi dev`ïŒ
+èŠè¿è¡ä»»äœç€ºäŸïŒè¯·å°ä»£ç å€å¶å° `main.py` æä»¶äžïŒç¶åå¯åš `fastapi dev`ïŒ
```console
-$
fastapi dev
main.py
+$
fastapi dev
FastAPI Starting development server ð
@@ -62,7 +62,7 @@ $
fastapi dev
@@ -76,7 +76,7 @@ $ pip install "fastapi[standard]"
/// note | 泚æ
-åœæšäœ¿çš `pip install "fastapi[standard]"` å®è£
æ¶ïŒå®äŒé垊äžäºé»è®€çå¯éæ åäŸèµé¡¹ïŒå
¶äžå
æ¬ `fastapi-cloud-cli`ïŒå®å¯ä»¥è®©æšéšçœ²å° FastAPI Cloudã
+åœæšäœ¿çš `pip install "fastapi[standard]"` å®è£
æ¶ïŒå®äŒé垊äžäºé»è®€çå¯éæ åäŸèµé¡¹ïŒå
¶äžå
æ¬ `fastapi-cloud-cli`ïŒå®å¯ä»¥è®©æšéšçœ²å° [FastAPI Cloud](https://fastapicloud.com)ã
åŠææšäžæ³å®è£
è¿äºå¯éäŸèµïŒå¯ä»¥éæ©å®è£
`pip install fastapi`ã
@@ -84,6 +84,12 @@ $ pip install "fastapi[standard]"
///
+/// tip | æç€º
+
+FastAPI æäŸäºäžäžª[VS Code 宿¹æ©å±](https://marketplace.visualstudio.com/items?itemName=FastAPILabs.fastapi-vscode)ïŒä¹æ¯æ CursorïŒïŒå
å«äŒå€åèœïŒäŸåŠè·¯åŸæäœæµè§åšãè·¯åŸæäœæçŽ¢ãæµè¯äžç CodeLens 富èªïŒä»æµè¯è·³èœ¬å°å®ä¹ïŒïŒä»¥åä»çŒèŸåšå
è¿è¡ FastAPI Cloud éšçœ²åæ¥çæ¥å¿ã
+
+///
+
## è¿é¶çšæ·æå { #advanced-user-guide }
åšæ¬**æçš-çšæ·æå**ä¹åïŒæšå¯ä»¥é
读**è¿é¶çšæ·æå**ã
diff --git a/docs/zh/docs/tutorial/metadata.md b/docs/zh/docs/tutorial/metadata.md
index 7ffaa070c5..b761f08886 100644
--- a/docs/zh/docs/tutorial/metadata.md
+++ b/docs/zh/docs/tutorial/metadata.md
@@ -14,7 +14,7 @@
| `version` | `string` | API ççæ¬ãè¿æ¯æšèªå·±çåºçšçšåºççæ¬ïŒèäžæ¯ OpenAPI ççæ¬ãäŸåŠ `2.5.0`ã |
| `terms_of_service` | `str` | API æå¡æ¡æ¬Ÿç URLãåŠææäŸïŒåå¿
é¡»æ¯ URLã |
| `contact` | `dict` | å
¬åŒç API çè系信æ¯ãå®å¯ä»¥å
å«å€äžªå段ãcontact åæ®µ
| åæ° | ç±»å | æè¿° |
|---|
name | str | è系人/ç»ç»çè¯å«åç§°ã |
url | str | æåè系信æ¯ç URLãå¿
é¡»éçš URL æ ŒåŒã |
email | str | è系人/ç»ç»ççµåé®ä»¶å°åãå¿
é¡»éçšçµåé®ä»¶å°åçæ ŒåŒã |
|
-| `license_info` | `dict` | å
¬åŒç API ç讞å¯è¯ä¿¡æ¯ãå®å¯ä»¥å
å«å€äžªå段ãlicense_info åæ®µ
| åæ° | ç±»å | æè¿° |
|---|
name | str | å¿
é¡»ïŒåŠæè®Ÿçœ®äº license_infoïŒãçšäº API ç讞å¯è¯åç§°ã |
identifier | str | API ç SPDX 讞å¯è¯è¡šèŸŸåŒãåæ®µ identifier äžå段 url äºæ¥ãèª OpenAPI 3.1.0ãFastAPI 0.99.0 èµ·å¯çšã |
url | str | çšäº API ç讞å¯è¯ç URLãå¿
é¡»éçš URL æ ŒåŒã |
|
+| `license_info` | `dict` | å
¬åŒç API ç讞å¯è¯ä¿¡æ¯ãå®å¯ä»¥å
å«å€äžªå段ãlicense_info åæ®µ
| åæ° | ç±»å | æè¿° |
|---|
name | str | å¿
é¡»ïŒåŠæè®Ÿçœ®äº license_infoïŒãçšäº API ç讞å¯è¯åç§°ã |
identifier | str | API ç [SPDX](https://spdx.org/licenses/) 讞å¯è¯è¡šèŸŸåŒãåæ®µ identifier äžå段 url äºæ¥ãèª OpenAPI 3.1.0ãFastAPI 0.99.0 èµ·å¯çšã |
url | str | çšäº API ç讞å¯è¯ç URLãå¿
é¡»éçš URL æ ŒåŒã |
|
äœ å¯ä»¥æåŠäžæ¹åŒè®Ÿçœ®å®ä»¬ïŒ
@@ -76,7 +76,7 @@
/// info | ä¿¡æ¯
-é
读æŽå€å
³äºæ çŸçä¿¡æ¯[è·¯åŸæäœé
眮](path-operation-configuration.md#tags){.internal-link target=_blank}ã
+é
读æŽå€å
³äºæ çŸçä¿¡æ¯[è·¯åŸæäœé
眮](path-operation-configuration.md#tags)ã
///
diff --git a/docs/zh/docs/tutorial/middleware.md b/docs/zh/docs/tutorial/middleware.md
index a211a63bdf..e7586132f2 100644
--- a/docs/zh/docs/tutorial/middleware.md
+++ b/docs/zh/docs/tutorial/middleware.md
@@ -15,7 +15,7 @@
åŠæäœ æäœ¿çš `yield` çäŸèµïŒäŸèµäžçéåºä»£ç äŒåšäžéŽä»¶ä¹åè¿è¡ã
-åŠææä»»äœåå°ä»»å¡ïŒäŒåš[åå°ä»»å¡](background-tasks.md){.internal-link target=_blank}äžèäžä»ç»ïŒäœ çšåäŒçå°ïŒïŒå®ä»¬äŒåšææäžéŽä»¶ä¹åè¿è¡ã
+åŠææä»»äœåå°ä»»å¡ïŒäŒåš[åå°ä»»å¡](background-tasks.md)äžèäžä»ç»ïŒäœ çšåäŒçå°ïŒïŒå®ä»¬äŒåšææäžéŽä»¶ä¹åè¿è¡ã
///
@@ -35,9 +35,9 @@
/// tip
-请记äœå¯ä»¥äœ¿çš `X-` åçŒæ·»å äžæèªå®ä¹è¯·æ±å€Žã
+请记äœå¯ä»¥[äœ¿çš `X-` åçŒ](https://developer.mozilla.org/en-US/docs/Web/HTTP/Headers)æ·»å äžæèªå®ä¹è¯·æ±å€Žã
-äœæ¯åŠæäœ æåžæè®©æµè§åšäžç客æ·ç«¯å¯è§çèªå®ä¹è¯·æ±å€ŽïŒäœ éèŠæå®ä»¬å å°äœ ç CORS é
眮ïŒ[CORS (Cross-Origin Resource Sharing)](cors.md){.internal-link target=_blank}ïŒç `expose_headers` åæ°äžïŒåè§ Starlette ç CORS ææ¡£ã
+äœæ¯åŠæäœ æåžæè®©æµè§åšäžç客æ·ç«¯å¯è§çèªå®ä¹è¯·æ±å€ŽïŒäœ éèŠæå®ä»¬å å°äœ ç CORS é
眮ïŒ[CORSïŒè·šåèµæºå
±äº«ïŒ](cors.md)ïŒç `expose_headers` åæ°äžïŒåè§ [Starlette ç CORS ææ¡£](https://www.starlette.dev/middleware/#corsmiddleware)ã
///
@@ -61,7 +61,7 @@
/// tip
-è¿éæä»¬äœ¿çš `time.perf_counter()` èäžæ¯ `time.time()`ïŒå 䞺åšè¿ç±»åºæ¯äžå®å¯èœæŽç²Ÿç¡®ãð€
+è¿éæä»¬äœ¿çš [`time.perf_counter()`](https://docs.python.org/3/library/time.html#time.perf_counter) èäžæ¯ `time.time()`ïŒå 䞺åšè¿ç±»åºæ¯äžå®å¯èœæŽç²Ÿç¡®ãð€
///
@@ -90,6 +90,6 @@ app.add_middleware(MiddlewareB)
## å
¶ä»äžéŽä»¶ { #other-middlewares }
-äœ å¯ä»¥çšååš[é«çº§çšæ·æåïŒé«çº§äžéŽä»¶](../advanced/middleware.md){.internal-link target=_blank}äžé
读æŽå€å
³äºå
¶ä»äžéŽä»¶çå
容ã
+äœ å¯ä»¥çšååš[é«çº§çšæ·æåïŒé«çº§äžéŽä»¶](../advanced/middleware.md)äžé
读æŽå€å
³äºå
¶ä»äžéŽä»¶çå
容ã
äœ å°åšäžäžèäžäºè§£åŠäœäœ¿çšäžéŽä»¶å€ç CORSã
diff --git a/docs/zh/docs/tutorial/path-operation-configuration.md b/docs/zh/docs/tutorial/path-operation-configuration.md
index b3e4ba95c2..b9046a13be 100644
--- a/docs/zh/docs/tutorial/path-operation-configuration.md
+++ b/docs/zh/docs/tutorial/path-operation-configuration.md
@@ -58,7 +58,7 @@ OpenAPI æŠåŸäŒèªåšæ·»å æ çŸïŒäŸ API ææ¡£æ¥å£äœ¿çšïŒ
æè¿°å
容æ¯èŸé¿äžå çšå€è¡æ¶ïŒå¯ä»¥åšåœæ°ç docstring äžå£°æ*è·¯åŸæäœ*çæè¿°ïŒ**FastAPI** äŒä»äžè¯»åã
-ææ¡£åç¬Šäž²æ¯æ MarkdownïŒèœæ£ç¡®è§£æåæŸç€º Markdown çå
容ïŒäœèŠæ³šæææ¡£å笊䞲ç猩è¿ã
+ææ¡£åç¬Šäž²æ¯æ [Markdown](https://en.wikipedia.org/wiki/Markdown)ïŒèœæ£ç¡®è§£æåæŸç€º Markdown çå
容ïŒäœèŠæ³šæææ¡£å笊䞲ç猩è¿ã
{* ../../docs_src/path_operation_configuration/tutorial004_py310.py hl[17:25] *}
diff --git a/docs/zh/docs/tutorial/path-params-numeric-validations.md b/docs/zh/docs/tutorial/path-params-numeric-validations.md
index 608aa69a1d..26b91c1d73 100644
--- a/docs/zh/docs/tutorial/path-params-numeric-validations.md
+++ b/docs/zh/docs/tutorial/path-params-numeric-validations.md
@@ -14,7 +14,7 @@ FastAPI åš 0.95.0 çæ¬æ·»å äºå¯¹ `Annotated` çæ¯æïŒå¹¶åŒå§æšè䜿
åŠæäœ äœ¿çšçæ¯æŽæ§ççæ¬ïŒå°è¯äœ¿çš `Annotated` äŒæ¥éã
-请确ä¿åšäœ¿çš `Annotated` ä¹åïŒå° FastAPI çæ¬[å级](../deployment/versions.md#upgrading-the-fastapi-versions){.internal-link target=_blank}å°è³å° 0.95.1ã
+请确ä¿åšäœ¿çš `Annotated` ä¹åïŒå° FastAPI çæ¬[å级](../deployment/versions.md#upgrading-the-fastapi-versions)å°è³å° 0.95.1ã
///
@@ -122,7 +122,7 @@ Python äžäŒå¯¹è¿äžª `*` åä»»äœäºïŒäœå®äŒç¥éä¹åçææåæ°
## æ»ç» { #recap }
-äœ èœå€ä»¥äž[æ¥è¯¢åæ°ååç¬Šäž²æ ¡éª](query-params-str-validations.md){.internal-link target=_blank}çžåçæ¹åŒäœ¿çš `Query`ã`Path`ïŒä»¥åå
¶ä»äœ è¿æ²¡è§è¿çç±»ïŒå£°æå
æ°æ®ååç¬Šäž²æ ¡éªã
+äœ èœå€ä»¥äž[æ¥è¯¢åæ°ååç¬Šäž²æ ¡éª](query-params-str-validations.md)çžåçæ¹åŒäœ¿çš `Query`ã`Path`ïŒä»¥åå
¶ä»äœ è¿æ²¡è§è¿çç±»ïŒå£°æå
æ°æ®ååç¬Šäž²æ ¡éªã
èäžäœ è¿å¯ä»¥å£°ææ°åŒæ ¡éªïŒ
@@ -139,7 +139,7 @@ Python äžäŒå¯¹è¿äžª `*` åä»»äœäºïŒäœå®äŒç¥éä¹åçææåæ°
///
-/// note | ææ¯ç»è
+/// note | 泚æ
åœäœ ä» `fastapi` 富å
¥ `Query`ã`Path` åå
¶ä»å¯¹è±¡æ¶ïŒå®ä»¬å®é
äžæ¯åœæ°ã
diff --git a/docs/zh/docs/tutorial/path-params.md b/docs/zh/docs/tutorial/path-params.md
index 06a9f1b442..df9210673c 100644
--- a/docs/zh/docs/tutorial/path-params.md
+++ b/docs/zh/docs/tutorial/path-params.md
@@ -6,7 +6,7 @@
è·¯åŸåæ° `item_id` çåŒäŒäœäžºåæ° `item_id` äŒ éç»äœ çåœæ°ã
-è¿è¡ç€ºäŸå¹¶è®¿é® http://127.0.0.1:8000/items/fooïŒå¯è·åŸåŠäžååºïŒ
+è¿è¡ç€ºäŸå¹¶è®¿é® [http://127.0.0.1:8000/items/foo](http://127.0.0.1:8000/items/foo)ïŒå¯è·åŸåŠäžååºïŒ
```JSON
{"item_id":"foo"}
@@ -28,7 +28,7 @@
## æ°æ®èœ¬æ¢ { #data-conversion }
-è¿è¡ç€ºäŸå¹¶è®¿é® http://127.0.0.1:8000/items/3ïŒè¿åçååºåŠäžïŒ
+è¿è¡ç€ºäŸå¹¶è®¿é® [http://127.0.0.1:8000/items/3](http://127.0.0.1:8000/items/3)ïŒè¿åçååºåŠäžïŒ
```JSON
{"item_id":3}
@@ -44,7 +44,7 @@
## æ°æ®æ ¡éª { #data-validation }
-éè¿æµè§åšè®¿é® http://127.0.0.1:8000/items/fooïŒæ¥æ¶åŠäž HTTP é误信æ¯ïŒ
+éè¿æµè§åšè®¿é® [http://127.0.0.1:8000/items/foo](http://127.0.0.1:8000/items/foo)ïŒæ¥æ¶åŠäž HTTP é误信æ¯ïŒ
```JSON
{
@@ -64,7 +64,7 @@
è¿æ¯å 䞺路åŸåæ° `item_id` çåŒïŒ`"foo"`ïŒçç±»åäžæ¯ `int`ã
-åŒçç±»åäžæ¯ `int` èæ¯æµ®ç¹æ°ïŒ`float`ïŒæ¶ä¹äŒæŸç€ºåæ ·çéè¯¯ïŒæ¯åŠïŒ http://127.0.0.1:8000/items/4.2
+åŒçç±»åäžæ¯ `int` èæ¯æµ®ç¹æ°ïŒ`float`ïŒæ¶ä¹äŒæŸç€ºåæ ·çéè¯¯ïŒæ¯åŠïŒ [http://127.0.0.1:8000/items/4.2](http://127.0.0.1:8000/items/4.2)
/// check | æ£æ¥
@@ -78,7 +78,7 @@
## ææ¡£ { #documentation }
-è®¿é® http://127.0.0.1:8000/docsïŒæ¥çèªåšçæç亀äºåŒ API ææ¡£ïŒ
+è®¿é® [http://127.0.0.1:8000/docs](http://127.0.0.1:8000/docs)ïŒæ¥çèªåšçæç亀äºåŒ API ææ¡£ïŒ
@@ -92,9 +92,9 @@
## åºäºæ åç奜å€ïŒå€éææ¡£ { #standards-based-benefits-alternative-documentation }
-**FastAPI** äœ¿çš OpenAPI çææŠåŸïŒæä»¥èœå
Œå®¹åŸå€å·¥å
·ã
+**FastAPI** äœ¿çš [OpenAPI](https://github.com/OAI/OpenAPI-Specification/blob/master/versions/3.1.0.md) çææŠåŸïŒæä»¥èœå
Œå®¹åŸå€å·¥å
·ã
-å æ€ïŒ**FastAPI** è¿å
çœ®äº ReDoc çæçå€é API ææ¡£ïŒå¯å𿀿¥ç http://127.0.0.1:8000/redocïŒ
+å æ€ïŒ**FastAPI** è¿å
çœ®äº ReDoc çæçå€é API ææ¡£ïŒå¯å𿀿¥ç [http://127.0.0.1:8000/redoc](http://127.0.0.1:8000/redoc)ïŒ
@@ -102,7 +102,7 @@
## Pydantic { #pydantic }
-FastAPI å
åå°å©çšäº Pydantic çäŒå¿ïŒçšå®åšåå°æ ¡éªæ°æ®ãäŒæåšç¥ïŒPydantic æ
é¿çå°±æ¯æ°æ®æ ¡éªã
+FastAPI å
åå°å©çšäº [Pydantic](https://docs.pydantic.dev/) çäŒå¿ïŒçšå®åšåå°æ ¡éªæ°æ®ãäŒæåšç¥ïŒPydantic æ
é¿çå°±æ¯æ°æ®æ ¡éªã
åæ ·ïŒ`str`ã`float`ã`bool` 以ååŸå€å€åæ°æ®ç±»åéœå¯ä»¥äœ¿çšç±»å声æã
diff --git a/docs/zh/docs/tutorial/query-params-str-validations.md b/docs/zh/docs/tutorial/query-params-str-validations.md
index d41f302267..67a5b40008 100644
--- a/docs/zh/docs/tutorial/query-params-str-validations.md
+++ b/docs/zh/docs/tutorial/query-params-str-validations.md
@@ -35,13 +35,13 @@ FastAPI åš 0.95.0 çæ¬äžæ·»å äºå¯¹ `Annotated` çæ¯æïŒå¹¶åŒå§æšè
åŠæäœ ççæ¬æŽæ§ïŒäœ¿çš `Annotated` äŒæ¥éã
-åšäœ¿çš `Annotated` ä¹åïŒè¯·ç¡®ä¿å
[å级 FastAPI çæ¬](../deployment/versions.md#upgrading-the-fastapi-versions){.internal-link target=_blank}å°è³å° 0.95.1ã
+åšäœ¿çš `Annotated` ä¹åïŒè¯·ç¡®ä¿å
[å级 FastAPI çæ¬](../deployment/versions.md#upgrading-the-fastapi-versions)å°è³å° 0.95.1ã
///
## åš `q` åæ°çç±»åäžäœ¿çš `Annotated` { #use-annotated-in-the-type-for-the-q-parameter }
-è¿è®°åŸæä¹ååš[Python ç±»åç®ä»](../python-types.md#type-hints-with-metadata-annotations){.internal-link target=_blank}äžè¯Žè¿å¯ä»¥çš `Annotated` ç»åæ°æ·»å å
æ°æ®åïŒ
+è¿è®°åŸæä¹ååš[Python ç±»åç®ä»](../python-types.md#type-hints-with-metadata-annotations)äžè¯Žè¿å¯ä»¥çš `Annotated` ç»åæ°æ·»å å
æ°æ®åïŒ
ç°å𿣿¯äž FastAPI æé
䜿çšå®çæ¶åãð
@@ -105,7 +105,7 @@ FastAPI ç°åšäŒïŒ
q: str | None = Query(default=None)
```
-âŠâŠäŒè®©åæ°åæå¯éïŒé»è®€åŒäžº `None`ïŒçåäºïŒ
+...äŒè®©åæ°åæå¯éïŒé»è®€åŒäžº `None`ïŒçåäºïŒ
```Python
q: str | None = None
@@ -133,7 +133,7 @@ q: str | None = Query(default=None, max_length=50)
q: Annotated[str, Query(default="rick")] = "morty"
```
-âŠâŠå äžºäžæž
æ¥é»è®€åŒåºè¯¥æ¯ `"rick"` è¿æ¯ `"morty"`ã
+...å äžºäžæž
æ¥é»è®€åŒåºè¯¥æ¯ `"rick"` è¿æ¯ `"morty"`ã
å æ€ïŒäœ åºè¯¥è¿æ ·çšïŒæšèïŒïŒ
@@ -141,7 +141,7 @@ q: Annotated[str, Query(default="rick")] = "morty"
q: Annotated[str, Query()] = "rick"
```
-âŠâŠæè
åšæ§ä»£ç åºäžäœ äŒè§å°ïŒ
+...æè
åšæ§ä»£ç åºäžäœ äŒè§å°ïŒ
```Python
q: str = Query(default="rick")
@@ -157,7 +157,7 @@ q: str = Query(default="rick")
åœäœ äžäœ¿çš `Annotated` èæ¯äœ¿çš**ïŒæ§çïŒé»è®€åŒé£æ Œ**æ¶ïŒåŠæäœ åš**å
¶ä»å°æ¹**äžéè¿ FastAPI è°çšè¯¥åœæ°ïŒäœ å¿
é¡»**è®°åŸ**ç»åœæ°äŒ åïŒåŠååŸå°çåŒäŒå颿äžåïŒäŸåŠåŸå° `QueryInfo` ä¹ç±»ç对象èäžæ¯ `str`ïŒãèäœ ççŒèŸåšäžäŒæ¥éïŒPython ä¹äžäŒåšè°çšæ¶æ¥éïŒåªæåšåœæ°å
éšçæäœåºéæ¶æäŒæŽé²é®é¢ã
-ç±äº `Annotated` å¯ä»¥å
å«å€äžªå
æ°æ®æ 泚ïŒäœ çè³å¯ä»¥çšåäžäžªåœæ°äžå
¶ä»å·¥å
·é
åïŒäŸåŠ Typerãð
+ç±äº `Annotated` å¯ä»¥å
å«å€äžªå
æ°æ®æ 泚ïŒäœ çè³å¯ä»¥çšåäžäžªåœæ°äžå
¶ä»å·¥å
·é
åïŒäŸåŠ [Typer](https://typer.tiangolo.com/)ãð
## æ·»å æŽå€æ ¡éª { #add-more-validations }
@@ -337,7 +337,7 @@ http://127.0.0.1:8000/items/?item-query=foobaritems
ææ¥è¿çææåç§°æ¯ `item_query`ã
-äœäœ ä»ç¶éèŠå®åš URL äžå°±æ¯ `item-query`âŠâŠ
+äœäœ ä»ç¶éèŠå®åš URL äžå°±æ¯ `item-query`...
è¿æ¶å¯ä»¥çš `alias` 忰声æäžäžªå«åïŒFastAPI äŒçšè¯¥å«ååš URL äžæ¥æŸåæ°åŒïŒ
@@ -369,11 +369,11 @@ http://127.0.0.1:8000/items/?item-query=foobaritems
åšè¿äºæ
åµäžïŒäœ å¯ä»¥äœ¿çš**èªå®ä¹æ ¡éªåœæ°**ïŒè¯¥åœæ°äŒåšæ£åžžæ ¡éªä¹ååºçšïŒäŸåŠïŒåšå
æ ¡éªåŒæ¯ `str` ä¹åïŒã
-äœ å¯ä»¥åš `Annotated` äžäœ¿çš Pydantic ç `AfterValidator` æ¥å®ç°ã
+äœ å¯ä»¥åš `Annotated` äžäœ¿çš [Pydantic ç `AfterValidator`](https://docs.pydantic.dev/latest/concepts/validators/#field-after-validator) æ¥å®ç°ã
/// tip | æç€º
-Pydantic è¿æ `BeforeValidator` çãð€
+Pydantic è¿æ [`BeforeValidator`](https://docs.pydantic.dev/latest/concepts/validators/#field-before-validator) çãð€
///
@@ -421,7 +421,7 @@ Pydantic è¿æ `python-multipart`ã
+èŠæ¥æ¶äžäŒ çæä»¶ïŒè¯·å
å®è£
[`python-multipart`](https://github.com/Kludex/python-multipart)ã
-请确ä¿äœ å建äžäžª[èæç¯å¢](../virtual-environments.md){.internal-link target=_blank}ãæ¿æŽ»å®ïŒç¶åå®è£
ïŒäŸåŠïŒ
+请确ä¿äœ å建äžäžª[èæç¯å¢](../virtual-environments.md)ãæ¿æŽ»å®ïŒç¶åå®è£
ïŒäŸåŠïŒ
```console
$ pip install python-multipart
@@ -63,8 +63,8 @@ $ pip install python-multipart
* æä»¶äŒå
ååšåšå
åäžïŒçŽå°èŸŸå°æå€§äžéïŒè¶
è¿è¯¥äžéåäŒåå
¥ç£çã
* å æ€ïŒéåžžéåå€çåŸåãè§é¢ã倧åäºè¿å¶ç倧æä»¶ïŒèäžäŒå çšææå
åã
* äœ å¯ä»¥è·åäžäŒ æä»¶çå
æ°æ®ã
-* å®æäŸ file-like ç `async` æ¥å£ã
-* 宿Žé²äºäžäžªå®é
ç Python `SpooledTemporaryFile` 对象ïŒäœ å¯ä»¥çŽæ¥äŒ ç»ææãfile-likeã对象çå
¶ä»åºã
+* å®æäŸ [file-like](https://docs.python.org/3/glossary.html#term-file-like-object) ç `async` æ¥å£ã
+* 宿Žé²äºäžäžªå®é
ç Python [`SpooledTemporaryFile`](https://docs.python.org/3/library/tempfile.html#tempfile.SpooledTemporaryFile) 对象ïŒäœ å¯ä»¥çŽæ¥äŒ ç»ææãfile-likeã对象çå
¶ä»åºã
### `UploadFile` { #uploadfile }
@@ -72,7 +72,7 @@ $ pip install python-multipart
* `filename`ïŒäžäŒ çåå§æä»¶åå笊䞲ïŒ`str`ïŒïŒäŸåŠ `myimage.jpg`ã
* `content_type`ïŒå
容类åïŒMIME ç±»å / åªäœç±»åïŒçå笊䞲ïŒ`str`ïŒïŒäŸåŠ `image/jpeg`ã
-* `file`ïŒ`SpooledTemporaryFile`ïŒäžäžª file-like 对象ïŒãè¿æ¯å®é
ç Python æä»¶å¯¹è±¡ïŒäœ å¯ä»¥çŽæ¥äŒ éç»å
¶ä»ææãfile-likeã对象çåœæ°æåºã
+* `file`ïŒ[`SpooledTemporaryFile`](https://docs.python.org/3/library/tempfile.html#tempfile.SpooledTemporaryFile)ïŒäžäžª [file-like](https://docs.python.org/3/glossary.html#term-file-like-object) 对象ïŒãè¿æ¯å®é
ç Python æä»¶å¯¹è±¡ïŒäœ å¯ä»¥çŽæ¥äŒ éç»å
¶ä»ææãfile-likeã对象çåœæ°æåºã
`UploadFile` å
·æä»¥äž `async` æ¹æ³ãå®ä»¬éœäŒåšåºå±è°çšå¯¹åºçæä»¶æ¹æ³ïŒäœ¿çšå
éšç `SpooledTemporaryFile`ïŒã
@@ -97,13 +97,13 @@ contents = await myfile.read()
contents = myfile.file.read()
```
-/// note | 泚æ
+/// note | `async` ææ¯ç»è
åœäœ 䜿çšè¿äº `async` æ¹æ³æ¶ïŒ**FastAPI** äŒåšçº¿çšæ± äžè¿è¡çžåºçæä»¶æ¹æ³å¹¶çåŸ
å
¶å®æã
///
-/// note | 泚æ
+/// note | Starlette ææ¯ç»è
**FastAPI** ç `UploadFile` çŽæ¥ç»§æ¿èª **Starlette** ç `UploadFile`ïŒäœæ·»å äºäžäºå¿
èŠçéšåïŒäœ¿å
¶äž **Pydantic** 以å FastAPI çå
¶ä»éšåå
Œå®¹ã
@@ -115,13 +115,13 @@ HTML 衚åïŒ``ïŒåæå¡åšåéæ°æ®çæ¹åŒéåžžäŒå¯¹æ°
**FastAPI** äŒç¡®ä¿ä»æ£ç¡®çäœçœ®è¯»åè¿äºæ°æ®ïŒèäžæ¯ä» JSON äžè¯»åã
-/// note | 泚æ
+/// note | ææ¯ç»è
åœäžå
嫿件æ¶ïŒæ¥èªè¡šåçæ°æ®é垞䜿çšãåªäœç±»åã`application/x-www-form-urlencoded` çŒç ã
äœåœè¡šåå
嫿件æ¶ïŒäŒçŒç 䞺 `multipart/form-data`ãåŠæäœ äœ¿çš `File`ïŒ**FastAPI** äŒç¥ééèŠä»è¯·æ±äœçæ£ç¡®äœçœ®è·åæä»¶ã
-åŠæäœ æ³è¿äžæ¥äºè§£è¿äºçŒç å衚ååæ®µïŒè¯·åé
MDN å
³äº POST ç Web ææ¡£ã
+åŠæäœ æ³è¿äžæ¥äºè§£è¿äºçŒç å衚ååæ®µïŒè¯·åé
[MDN å
³äº `POST` ç Web ææ¡£](https://developer.mozilla.org/en-US/docs/Web/HTTP/Methods/POST)ã
///
@@ -135,13 +135,13 @@ HTML 衚åïŒ``ïŒåæå¡åšåéæ°æ®çæ¹åŒéåžžäŒå¯¹æ°
## å¯éæä»¶äžäŒ { #optional-file-upload }
-æšå¯ä»¥éè¿äœ¿çšæ åç±»åæ³šè§£å¹¶å° `None` äœäžºé»è®€åŒçæ¹åŒå°äžäžªæä»¶åæ°è®Ÿäžºå¯é:
+äœ å¯ä»¥éè¿äœ¿çšæ åç±»åæ³šè§£å¹¶å° `None` äœäžºé»è®€åŒçæ¹åŒå°äžäžªæä»¶åæ°è®Ÿäžºå¯é:
{* ../../docs_src/request_files/tutorial001_02_an_py310.py hl[9,17] *}
## 垊æé¢å€å
æ°æ®ç `UploadFile` { #uploadfile-with-additional-metadata }
-æšä¹å¯ä»¥å° `File()` äž `UploadFile` äžèµ·äœ¿çšïŒäŸåŠïŒè®Ÿçœ®é¢å€çå
æ°æ®:
+äœ ä¹å¯ä»¥å° `File()` äž `UploadFile` äžèµ·äœ¿çšïŒäŸåŠïŒè®Ÿçœ®é¢å€çå
æ°æ®:
{* ../../docs_src/request_files/tutorial001_03_an_py310.py hl[9,15] *}
@@ -157,7 +157,7 @@ FastAPI æ¯æåæ¶äžäŒ å€äžªæä»¶ã
æ¥æ¶ç乿¯å« `bytes` æ `UploadFile` çå衚ïŒ`list`ïŒã
-/// note | 泚æ
+/// note | ææ¯ç»è
ä¹å¯ä»¥äœ¿çš `from starlette.responses import HTMLResponse`ã
diff --git a/docs/zh/docs/tutorial/request-form-models.md b/docs/zh/docs/tutorial/request-form-models.md
index 63759df086..ec52710a8f 100644
--- a/docs/zh/docs/tutorial/request-form-models.md
+++ b/docs/zh/docs/tutorial/request-form-models.md
@@ -4,9 +4,9 @@
/// info | ä¿¡æ¯
-èŠäœ¿çšè¡šåïŒéŠå
å®è£
`python-multipart`ã
+èŠäœ¿çšè¡šåïŒéŠå
å®è£
[`python-multipart`](https://github.com/Kludex/python-multipart)ã
-ç¡®ä¿äœ å建äžäžª[èæç¯å¢](../virtual-environments.md){.internal-link target=_blank}ïŒæ¿æŽ»å®ïŒç¶ååå®è£
ïŒäŸåŠïŒ
+ç¡®ä¿äœ å建äžäžª[èæç¯å¢](../virtual-environments.md)ïŒæ¿æŽ»å®ïŒç¶ååå®è£
ïŒäŸåŠïŒ
```console
$ pip install python-multipart
diff --git a/docs/zh/docs/tutorial/request-forms-and-files.md b/docs/zh/docs/tutorial/request-forms-and-files.md
index 484fcd5d6d..8e092af0a8 100644
--- a/docs/zh/docs/tutorial/request-forms-and-files.md
+++ b/docs/zh/docs/tutorial/request-forms-and-files.md
@@ -4,9 +4,9 @@ FastAPI æ¯æåæ¶äœ¿çš `File` å `Form` å®ä¹æä»¶å衚ååæ®µã
/// info | ä¿¡æ¯
-æ¥æ¶äžäŒ çæä»¶å/æè¡šåæ°æ®ïŒéŠå
å®è£
`python-multipart`ã
+æ¥æ¶äžäŒ çæä»¶å/æè¡šåæ°æ®ïŒéŠå
å®è£
[`python-multipart`](https://github.com/Kludex/python-multipart)ã
-请å
åå»ºå¹¶æ¿æŽ»äžäžª[èæç¯å¢](../virtual-environments.md){.internal-link target=_blank}ïŒç¶ååå®è£
ïŒäŸåŠïŒ
+请å
åå»ºå¹¶æ¿æŽ»äžäžª[èæç¯å¢](../virtual-environments.md)ïŒç¶ååå®è£
ïŒäŸåŠïŒ
```console
$ pip install python-multipart
diff --git a/docs/zh/docs/tutorial/request-forms.md b/docs/zh/docs/tutorial/request-forms.md
index 1fc305a69c..ab82a181a2 100644
--- a/docs/zh/docs/tutorial/request-forms.md
+++ b/docs/zh/docs/tutorial/request-forms.md
@@ -4,9 +4,9 @@
/// info
-èŠäœ¿çšè¡šåïŒéŠå
å®è£
`python-multipart`ã
+èŠäœ¿çšè¡šåïŒéŠå
å®è£
[`python-multipart`](https://github.com/Kludex/python-multipart)ã
-请å
åå»ºå¹¶æ¿æŽ»äžäžª[èæç¯å¢](../virtual-environments.md){.internal-link target=_blank}ïŒç¶ååè¿è¡å®è£
ïŒäŸåŠïŒ
+请å
åå»ºå¹¶æ¿æŽ»äžäžª[èæç¯å¢](../virtual-environments.md)ïŒç¶ååè¿è¡å®è£
ïŒäŸåŠïŒ
```console
$ pip install python-multipart
@@ -28,7 +28,7 @@ $ pip install python-multipart
äŸåŠïŒåš OAuth2 è§èçäžç§äœ¿çšæ¹åŒïŒç§°äžºâå¯ç æµâïŒäžïŒèŠæ±å° `username` å `password` äœäžºè¡šååæ®µåéã
-è§è èŠæ±è¿äºå段å¿
须粟确åœå䞺 `username` å `password`ïŒå¹¶äžäœäžºè¡šååæ®µåéïŒèäžæ¯ JSONã
+è§èèŠæ±è¿äºå段å¿
须粟确åœå䞺 `username` å `password`ïŒå¹¶äžäœäžºè¡šååæ®µåéïŒèäžæ¯ JSONã
äœ¿çš `Form` å¯ä»¥åäœ¿çš `Body`ïŒä»¥å `Query`ã`Path`ã`Cookie`ïŒäžæ ·å£°æçžåçé
眮ïŒå
æ¬æ ¡éªã瀺äŸãå«åïŒäŸåŠå° `username` åæ `user-name`ïŒçã
@@ -56,7 +56,7 @@ HTML 衚åïŒ``ïŒåæå¡åšåéæ°æ®æ¶éåžžäŒå¯¹æ°æ®äœ¿
äœåœè¡šåå
嫿件æ¶ïŒäŒçŒç 䞺 `multipart/form-data`ãäœ å°åšäžäžç« é
读åŠäœå€çæä»¶ã
-åŠæäœ æ³äºè§£æŽå€å
³äºè¿äºçŒç å衚ååæ®µçä¿¡æ¯ïŒè¯·åé
MDN Web ææ¡£ç POSTã
+åŠæäœ æ³äºè§£æŽå€å
³äºè¿äºçŒç å衚ååæ®µçä¿¡æ¯ïŒè¯·åé
[MDN Web ææ¡£ç `POST`](https://developer.mozilla.org/en-US/docs/Web/HTTP/Methods/POST)ã
///
diff --git a/docs/zh/docs/tutorial/response-model.md b/docs/zh/docs/tutorial/response-model.md
index df0afa66f8..9b4e0382e9 100644
--- a/docs/zh/docs/tutorial/response-model.md
+++ b/docs/zh/docs/tutorial/response-model.md
@@ -13,6 +13,7 @@ FastAPI äŒäœ¿çšè¿äžªè¿åç±»åæ¥ïŒ
* åš OpenAPI ç*è·¯åŸæäœ*äžäžºååºæ·»å **JSON Schema**ã
* å®äŒè¢«**èªåšææ¡£**䜿çšã
* å®ä¹äŒè¢«èªåšå®¢æ·ç«¯ä»£ç çæå·¥å
·äœ¿çšã
+* äœ¿çš Pydantic å°è¿åæ°æ®**åºåå**䞺 JSONãPydantic 䜿çš**Rust**çŒåïŒå æ€äŒ**å¿«åŸå€**ã
äœæŽéèŠçæ¯ïŒ
@@ -73,9 +74,9 @@ FastAPI äŒäœ¿çšè¿äžª `response_model` æ¥å®ææ°æ®ææ¡£ãæ ¡éªçïŒå¹¶
/// info | ä¿¡æ¯
-èŠäœ¿çš `EmailStr`ïŒéŠå
å®è£
`email-validator`ã
+èŠäœ¿çš `EmailStr`ïŒéŠå
å®è£
[`email-validator`](https://github.com/JoshData/python-email-validator)ã
-请å
åå»ºå¹¶æ¿æŽ»äžäžª[èæç¯å¢](../virtual-environments.md){.internal-link target=_blank}ïŒç¶åå®è£
ïŒäŸåŠïŒ
+请å
åå»ºå¹¶æ¿æŽ»äžäžª[èæç¯å¢](../virtual-environments.md)ïŒç¶åå®è£
ïŒäŸåŠïŒ
```console
$ pip install email-validator
@@ -181,7 +182,7 @@ FastAPI åšå
éšé
å Pydantic åäºå€é¡¹å€çïŒç¡®ä¿äžäŒæç±»ç»§æ¿
### çŽæ¥è¿å Response { #return-a-response-directly }
-æåžžè§çæ
嵿¯[çŽæ¥è¿å ResponseïŒè¯Šè§è¿é¶ææ¡£](../advanced/response-directly.md){.internal-link target=_blank}ã
+æåžžè§çæ
嵿¯[çŽæ¥è¿å ResponseïŒè¯Šè§è¿é¶ææ¡£](../advanced/response-directly.md)ã
{* ../../docs_src/response_model/tutorial003_02_py310.py hl[8,10:11] *}
@@ -257,7 +258,7 @@ FastAPI åšå
éšé
å Pydantic åäºå€é¡¹å€çïŒç¡®ä¿äžäŒæç±»ç»§æ¿
* `response_model_exclude_defaults=True`
* `response_model_exclude_none=True`
-è¯Šè§ Pydantic ææ¡£äžå¯¹ `exclude_defaults` å `exclude_none` ç诎æã
+è¯Šè§ [Pydantic ææ¡£](https://docs.pydantic.dev/1.10/usage/exporting_models/#modeldict)äžå¯¹ `exclude_defaults` å `exclude_none` ç诎æã
///
diff --git a/docs/zh/docs/tutorial/response-status-code.md b/docs/zh/docs/tutorial/response-status-code.md
index 266f919ba1..e57c0e5937 100644
--- a/docs/zh/docs/tutorial/response-status-code.md
+++ b/docs/zh/docs/tutorial/response-status-code.md
@@ -20,7 +20,7 @@
/// info | ä¿¡æ¯
-`status_code` è¿èœæ¥æ¶ `IntEnum` ç±»åïŒæ¯åŠ Python ç `http.HTTPStatus`ã
+`status_code` è¿èœæ¥æ¶ `IntEnum` ç±»åïŒæ¯åŠ Python ç [`http.HTTPStatus`](https://docs.python.org/3/library/http.html#http.HTTPStatus)ã
///
@@ -66,7 +66,7 @@ FastAPI å¯ä»¥è¿è¡è¯å«ïŒå¹¶çæè¡šææ ååºäœç OpenAPI ææ¡£ã
/// tip | æç€º
-ç¶æç åéçšåºæ¯ç诊æ
ïŒè¯·åé
MDN ç HTTP ç¶æç ææ¡£ã
+æ³äºè§£æ¯äžªç¶æç çæŽå€ä¿¡æ¯ä»¥åéçšåºæ¯ïŒè¯·åé
[MDN ç HTTP ç¶æç ææ¡£](https://developer.mozilla.org/en-US/docs/Web/HTTP/Status)ã
///
@@ -98,4 +98,4 @@ FastAPI å¯ä»¥è¿è¡è¯å«ïŒå¹¶çæè¡šææ ååºäœç OpenAPI ææ¡£ã
## æŽæ¹é»è®€ç¶æç { #changing-the-default }
-[é«çº§çšæ·æå](../advanced/response-change-status-code.md){.internal-link target=_blank}äžïŒå°ä»ç»åŠäœè¿åäžåšæ€å£°æçé»è®€ç¶æç äžåçç¶æç ã
+çšååš[é«çº§çšæ·æå](../advanced/response-change-status-code.md)äžïŒäœ å°çå°åŠäœè¿åäžæ€å€å£°æçé»è®€ç¶æç äžåçç¶æç ã
diff --git a/docs/zh/docs/tutorial/schema-extra-example.md b/docs/zh/docs/tutorial/schema-extra-example.md
index ec1fc29e55..482abd21de 100644
--- a/docs/zh/docs/tutorial/schema-extra-example.md
+++ b/docs/zh/docs/tutorial/schema-extra-example.md
@@ -12,7 +12,7 @@
è¿äºé¢å€ä¿¡æ¯äŒåæ ·æ·»å å°è¯¥æš¡åèŸåºç JSON Schema äžïŒå¹¶äŒåš API ææ¡£äžäœ¿çšã
-äœ å¯ä»¥äœ¿çšå±æ§ `model_config`ïŒå®æ¥æ¶äžäžª `dict`ïŒè¯Šè§ Pydantic ææ¡£ïŒé
眮ã
+äœ å¯ä»¥äœ¿çšå±æ§ `model_config`ïŒå®æ¥æ¶äžäžª `dict`ïŒè¯Šè§ [Pydantic ææ¡£ïŒé
眮](https://docs.pydantic.dev/latest/api/config/)ã
äœ å¯ä»¥è®Ÿçœ® `"json_schema_extra"`ïŒå
¶åŒäžºäžäžª `dict`ïŒå
å«äœ åžæåºç°åšçæ JSON Schema äžçä»»æéå æ°æ®ïŒå
æ¬ `examples`ã
@@ -145,12 +145,12 @@ OpenAPI 3.1.0ïŒèª FastAPI 0.99.0 起䜿çšïŒå¢å äºå¯¹ `examples` çæ¯æ
OpenAPI è¿åšè§èçå
¶ä»éšåæ·»å äº `example` å `examples` åæ®µïŒ
-- `Parameter Object`ïŒè§èäžïŒïŒè¢« FastAPI ç以äžå
容䜿çšïŒ
+- [`Parameter Object`ïŒè§èäžïŒ](https://github.com/OAI/OpenAPI-Specification/blob/main/versions/3.1.0.md#parameter-object)ïŒè¢« FastAPI ç以äžå
容䜿çšïŒ
- `Path()`
- `Query()`
- `Header()`
- `Cookie()`
-- `Request Body Object` äžç `content` åæ®µéç `Media Type Object`ïŒè§èäžïŒïŒè¢« FastAPI ç以äžå
容䜿çšïŒ
+- [`Request Body Object` äžç `content` åæ®µéç `Media Type Object`ïŒè§èäžïŒ](https://github.com/OAI/OpenAPI-Specification/blob/main/versions/3.1.0.md#media-type-object)ïŒè¢« FastAPI ç以äžå
容䜿çšïŒ
- `Body()`
- `File()`
- `Form()`
@@ -163,7 +163,7 @@ OpenAPI è¿åšè§èçå
¶ä»éšåæ·»å äº `example` å `examples` åæ®µïŒ
### JSON Schema ç `examples` åæ®µ { #json-schemas-examples-field }
-忥ïŒJSON Schema åšæ°çæ¬çè§èäžæ·»å äº `examples` åæ®µã
+忥ïŒJSON Schema åšæ°çæ¬çè§èäžæ·»å äº [`examples`](https://json-schema.org/draft/2019-09/json-schema-validation.html#rfc.section.9.5) åæ®µã
éåæ°ç OpenAPI 3.1.0 åºäºææ°çæ¬ïŒJSON Schema 2020-12ïŒïŒå
¶äžå
å«äºè¿äžªæ°ç `examples` åæ®µã
diff --git a/docs/zh/docs/tutorial/security/first-steps.md b/docs/zh/docs/tutorial/security/first-steps.md
index 8b1aeb70b3..6cc91211a3 100644
--- a/docs/zh/docs/tutorial/security/first-steps.md
+++ b/docs/zh/docs/tutorial/security/first-steps.md
@@ -26,11 +26,11 @@
/// info | ä¿¡æ¯
-åœäœ 䜿çšåœä»€ `pip install "fastapi[standard]"` å®è£
**FastAPI** æ¶ïŒ`python-multipart` å
äŒèªåšå®è£
ã
+åœäœ 䜿çšåœä»€ `pip install "fastapi[standard]"` å®è£
**FastAPI** æ¶ïŒ[`python-multipart`](https://github.com/Kludex/python-multipart) å
äŒèªåšå®è£
ã
äœæ¯ïŒåŠæäœ äœ¿çš `pip install fastapi`ïŒé»è®€äžäŒå
å« `python-multipart` å
ã
-åŠéæåšå®è£
ïŒè¯·å
åå»ºå¹¶æ¿æŽ»[èæç¯å¢](../../virtual-environments.md){.internal-link target=_blank}ïŒç¶åæ§è¡ïŒ
+åŠéæåšå®è£
ïŒè¯·å
åå»ºå¹¶æ¿æŽ»[èæç¯å¢](../../virtual-environments.md)ïŒç¶åæ§è¡ïŒ
```console
$ pip install python-multipart
@@ -45,7 +45,7 @@ $ pip install python-multipart
```console
-$ fastapi dev main.py
+$ fastapi dev
INFO: Uvicorn running on http://127.0.0.1:8000 (Press CTRL+C to quit)
```
@@ -54,7 +54,7 @@ $ fastapi dev main.py
## æ¥ç { #check-it }
-æåŒäº€äºåŒææ¡£ïŒ
http://127.0.0.1:8000/docsã
+æåŒäº€äºåŒææ¡£ïŒ[http://127.0.0.1:8000/docs](http://127.0.0.1:8000/docs)ã
äœ äŒçå°ç±»äŒŒè¿æ ·ççé¢ïŒ
@@ -140,7 +140,7 @@ OAuth2 çè®Ÿè®¡ç®æ æ¯è®©å端æ API äžèŽèŽ£çšæ·è®€è¯çæå¡åšè§£
å 䞺䜿çšçæ¯çžå¯¹ URLïŒè¥äœ ç API äœäº `https://example.com/`ïŒå®å°æå `https://example.com/token`ïŒè¥äœ ç API äœäº `https://example.com/api/v1/`ïŒå®å°æå `https://example.com/api/v1/token`ã
-䜿çšçžå¯¹ URL åŸéèŠïŒè¿èœç¡®ä¿äœ çåºçšåšè¯žåŠ[䜿çšä»£ç](../../advanced/behind-a-proxy.md){.internal-link target=_blank}çé«çº§çšäŸäžäŸç¶æ£åžžå·¥äœã
+䜿çšçžå¯¹ URL åŸéèŠïŒè¿èœç¡®ä¿äœ çåºçšåšè¯žåŠ[䜿çšä»£ç](../../advanced/behind-a-proxy.md)çé«çº§çšäŸäžäŸç¶æ£åžžå·¥äœã
///
diff --git a/docs/zh/docs/tutorial/security/oauth2-jwt.md b/docs/zh/docs/tutorial/security/oauth2-jwt.md
index b5ccfd3e3f..8a56137d37 100644
--- a/docs/zh/docs/tutorial/security/oauth2-jwt.md
+++ b/docs/zh/docs/tutorial/security/oauth2-jwt.md
@@ -24,13 +24,13 @@ eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJzdWIiOiIxMjM0NTY3ODkwIiwibmFtZSI6IkpvaG4
äžåšå什çè¿æïŒçšæ·å°äžå被ææïŒéèŠéæ°ç»åœä»¥è·åæ°ä»€çãèåŠæçšæ·ïŒæç¬¬äžæ¹ïŒå°è¯ä¿®æ¹ä»€çæ¥æŽæ¹è¿ææ¶éŽïŒäœ ä¹èœåç°ïŒå 䞺çŸåå°äžå¹é
ã
-åŠæäœ æ³åšæäœéª JWT 什çå¹¶äºè§£å®çå·¥äœæ¹åŒïŒè¯·è®¿é®
https://jwt.ioã
+åŠæäœ æ³åšæäœéª JWT 什çå¹¶äºè§£å®çå·¥äœæ¹åŒïŒè¯·è®¿é® [https://jwt.io](https://jwt.io/)ã
## å®è£
`PyJWT` { #install-pyjwt }
æä»¬éèŠå®è£
`PyJWT`ïŒä»¥äŸ¿åš Python äžçæåæ ¡éª JWT 什çã
-请确ä¿åå»ºå¹¶æ¿æŽ»äžäžª[èæç¯å¢](../../virtual-environments.md){.internal-link target=_blank}ïŒç¶åå®è£
`pyjwt`ïŒ
+请确ä¿åå»ºå¹¶æ¿æŽ»äžäžª[èæç¯å¢](../../virtual-environments.md)ïŒç¶åå®è£
`pyjwt`ïŒ
@@ -46,7 +46,7 @@ $ pip install pyjwt
åŠæäœ è®¡å䜿çšç±»äŒŒ RSA æ ECDSA çæ°åçŸåç®æ³ïŒäœ åºè¯¥å®è£
å å¯åºäŸèµé¡¹ `pyjwt[crypto]`ã
-å¯ä»¥åš
PyJWT å®è£
ææ¡£äžäºè§£æŽå€ã
+å¯ä»¥åš [PyJWT å®è£
ææ¡£](https://pyjwt.readthedocs.io/en/latest/installation.html)äžäºè§£æŽå€ã
///
@@ -72,7 +72,7 @@ pwdlib æ¯äžäžªçšäºå€çå¯ç ååžçäŒç§ Python å
ã
æšèçç®æ³æ¯ âArgon2âã
-请确ä¿åå»ºå¹¶æ¿æŽ»äžäžª[èæç¯å¢](../../virtual-environments.md){.internal-link target=_blank}ïŒç¶åå®è£
垊 Argon2 ç pwdlibïŒ
+请确ä¿åå»ºå¹¶æ¿æŽ»äžäžª[èæç¯å¢](../../virtual-environments.md)ïŒç¶åå®è£
垊 Argon2 ç pwdlibïŒ
@@ -200,7 +200,7 @@ JWT é€äºçšäºè¯å«çšæ·å¹¶å
讞å
¶çŽæ¥åšäœ ç API äžæ§è¡æäœä¹
## æ£æ¥ { #check-it }
-è¿è¡æå¡åšå¹¶æåŒææ¡£ïŒ
http://127.0.0.1:8000/docsã
+è¿è¡æå¡åšå¹¶æåŒææ¡£ïŒ[http://127.0.0.1:8000/docs](http://127.0.0.1:8000/docs)ã
äœ äŒçå°è¿æ ·ççšæ·çé¢ïŒ
diff --git a/docs/zh/docs/tutorial/security/simple-oauth2.md b/docs/zh/docs/tutorial/security/simple-oauth2.md
index 95f708ae6a..d8d5b561e0 100644
--- a/docs/zh/docs/tutorial/security/simple-oauth2.md
+++ b/docs/zh/docs/tutorial/security/simple-oauth2.md
@@ -146,7 +146,7 @@ UserInDB(
/// info | ä¿¡æ¯
-`user_dict` ç诎æïŒè¯Šè§[**æŽå€æš¡å**äžç« ](../extra-models.md#about-user-in-dict){.internal-link target=_blank}ã
+`user_dict` ç诎æïŒè¯Šè§[**æŽå€æš¡å**äžç« ](../extra-models.md#about-user-in-dict)ã
///
@@ -216,7 +216,7 @@ UserInDB(
## å®é
ææ { #see-it-in-action }
-æåŒ API ææ¡£ïŒ
http://127.0.0.1:8000/docsã
+æåŒäº€äºåŒææ¡£ïŒ[http://127.0.0.1:8000/docs](http://127.0.0.1:8000/docs)ã
### 身仜éªè¯ { #authenticate }
diff --git a/docs/zh/docs/tutorial/server-sent-events.md b/docs/zh/docs/tutorial/server-sent-events.md
new file mode 100644
index 0000000000..c78562b91e
--- /dev/null
+++ b/docs/zh/docs/tutorial/server-sent-events.md
@@ -0,0 +1,120 @@
+# æå¡åšåéäºä»¶ïŒSSEïŒ { #server-sent-events-sse }
+
+äœ å¯ä»¥äœ¿çš**æå¡åšåéäºä»¶**ïŒSSEïŒå客æ·ç«¯æµåŒåéæ°æ®ã
+
+è¿ç±»äŒŒäº[æµåŒäŒ èŸ JSON Lines](stream-json-lines.md)ïŒäœäœ¿çš `text/event-stream` æ ŒåŒïŒæµè§åšåçéè¿ [`EventSource` API](https://developer.mozilla.org/en-US/docs/Web/API/EventSource) æ¯æã
+
+/// info | ä¿¡æ¯
+
+æ°å¢äº FastAPI 0.135.0ã
+
+///
+
+## ä»ä¹æ¯æå¡åšåéäºä»¶ïŒ { #what-are-server-sent-events }
+
+SSE æ¯äžç§éè¿ HTTP 仿å¡åšå客æ·ç«¯æµåŒäŒ èŸæ°æ®çæ åã
+
+æ¯äžªäºä»¶æ¯äžäžªåžŠæ `data`ã`event`ã`id` å `retry` çâåæ®µâçå°ææ¬åïŒä»¥ç©ºè¡åéã
+
+çèµ·æ¥åè¿æ ·ïŒ
+
+```
+data: {"name": "Portal Gun", "price": 999.99}
+
+data: {"name": "Plumbus", "price": 32.99}
+
+```
+
+SSE åžžçšäº AI è倩æµåŒèŸåºã宿¶éç¥ãæ¥å¿äžå¯è§æµæ§ïŒä»¥åå
¶ä»æå¡åšå客æ·ç«¯æšéæŽæ°çåºæ¯ã
+
+/// tip | æç€º
+
+åŠæäœ æ³æµåŒäŒ èŸäºè¿å¶æ°æ®ïŒäŸåŠè§é¢æé³é¢ïŒïŒè¯·æ¥çé«çº§æåïŒ[æµåŒäŒ èŸæ°æ®](../advanced/stream-data.md)ã
+
+///
+
+## äœ¿çš FastAPI æµåŒäŒ èŸ SSE { #stream-sse-with-fastapi }
+
+èŠåš FastAPI äžæµåŒäŒ èŸ SSEïŒåšäœ ç*è·¯åŸæäœåœæ°*äžäœ¿çš `yield`ïŒå¹¶è®Ÿçœ® `response_class=EventSourceResponse`ã
+
+ä» `fastapi.sse` 富å
¥ `EventSourceResponse`ïŒ
+
+{* ../../docs_src/server_sent_events/tutorial001_py310.py ln[1:25] hl[4,22] *}
+
+æ¯äžªè¢« yield ç项äŒè¢«çŒç 䞺 JSONïŒå¹¶æŸå
¥ SSE äºä»¶ç `data:` åæ®µåéã
+
+åŠæäœ å°è¿åç±»å声æäžº `AsyncIterable[Item]`ïŒFastAPI å°äœ¿çšå®éè¿ Pydanticå¯¹æ°æ®è¿è¡**æ ¡éª**ã**ææ¡£å**å**åºåå**ã
+
+{* ../../docs_src/server_sent_events/tutorial001_py310.py ln[1:25] hl[10:12,23] *}
+
+/// tip | æç€º
+
+ç±äº Pydantic äŒåš**Rust** 端åºååå®ïŒçžæ¯æªå£°æè¿åç±»åïŒäœ å°è·åŸæŽé«ç**æ§èœ**ã
+
+///
+
+### é async ç*è·¯åŸæäœåœæ°* { #non-async-path-operation-functions }
+
+äœ ä¹å¯ä»¥äœ¿çšåžžè§ç `def` åœæ°ïŒæ²¡æ `async`ïŒïŒå¹¶ä»¥åæ ·çæ¹åŒäœ¿çš `yield`ã
+
+FastAPI äŒç¡®ä¿å
¶æ£ç¡®è¿è¡ïŒä»èäžé»å¡äºä»¶åŸªç¯ã
+
+ç±äºæ€æ¶åœæ°äžæ¯ asyncïŒæ£ç¡®çè¿åç±»ååºäžº `Iterable[Item]`ïŒ
+
+{* ../../docs_src/server_sent_events/tutorial001_py310.py ln[28:31] hl[29] *}
+
+### æ è¿åç±»å { #no-return-type }
+
+äœ ä¹å¯ä»¥çç¥è¿åç±»åãFastAPI å°äœ¿çš [`jsonable_encoder`](./encoder.md) èœ¬æ¢æ°æ®å¹¶åéã
+
+{* ../../docs_src/server_sent_events/tutorial001_py310.py ln[34:37] hl[35] *}
+
+## `ServerSentEvent` { #serversentevent }
+
+åŠæäœ éèŠè®Ÿçœ® `event`ã`id`ã`retry` æ `comment` ç SSE åæ®µïŒäœ å¯ä»¥ yield `ServerSentEvent` 对象ïŒèäžæ¯çŽæ¥è¿åæ°æ®ã
+
+ä» `fastapi.sse` 富å
¥ `ServerSentEvent`ïŒ
+
+{* ../../docs_src/server_sent_events/tutorial002_py310.py hl[4,26] *}
+
+`data` åæ®µå§ç»äŒè¢«çŒç 䞺 JSONãäœ å¯ä»¥äŒ å
¥ä»»äœå¯è¢«åºåå䞺 JSON çåŒïŒå
æ¬ Pydantic æš¡åã
+
+## åå§æ°æ® { #raw-data }
+
+åŠæäœ éèŠåé**äž**è¿è¡ JSON çŒç çæ°æ®ïŒè¯·äœ¿çš `raw_data` èäžæ¯ `data`ã
+
+è¿å¯¹äºåé颿 ŒåŒåææ¬ãæ¥å¿è¡æç¹æ®ç
"åšå
µ" åŒïŒäŸåŠ `[DONE]`ïŒåŸæçšã
+
+{* ../../docs_src/server_sent_events/tutorial003_py310.py hl[17] *}
+
+/// note | 泚æ
+
+`data` å `raw_data` æ¯äºæ¥çãæ¯äžª `ServerSentEvent` äžåªèœè®Ÿçœ®å
¶äžäžäžªã
+
+///
+
+## äœ¿çš `Last-Event-ID` æ¢å€ { #resuming-with-last-event-id }
+
+åœè¿æ¥äžæåæµè§åšéæ°è¿æ¥æ¶ïŒäŒåš `Last-Event-ID` 倎äžåéäžæ¬¡æ¶å°ç `id`ã
+
+äœ å¯ä»¥å°å
¶è¯»å䞺äžäžªè¯·æ±å€Žåæ°ïŒå¹¶æ®æ€ä»å®¢æ·ç«¯çŠ»åŒçå°æ¹æ¢å€æµïŒ
+
+{* ../../docs_src/server_sent_events/tutorial004_py310.py hl[25,27,31] *}
+
+## äœ¿çš POST ç SSE { #sse-with-post }
+
+SSE éçšäº**ä»»æ HTTP æ¹æ³**ïŒäžä»
ä»
æ¯ `GET`ã
+
+è¿å¯¹å [MCP](https://modelcontextprotocol.io) è¿æ ·éè¿ `POST` äŒ èŸ SSE çåè®®åŸæçšïŒ
+
+{* ../../docs_src/server_sent_events/tutorial005_py310.py hl[14] *}
+
+## ææ¯ç»è { #technical-details }
+
+FastAPI åŒç®±å³çšå°å®ç°äºäžäº SSE çæäœ³å®è·µã
+
+- åœ 15 ç§å
没æä»»äœæ¶æ¯æ¶ïŒåéäžäžª**ä¿æŽ» `ping` 泚é**ïŒä»¥é²æäºä»£çå
³éè¿æ¥ïŒæ£åŠ [HTML è§èïŒServer-Sent Events](https://html.spec.whatwg.org/multipage/server-sent-events.html#authoring-notes) äžå»ºè®®ç飿 ·ã
+- 讟眮 `Cache-Control: no-cache` ååºå€ŽïŒ**鲿¢çŒå**æµã
+- è®Ÿçœ®ç¹æ®ååºå€Ž `X-Accel-Buffering: no`ïŒä»¥**鲿¢**æäºä»£çïŒåŠ NginxïŒ**çŒå²**ã
+
+äœ æ éåä»»äœäºïŒå®åŒç®±å³çšãð€
diff --git a/docs/zh/docs/tutorial/sql-databases.md b/docs/zh/docs/tutorial/sql-databases.md
index ef0b7c4601..9004983b10 100644
--- a/docs/zh/docs/tutorial/sql-databases.md
+++ b/docs/zh/docs/tutorial/sql-databases.md
@@ -2,9 +2,9 @@
**FastAPI** å¹¶äžèŠæ±äœ äœ¿çš SQLïŒå
³ç³»åïŒæ°æ®åºãäœ å¯ä»¥äœ¿çšäœ æ³çšç**ä»»äœæ°æ®åº**ã
-è¿éïŒæä»¬æ¥çäžäžªäœ¿çš
SQLModel ç瀺äŸã
+è¿éïŒæä»¬æ¥çäžäžªäœ¿çš [SQLModel](https://sqlmodel.tiangolo.com/) ç瀺äŸã
-**SQLModel** åºäº
SQLAlchemy å Pydantic æå»ºãå®ç± **FastAPI** çåäžäœè
å¶äœïŒæšåšå®çŸå¹é
éèŠäœ¿çš**SQL æ°æ®åº**ç FastAPI åºçšçšåºã
+**SQLModel** åºäº [SQLAlchemy](https://www.sqlalchemy.org/) å Pydantic æå»ºãå®ç± **FastAPI** çåäžäœè
å¶äœïŒæšåšå®çŸå¹é
éèŠäœ¿çš**SQL æ°æ®åº**ç FastAPI åºçšçšåºã
/// tip | æç€º
@@ -26,15 +26,15 @@
/// tip | æç€º
-æäžäžªäœ¿çš **FastAPI** å **PostgreSQL** ç宿¹é¡¹ç®çæåšïŒå
¶äžå
æ¬äºåç«¯åæŽå€å·¥å
·ïŒ
https://github.com/fastapi/full-stack-fastapi-template
+æäžäžªäœ¿çš **FastAPI** å **PostgreSQL** ç宿¹é¡¹ç®çæåšïŒå
¶äžå
æ¬äºåç«¯åæŽå€å·¥å
·ïŒ [https://github.com/fastapi/full-stack-fastapi-template](https://github.com/fastapi/full-stack-fastapi-template)
///
-è¿æ¯äžäžªéåžžç®ååç®ççæçšãåŠæäœ æ³äºè§£äžè¬çæ°æ®åºãSQL ææŽé«çº§çåèœïŒè¯·æ¥ç
SQLModel ææ¡£ã
+è¿æ¯äžäžªéåžžç®ååç®ççæçšãåŠæäœ æ³äºè§£äžè¬çæ°æ®åºãSQL ææŽé«çº§çåèœïŒè¯·æ¥ç [SQLModel ææ¡£](https://sqlmodel.tiangolo.com/)ã
## å®è£
`SQLModel` { #install-sqlmodel }
-éŠå
ïŒç¡®ä¿äœ åå»ºå¹¶æ¿æŽ»äº[èæç¯å¢](../virtual-environments.md){.internal-link target=_blank}ïŒç¶åå®è£
`sqlmodel`ïŒ
+éŠå
ïŒç¡®ä¿äœ åå»ºå¹¶æ¿æŽ»äº[èæç¯å¢](../virtual-environments.md)ïŒç¶åå®è£
`sqlmodel`ïŒ
@@ -65,7 +65,7 @@ $ pip install sqlmodel
* `Field(primary_key=True)` äŒåè¯ SQLModel `id` æ¯ SQL æ°æ®åºäžç**äž»é®**ïŒäœ å¯ä»¥åš SQLModel ææ¡£äžäºè§£æŽå€å
³äº SQL äž»é®çä¿¡æ¯ïŒã
- **泚æïŒ** æä»¬äžºäž»é®åæ®µäœ¿çš `int | None`ïŒè¿æ ·åš Python 代ç äžæä»¬å¯ä»¥å𿲡æ `id`ïŒ`id=None`ïŒçæ
åµäžå建对象ïŒå¹¶å宿°æ®åºåšä¿åæ¶äŒçæå®ãSQLModel äŒçè§£æ°æ®åºäŒæäŸ `id`ïŒå¹¶åšæ°æ®åºæš¡åŒäžå°è¯¥åå®ä¹äžºé空ç `INTEGER`ã诊è§
SQLModel å
³äºäž»é®çææ¡£ã
+ **泚æïŒ** æä»¬äžºäž»é®åæ®µäœ¿çš `int | None`ïŒè¿æ ·åš Python 代ç äžæä»¬å¯ä»¥å𿲡æ `id`ïŒ`id=None`ïŒçæ
åµäžå建对象ïŒå¹¶å宿°æ®åºåšä¿åæ¶äŒçæå®ãSQLModel äŒçè§£æ°æ®åºäŒæäŸ `id`ïŒå¹¶åšæ°æ®åºæš¡åŒäžå°è¯¥åå®ä¹äžºé空ç `INTEGER`ãè¯Šè§ [SQLModel å
³äºäž»é®çææ¡£](https://sqlmodel.tiangolo.com/tutorial/create-db-and-table/#primary-key-id)ã
* `Field(index=True)` äŒåè¯ SQLModel åºè¯¥äžºæ€åå建äžäžª **SQL 玢åŒ**ïŒè¿æ ·åšè¯»åææ€åè¿æ»€çæ°æ®æ¶ïŒçšåºèœåšæ°æ®åºäžè¿è¡æŽå¿«çæ¥æŸã
@@ -111,7 +111,7 @@ SQLModel ç `engine`ïŒå®é
äžå®æ¯äžäžª SQLAlchemy ç `engine`ïŒæ¯çš
/// tip | æç€º
-SQLModel å°äŒæ¥æå°è£
Alembic çè¿ç§»å·¥å
·ïŒäœç®åäœ å¯ä»¥çŽæ¥äœ¿çš
Alembicã
+SQLModel å°äŒæ¥æå°è£
Alembic çè¿ç§»å·¥å
·ïŒäœç®åäœ å¯ä»¥çŽæ¥äœ¿çš [Alembic](https://alembic.sqlalchemy.org/en/latest/)ã
///
@@ -152,7 +152,7 @@ SQLModel å°äŒæ¥æå°è£
Alembic çè¿ç§»å·¥å
·ïŒäœç®åäœ å¯ä»¥çŽæ¥
```console
-$ fastapi dev main.py
+$ fastapi dev
INFO: Uvicorn running on http://127.0.0.1:8000 (Press CTRL+C to quit)
```
@@ -337,7 +337,7 @@ $ fastapi dev main.py
```console
-$ fastapi dev main.py
+$ fastapi dev
INFO: Uvicorn running on http://127.0.0.1:8000 (Press CTRL+C to quit)
```
@@ -352,6 +352,6 @@ $ fastapi dev main.py
## æ»ç» { #recap }
-äœ å¯ä»¥äœ¿çš
**SQLModel** äž SQL æ°æ®åºè¿è¡äº€äºïŒå¹¶éè¿*æ°æ®æš¡å*å*衚暡å*ç®å代ç ã
+äœ å¯ä»¥äœ¿çš [**SQLModel**](https://sqlmodel.tiangolo.com/) äž SQL æ°æ®åºè¿è¡äº€äºïŒå¹¶éè¿*æ°æ®æš¡å*å*衚暡å*ç®å代ç ã
-äœ å¯ä»¥åš **SQLModel** ææ¡£äžåŠä¹ å°æŽå€å
容ïŒå
¶äžæäžäžªæŽè¯Šç»ç
å° SQLModel äž **FastAPI** äžèµ·äœ¿çšçè¿·äœ æçšãð
+äœ å¯ä»¥åš **SQLModel** ææ¡£äžåŠä¹ å°æŽå€å
容ïŒå
¶äžæäžäžªæŽè¯Šç»ç[å° SQLModel äž **FastAPI** äžèµ·äœ¿çšçè¿·äœ æçš](https://sqlmodel.tiangolo.com/tutorial/fastapi/)ãð
diff --git a/docs/zh/docs/tutorial/static-files.md b/docs/zh/docs/tutorial/static-files.md
index 1f4ebae9ab..65262bdb40 100644
--- a/docs/zh/docs/tutorial/static-files.md
+++ b/docs/zh/docs/tutorial/static-files.md
@@ -23,7 +23,7 @@
è¿äžäœ¿çš `APIRouter` äžåïŒå 䞺æèœœçåºçšæ¯å®å
šç¬ç«çãäž»åºçšç OpenAPI åææ¡£äžäŒå
å«å·²æèœœåºçšçä»»äœå
容ïŒççã
-äœ å¯ä»¥åš[é«çº§çšæ·æå](../advanced/index.md){.internal-link target=_blank}äžäºè§£æŽå€ã
+äœ å¯ä»¥åš[é«çº§çšæ·æå](../advanced/index.md)äžäºè§£æŽå€ã
## ç»è { #details }
@@ -37,4 +37,4 @@
## æŽå€ä¿¡æ¯ { #more-info }
-æŽå€ç»èåé项请æ¥é
Starlette çéææä»¶ææ¡£ã
+æŽå€ç»èåé项请æ¥é
[Starlette çéææä»¶ææ¡£](https://www.starlette.dev/staticfiles/)ã
diff --git a/docs/zh/docs/tutorial/stream-json-lines.md b/docs/zh/docs/tutorial/stream-json-lines.md
new file mode 100644
index 0000000000..8a27dce760
--- /dev/null
+++ b/docs/zh/docs/tutorial/stream-json-lines.md
@@ -0,0 +1,111 @@
+# æµåŒäŒ èŸ JSON Lines { #stream-json-lines }
+
+åœäœ æ³ä»¥âæµâçæ¹åŒåéäžç³»åæ°æ®æ¶ïŒå¯ä»¥äœ¿çš JSON Linesã
+
+/// info | ä¿¡æ¯
+
+æ°å¢äº FastAPI 0.134.0ã
+
+///
+
+## ä»ä¹æ¯æµ { #what-is-a-stream }
+
+âæµåŒäŒ èŸâæ°æ®æå³çäœ çåºçšäŒåšæŽæ®µæ°æ®å
šéšåå€å¥œä¹åïŒå°±åŒå§ææ¯äžªæ°æ®é¡¹åéç»å®¢æ·ç«¯ã
+
+ä¹å°±æ¯è¯ŽïŒå®äŒå
åé第äžäžªæ°æ®é¡¹ïŒå®¢æ·ç«¯äŒæ¥æ¶å¹¶åŒå§å€çå®ïŒèæ€æ¶äœ çåºçšå¯èœè¿åšçæäžäžäžªæ°æ®é¡¹ã
+
+```mermaid
+sequenceDiagram
+ participant App
+ participant Client
+
+ App->>App: Produce Item 1
+ App->>Client: Send Item 1
+ App->>App: Produce Item 2
+ Client->>Client: Process Item 1
+ App->>Client: Send Item 2
+ App->>App: Produce Item 3
+ Client->>Client: Process Item 2
+ App->>Client: Send Item 3
+ Client->>Client: Process Item 3
+ Note over App: Keeps producing...
+ Note over Client: Keeps consuming...
+```
+
+å®çè³å¯ä»¥æ¯äžäžªæ éæµïŒäœ å¯ä»¥äžçŽæç»åéæ°æ®ã
+
+## JSON Lines { #json-lines }
+
+åšè¿äºåºæ¯äžïŒåžžè§çåæ³æ¯åé âJSON LinesâïŒè¿æ¯äžç§æ¯è¡åéäžäžª JSON å¯¹è±¡çæ ŒåŒã
+
+ååºçå
å®¹ç±»åæ¯ `application/jsonl`ïŒèäžæ¯ `application/json`ïŒïŒååºäœç±»äŒŒè¿æ ·ïŒ
+
+```json
+{"name": "Plumbus", "description": "A multi-purpose household device."}
+{"name": "Portal Gun", "description": "A portal opening device."}
+{"name": "Meeseeks Box", "description": "A box that summons a Meeseeks."}
+```
+
+å®äž JSON æ°ç»ïŒçžåœäº Python ç listïŒéåžžçžäŒŒïŒäœäžæ¯çš `[]` å
裹ãå¹¶åšå项ä¹éŽäœ¿çš `,` åéïŒèæ¯æ¯è¡äžäžª JSON 对象ïŒåœŒæ€ä»¥æ¢è¡ç¬Šåéã
+
+/// info | ä¿¡æ¯
+
+å
³é®åšäºäœ çåºçšå¯ä»¥éè¡çææ°æ®ïŒè客æ·ç«¯åšæ¶è޹åé¢çè¡ã
+
+///
+
+/// note | ææ¯ç»è
+
+ç±äºæ¯äžª JSON 对象å°ä»¥æ¢è¡åéïŒå®ä»¬çå
容äžäžèœå
å«åé¢éæ¢è¡ç¬ŠïŒäœå¯ä»¥å
å«èœ¬ä¹æ¢è¡ç¬ŠïŒ`\n`ïŒïŒè¿å±äº JSON æ åçäžéšåã
+
+äžè¿éåžžäœ æ éæå¿ïŒè¿äºéœäŒèªåšå®æïŒç»§ç»é
读å³å¯ãð€
+
+///
+
+## 䜿çšåºæ¯ { #use-cases }
+
+äœ å¯ä»¥çšå®æ¥ä» AI LLM æå¡ãæ¥å¿æé¥æµäžæµåŒäŒ èŸæ°æ®ïŒæå
¶ä»å¯ä»¥çš JSON é¡¹ç®æ¥ç»æåçæ°æ®ã
+
+/// tip | æç€º
+
+åŠæäœ æ³æµåŒäŒ èŸäºè¿å¶æ°æ®ïŒäŸåŠè§é¢æé³é¢ïŒè¯·æ¥çè¿é¶æåïŒ[æµåŒäŒ èŸæ°æ®](../advanced/stream-data.md)ã
+
+///
+
+## äœ¿çš FastAPI æµåŒäŒ èŸ JSON Lines { #stream-json-lines-with-fastapi }
+
+èŠåš FastAPI äžæµåŒäŒ èŸ JSON LinesïŒå¯ä»¥åšè·¯åŸæäœåœæ°äžäžçš `return`ïŒèæ¯çš `yield` éäžªäº§çæ¯äžªæ°æ®é¡¹ã
+
+{* ../../docs_src/stream_json_lines/tutorial001_py310.py ln[1:24] hl[24] *}
+
+åŠæäœ èŠè¿åçæ¯äžª JSON 项æ¯ç±»å `Item`ïŒäžäžª Pydantic æš¡åïŒïŒå¹¶äžè¿æ¯äžäžªåŒæ¥åœæ°ïŒäœ å¯ä»¥å°è¿åç±»å声æäžº `AsyncIterable[Item]`ïŒ
+
+{* ../../docs_src/stream_json_lines/tutorial001_py310.py ln[1:24] hl[9:11,22] *}
+
+åŠæäœ å£°æäºè¿åç±»åïŒFastAPI äŒçšå®æ¥éªè¯æ°æ®ãåš OpenAPI äžçæææ¡£ãè¿è¡è¿æ»€ïŒå¹¶äœ¿çš Pydantic è¿è¡åºååã
+
+/// tip | æç€º
+
+ç±äº Pydantic äŒåš Rust 䟧è¿è¡åºååïŒåŠæäœ å£°æäºè¿åç±»åïŒå°è·åŸæŽé«çæ§èœã
+
+///
+
+### éåŒæ¥ç*è·¯åŸæäœåœæ°* { #non-async-path-operation-functions }
+
+äœ ä¹å¯ä»¥äœ¿çšåžžè§ç `def` åœæ°ïŒäžåžŠ `async`ïŒïŒå¹¶ä»¥åæ ·çæ¹åŒäœ¿çš `yield`ã
+
+FastAPI äŒç¡®ä¿å
¶æ£ç¡®è¿è¡ïŒäžäŒé»å¡äºä»¶åŸªç¯ã
+
+å 䞺è¿äžªåœæ°äžæ¯åŒæ¥çïŒåéçè¿åç±»åæ¯ `Iterable[Item]`ïŒ
+
+{* ../../docs_src/stream_json_lines/tutorial001_py310.py ln[27:30] hl[28] *}
+
+### æ è¿åç±»å { #no-return-type }
+
+äœ ä¹å¯ä»¥çç¥è¿åç±»åãæ€æ¶ FastAPI äŒäœ¿çš [`jsonable_encoder`](./encoder.md) å°æ°æ®èœ¬æ¢äžºå¯åºåå䞺 JSON ç圢åŒïŒç¶å以 JSON Lines åéã
+
+{* ../../docs_src/stream_json_lines/tutorial001_py310.py ln[33:36] hl[34] *}
+
+## æå¡åšåéäºä»¶ïŒSSEïŒ { #server-sent-events-sse }
+
+FastAPI è¿å¯¹ Server-Sent EventsïŒSSEïŒæäŸäžçæ¯æïŒå®ä»¬äžæ€éåžžçžäŒŒïŒäœæäžäºé¢å€ç»èãäœ å¯ä»¥åšäžäžç« äºè§£æŽå€ïŒ[æå¡åšåéäºä»¶ïŒSSEïŒ](server-sent-events.md)ãð€
diff --git a/docs/zh/docs/tutorial/testing.md b/docs/zh/docs/tutorial/testing.md
index 7eb32f19e6..6607a12391 100644
--- a/docs/zh/docs/tutorial/testing.md
+++ b/docs/zh/docs/tutorial/testing.md
@@ -1,18 +1,18 @@
# æµè¯ { #testing }
-æè°¢
StarletteïŒæµè¯**FastAPI** åºçšèœ»æŸåæå¿«ã
+æè°¢ [Starlette](https://www.starlette.dev/testclient/)ïŒæµè¯**FastAPI** åºçšèœ»æŸåæå¿«ã
-å®åºäº
HTTPXïŒ èHTTPX忝åºäºRequests讟计çïŒæä»¥åŸçžäŒŒäžææã
+å®åºäº [HTTPX](https://www.python-httpx.org)ïŒèHTTPX忝åºäºRequests讟计çïŒæä»¥åŸçžäŒŒäžææã
-æäºå®ïŒäœ å¯ä»¥çŽæ¥äž**FastAPI**äžèµ·äœ¿çš
pytestã
+æäºå®ïŒäœ å¯ä»¥çŽæ¥äž**FastAPI**äžèµ·äœ¿çš [pytest](https://docs.pytest.org/)ã
## äœ¿çš `TestClient` { #using-testclient }
/// info | ä¿¡æ¯
-èŠäœ¿çš `TestClient`ïŒå
èŠå®è£
`httpx`ã
+èŠäœ¿çš `TestClient`ïŒå
èŠå®è£
[`httpx`](https://www.python-httpx.org)ã
-ç¡®ä¿äœ åå»ºå¹¶æ¿æŽ»äžäžª[èæç¯å¢](../virtual-environments.md){.internal-link target=_blank}ïŒç¶ååå®è£
ïŒäŸåŠïŒ
+ç¡®ä¿äœ åå»ºå¹¶æ¿æŽ»äžäžª[èæç¯å¢](../virtual-environments.md)ïŒç¶ååå®è£
ïŒäŸåŠïŒ
```console
$ pip install httpx
@@ -52,7 +52,7 @@ $ pip install httpx
/// tip | æç€º
-é€äºåé请æ±ä¹å€ïŒåŠæäœ è¿æ³æµè¯æ¶åšFastAPIåºçšäžè°çš `async` åœæ°ïŒäŸåŠåŒæ¥æ°æ®åºåœæ°ïŒïŒ å¯ä»¥åšé«çº§æçšäžçäž [Async Tests](../advanced/async-tests.md){.internal-link target=_blank} ã
+é€äºåé请æ±ä¹å€ïŒåŠæäœ è¿æ³æµè¯æ¶åšFastAPIåºçšäžè°çš `async` åœæ°ïŒäŸåŠåŒæ¥æ°æ®åºåœæ°ïŒïŒ å¯ä»¥åšé«çº§æçšäžçäž [Async Tests](../advanced/async-tests.md) ã
///
@@ -64,7 +64,7 @@ $ pip install httpx
### **FastAPI** app æä»¶ { #fastapi-app-file }
-åè®Ÿäœ æäžäžªå [æŽå€§çåºçš](bigger-applications.md){.internal-link target=_blank} äžææè¿°çæä»¶ç»æ:
+åè®Ÿäœ æäžäžªå[æŽå€§çåºçš](bigger-applications.md)äžææè¿°çæä»¶ç»æ:
```
.
@@ -112,7 +112,7 @@ $ pip install httpx
â  âââ test_main.py
```
-å讟ç°åšå
å«**FastAPI** appçæä»¶ `main.py` æäºå
¶ä»**è·¯åŸæäœ**ã
+å讟ç°åšå
å«**FastAPI** appçæä»¶ `main.py` æäºå
¶ä»**è·¯åŸæäœ**ã
æäžª `GET` æäœäŒè¿åé误ã
@@ -128,7 +128,7 @@ $ pip install httpx
{* ../../docs_src/app_testing/app_b_an_py310/test_main.py *}
-æ¯åœäœ éèŠå®¢æ·ç«¯åšè¯·æ±äžäŒ éä¿¡æ¯ïŒäœäœ äžç¥éåŠäœäŒ éæ¶ïŒäœ å¯ä»¥éè¿æçŽ¢ïŒè°·æïŒåŠäœçš `httpx`åïŒæè
æ¯çš `requests` åïŒæ¯ç«HTTPXç讟计æ¯åºäºRequestsç讟计çã
+æ¯åœäœ éèŠå®¢æ·ç«¯åšè¯·æ±äžäŒ éä¿¡æ¯ïŒäœäœ äžç¥éåŠäœäŒ éæ¶ïŒäœ å¯ä»¥éè¿æçŽ¢ïŒè°·æïŒåŠäœçš `httpx` åïŒæè
æ¯çš `requests` åïŒæ¯ç«HTTPXç讟计æ¯åºäºRequestsç讟计çã
æ¥çåªéåšæµè¯äžåæ ·æäœã
@@ -140,13 +140,13 @@ $ pip install httpx
* èŠåé *headers*ïŒäŒ `dict` ç» `headers` åæ°ã
* å¯¹äº *cookies*ïŒäŒ `dict` ç» `cookies` åæ°ã
-å
³äºåŠäœäŒ æ°æ®ç»åç«¯çæŽå€ä¿¡æ¯ (䜿çš`httpx` æ `TestClient`)ïŒè¯·æ¥é
HTTPX ææ¡£.
+å
³äºåŠäœäŒ æ°æ®ç»åç«¯çæŽå€ä¿¡æ¯ïŒäœ¿çš `httpx` æ `TestClient`ïŒïŒè¯·æ¥é
[HTTPX ææ¡£](https://www.python-httpx.org)ã
/// info | ä¿¡æ¯
泚æ `TestClient` æ¥æ¶å¯ä»¥è¢«èœ¬å䞺JSONçæ°æ®ïŒèäžæ¯Pydanticæš¡åã
-åŠæäœ åšæµè¯äžæäžäžªPydanticæš¡åïŒå¹¶äžäœ æ³åšæµè¯æ¶åéå®çæ°æ®ç»åºçšïŒäœ å¯ä»¥äœ¿çšåš[JSON Compatible Encoder](encoder.md){.internal-link target=_blank}ä»ç»ç`jsonable_encoder` ã
+åŠæäœ åšæµè¯äžæäžäžªPydanticæš¡åïŒå¹¶äžäœ æ³åšæµè¯æ¶åéå®çæ°æ®ç»åºçšïŒäœ å¯ä»¥äœ¿çšåš[JSON Compatible Encoder](encoder.md)ä»ç»ç`jsonable_encoder` ã
///
@@ -154,7 +154,7 @@ $ pip install httpx
ä¹åïŒäœ åªéèŠå®è£
`pytest`ã
-ç¡®ä¿äœ åå»ºå¹¶æ¿æŽ»äžäžª[èæç¯å¢](../virtual-environments.md){.internal-link target=_blank}ïŒç¶ååå®è£
ïŒäŸåŠïŒ
+ç¡®ä¿äœ åå»ºå¹¶æ¿æŽ»äžäžª[èæç¯å¢](../virtual-environments.md)ïŒç¶ååå®è£
ïŒäŸåŠïŒ
diff --git a/docs/zh/docs/virtual-environments.md b/docs/zh/docs/virtual-environments.md
index 60fb9e23f6..14ee538639 100644
--- a/docs/zh/docs/virtual-environments.md
+++ b/docs/zh/docs/virtual-environments.md
@@ -22,7 +22,7 @@
è¿äžªé¡µé¢å°æäœ åŠäœäœ¿çš**èæç¯å¢**以åäºè§£å®ä»¬çå·¥äœåçã
-åŠæäœ è®¡å䜿çšäžäžª**å¯ä»¥äžºäœ 管çäžåçå·¥å
·**ïŒå
æ¬å®è£
PythonïŒïŒè¯è¯
uvã
+åŠæäœ è®¡å䜿çšäžäžª**å¯ä»¥äžºäœ 管çäžåçå·¥å
·**ïŒå
æ¬å®è£
PythonïŒïŒè¯è¯ [uv](https://github.com/astral-sh/uv)ã
///
@@ -86,7 +86,7 @@ $ python -m venv .venv
//// tab | `uv`
-åŠæäœ å®è£
äº
`uv`ïŒäœ ä¹å¯ä»¥äœ¿çšå®æ¥å建äžäžªèæç¯å¢ã
+åŠæäœ å®è£
äº [`uv`](https://github.com/astral-sh/uv)ïŒäœ ä¹å¯ä»¥äœ¿çšå®æ¥å建äžäžªèæç¯å¢ã
@@ -150,7 +150,7 @@ $ .venv\Scripts\Activate.ps1
//// tab | Windows Bash
-æè
ïŒåŠæäœ åš Windows äžäœ¿çš BashïŒäŸåŠ
Git BashïŒïŒ
+æè
ïŒåŠæäœ åš Windows äžäœ¿çš BashïŒäŸåŠ [Git Bash](https://gitforwindows.org/)ïŒïŒ
@@ -216,7 +216,7 @@ C:\Users\user\code\awesome-project\.venv\Scripts\python
/// tip | æç€º
-åŠæäœ äœ¿çš
`uv` æ¥å®è£
å
容ïŒèäžæ¯ `pip`ïŒé£ä¹äœ å°±äžéèŠå级 `pip`ãð
+åŠæäœ äœ¿çš [`uv`](https://github.com/astral-sh/uv) æ¥å®è£
å
容ïŒèäžæ¯ `pip`ïŒé£ä¹äœ å°±äžéèŠå级 `pip`ãð
///
@@ -268,7 +268,7 @@ $ python -m ensurepip --upgrade
/// tip | æç€º
-åŠæäœ äœ¿çš
`uv` æ¥å建èæç¯å¢ïŒå®äŒèªåšäžºäœ 宿è¿äžªæäœïŒäœ å¯ä»¥è·³è¿è¿äžæ¥ãð
+åŠæäœ äœ¿çš [`uv`](https://github.com/astral-sh/uv) æ¥å建èæç¯å¢ïŒå®äŒèªåšäžºäœ 宿è¿äžªæäœïŒäœ å¯ä»¥è·³è¿è¿äžæ¥ãð
///
@@ -340,7 +340,7 @@ $ pip install "fastapi[standard]"
//// tab | `uv`
-åŠæäœ æ
`uv`:
+åŠæäœ æ [`uv`](https://github.com/astral-sh/uv):
@@ -372,7 +372,7 @@ $ pip install -r requirements.txt
//// tab | `uv`
-åŠæäœ æ
`uv`:
+åŠæäœ æ [`uv`](https://github.com/astral-sh/uv):
@@ -416,8 +416,8 @@ Hello World
äŸåŠïŒ
-*
VS Code
-*
PyCharm
+* [VS Code](https://code.visualstudio.com/docs/python/environments#_select-and-activate-an-environment)
+* [PyCharm](https://www.jetbrains.com/help/pycharm/creating-virtual-environment.html)
/// tip | æç€º
@@ -455,7 +455,7 @@ $ deactivate
## 䞺ä»ä¹èŠäœ¿çšèæç¯å¢ { #why-virtual-environments }
-äœ éèŠå®è£
Python æèœäœ¿çš FastAPIã
+äœ éèŠå®è£
[Python](https://www.python.org/) æèœäœ¿çš FastAPIã
ä¹åïŒäœ éèŠ**å®è£
** FastAPI åäœ æ³èŠäœ¿çšçä»»äœå
¶ä»**蜯件å
**ã
@@ -564,7 +564,7 @@ $ pip install "fastapi[standard]"
-è¿å°äŒä»
PyPI äžèœœäžäžªå猩æä»¶ïŒå
¶äžå
å« FastAPI 代ç ã
+è¿å°äŒä» [PyPI](https://pypi.org/project/fastapi/) äžèœœäžäžªå猩æä»¶ïŒå
¶äžå
å« FastAPI 代ç ã
å®è¿äŒ**äžèœœ** FastAPI äŸèµçå
¶ä»èœ¯ä»¶å
çæä»¶ã
@@ -627,7 +627,7 @@ $ .venv\Scripts\Activate.ps1
//// tab | Windows Bash
-æè
åŠæäœ åš Windows äžäœ¿çš BashïŒäŸåŠ
Git BashïŒïŒ
+æè
åŠæäœ åš Windows äžäœ¿çš BashïŒäŸåŠ [Git Bash](https://gitforwindows.org/)ïŒïŒ
@@ -639,13 +639,13 @@ $ source .venv/Scripts/activate
////
-è¿äžªåœä»€äŒå建æä¿®æ¹äžäº[ç¯å¢åé](environment-variables.md){.internal-link target=_blank}ïŒè¿äºç¯å¢åéå°åšæ¥äžæ¥çåœä»€äžå¯çšã
+è¿äžªåœä»€äŒå建æä¿®æ¹äžäº[ç¯å¢åé](environment-variables.md)ïŒè¿äºç¯å¢åéå°åšæ¥äžæ¥çåœä»€äžå¯çšã
å
¶äžä¹äžæ¯ `PATH` åéã
/// tip | æç€º
-äœ å¯ä»¥åš [ç¯å¢åé](environment-variables.md#path-environment-variable){.internal-link target=_blank} éšåäºè§£æŽå€å
³äº `PATH` ç¯å¢åéçå
容ã
+äœ å¯ä»¥åš [ç¯å¢åé](environment-variables.md#path-environment-variable) éšåäºè§£æŽå€å
³äº `PATH` ç¯å¢åéçå
容ã
///
@@ -846,7 +846,7 @@ I solemnly swear ðº
æè®žå€**æ¿ä»£æ¹æ¡**æ¥ç®¡çèæç¯å¢ãå
äŸèµïŒrequirementsïŒãå·¥çšã
-äžæŠäœ åå€å¥œå¹¶æ³èŠäœ¿çšäžäžªå·¥å
·æ¥**ç®¡çæŽäžªå·¥çš**ãå
äŸèµãèæç¯å¢çïŒå»ºè®®äœ å°è¯
uvã
+äžæŠäœ åå€å¥œå¹¶æ³èŠäœ¿çšäžäžªå·¥å
·æ¥**ç®¡çæŽäžªå·¥çš**ãå
äŸèµãèæç¯å¢çïŒå»ºè®®äœ å°è¯ [uv](https://github.com/astral-sh/uv)ã
`uv` å¯ä»¥ååŸå€äºæ
ïŒå®å¯ä»¥ïŒ
diff --git a/uv.lock b/uv.lock
index 9a10d7bda6..096b0a361c 100644
--- a/uv.lock
+++ b/uv.lock
@@ -314,14 +314,14 @@ wheels = [
[[package]]
name = "authlib"
-version = "1.6.7"
+version = "1.6.9"
source = { registry = "https://pypi.org/simple" }
dependencies = [
{ name = "cryptography" },
]
-sdist = { url = "https://files.pythonhosted.org/packages/49/dc/ed1681bf1339dd6ea1ce56136bad4baabc6f7ad466e375810702b0237047/authlib-1.6.7.tar.gz", hash = "sha256:dbf10100011d1e1b34048c9d120e83f13b35d69a826ae762b93d2fb5aafc337b", size = 164950, upload-time = "2026-02-06T14:04:14.171Z" }
+sdist = { url = "https://files.pythonhosted.org/packages/af/98/00d3dd826d46959ad8e32af2dbb2398868fd9fd0683c26e56d0789bd0e68/authlib-1.6.9.tar.gz", hash = "sha256:d8f2421e7e5980cc1ddb4e32d3f5fa659cfaf60d8eaf3281ebed192e4ab74f04", size = 165134, upload-time = "2026-03-02T07:44:01.998Z" }
wheels = [
- { url = "https://files.pythonhosted.org/packages/f8/00/3ed12264094ec91f534fae429945efbaa9f8c666f3aa7061cc3b2a26a0cd/authlib-1.6.7-py2.py3-none-any.whl", hash = "sha256:c637340d9a02789d2efa1d003a7437d10d3e565237bcb5fcbc6c134c7b95bab0", size = 244115, upload-time = "2026-02-06T14:04:12.141Z" },
+ { url = "https://files.pythonhosted.org/packages/53/23/b65f568ed0c22f1efacb744d2db1a33c8068f384b8c9b482b52ebdbc3ef6/authlib-1.6.9-py2.py3-none-any.whl", hash = "sha256:f08b4c14e08f0861dc18a32357b33fbcfd2ea86cfe3fe149484b4d764c4a0ac3", size = 244197, upload-time = "2026-03-02T07:44:00.307Z" },
]
[[package]]
@@ -479,6 +479,9 @@ dependencies = [
{ name = "tinycss2" },
]
sdist = { url = "https://files.pythonhosted.org/packages/38/07/e8412a13019b3f737972dea23a2c61ca42becafc16c9338f4ca7a0caa993/cairosvg-2.9.0.tar.gz", hash = "sha256:1debb00cd2da11350d8b6f5ceb739f1b539196d71d5cf5eb7363dbd1bfbc8dc5", size = 40877, upload-time = "2026-03-13T15:42:00.564Z" }
+wheels = [
+ { url = "https://files.pythonhosted.org/packages/bf/e0/5011747466414c12cac8a8df77aa235068669a6a5a5df301a96209db6054/cairosvg-2.9.0-py3-none-any.whl", hash = "sha256:4b82d07d145377dffdfc19d9791bd5fb65539bb4da0adecf0bdbd9cd4ffd7c68", size = 45962, upload-time = "2026-03-14T13:56:33.512Z" },
+]
[[package]]
name = "certifi"
@@ -3938,11 +3941,11 @@ wheels = [
[[package]]
name = "pyasn1"
-version = "0.6.2"
+version = "0.6.3"
source = { registry = "https://pypi.org/simple" }
-sdist = { url = "https://files.pythonhosted.org/packages/fe/b6/6e630dff89739fcd427e3f72b3d905ce0acb85a45d4ec3e2678718a3487f/pyasn1-0.6.2.tar.gz", hash = "sha256:9b59a2b25ba7e4f8197db7686c09fb33e658b98339fadb826e9512629017833b", size = 146586, upload-time = "2026-01-16T18:04:18.534Z" }
+sdist = { url = "https://files.pythonhosted.org/packages/5c/5f/6583902b6f79b399c9c40674ac384fd9cd77805f9e6205075f828ef11fb2/pyasn1-0.6.3.tar.gz", hash = "sha256:697a8ecd6d98891189184ca1fa05d1bb00e2f84b5977c481452050549c8a72cf", size = 148685, upload-time = "2026-03-17T01:06:53.382Z" }
wheels = [
- { url = "https://files.pythonhosted.org/packages/44/b5/a96872e5184f354da9c84ae119971a0a4c221fe9b27a4d94bd43f2596727/pyasn1-0.6.2-py3-none-any.whl", hash = "sha256:1eb26d860996a18e9b6ed05e7aae0e9fc21619fcee6af91cca9bad4fbea224bf", size = 83371, upload-time = "2026-01-16T18:04:17.174Z" },
+ { url = "https://files.pythonhosted.org/packages/5d/a0/7d793dce3fa811fe047d6ae2431c672364b462850c6235ae306c0efd025f/pyasn1-0.6.3-py3-none-any.whl", hash = "sha256:a80184d120f0864a52a073acc6fc642847d0be408e7c7252f31390c0f4eadcde", size = 83997, upload-time = "2026-03-17T01:06:52.036Z" },
]
[[package]]
@@ -5769,82 +5772,87 @@ wheels = [
[[package]]
name = "ujson"
-version = "5.11.0"
-source = { registry = "https://pypi.org/simple" }
-sdist = { url = "https://files.pythonhosted.org/packages/43/d9/3f17e3c5773fb4941c68d9a37a47b1a79c9649d6c56aefbed87cc409d18a/ujson-5.11.0.tar.gz", hash = "sha256:e204ae6f909f099ba6b6b942131cee359ddda2b6e4ea39c12eb8b991fe2010e0", size = 7156583, upload-time = "2025-08-20T11:57:02.452Z" }
-wheels = [
- { url = "https://files.pythonhosted.org/packages/86/0c/8bf7a4fabfd01c7eed92d9b290930ce6d14910dec708e73538baa38885d1/ujson-5.11.0-cp310-cp310-macosx_10_9_x86_64.whl", hash = "sha256:446e8c11c06048611c9d29ef1237065de0af07cabdd97e6b5b527b957692ec25", size = 55248, upload-time = "2025-08-20T11:55:02.368Z" },
- { url = "https://files.pythonhosted.org/packages/7b/2e/eeab0b8b641817031ede4f790db4c4942df44a12f44d72b3954f39c6a115/ujson-5.11.0-cp310-cp310-macosx_11_0_arm64.whl", hash = "sha256:16ccb973b7ada0455201808ff11d48fe9c3f034a6ab5bd93b944443c88299f89", size = 53157, upload-time = "2025-08-20T11:55:04.012Z" },
- { url = "https://files.pythonhosted.org/packages/21/1b/a4e7a41870797633423ea79618526747353fd7be9191f3acfbdee0bf264b/ujson-5.11.0-cp310-cp310-manylinux_2_24_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:3134b783ab314d2298d58cda7e47e7a0f7f71fc6ade6ac86d5dbeaf4b9770fa6", size = 57657, upload-time = "2025-08-20T11:55:05.169Z" },
- { url = "https://files.pythonhosted.org/packages/94/ae/4e0d91b8f6db7c9b76423b3649612189506d5a06ddd3b6334b6d37f77a01/ujson-5.11.0-cp310-cp310-manylinux_2_24_i686.manylinux_2_28_i686.whl", hash = "sha256:185f93ebccffebc8baf8302c869fac70dd5dd78694f3b875d03a31b03b062cdb", size = 59780, upload-time = "2025-08-20T11:55:06.325Z" },
- { url = "https://files.pythonhosted.org/packages/b3/cc/46b124c2697ca2da7c65c4931ed3cb670646978157aa57a7a60f741c530f/ujson-5.11.0-cp310-cp310-manylinux_2_24_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:d06e87eded62ff0e5f5178c916337d2262fdbc03b31688142a3433eabb6511db", size = 57307, upload-time = "2025-08-20T11:55:07.493Z" },
- { url = "https://files.pythonhosted.org/packages/39/eb/20dd1282bc85dede2f1c62c45b4040bc4c389c80a05983515ab99771bca7/ujson-5.11.0-cp310-cp310-musllinux_1_2_aarch64.whl", hash = "sha256:181fb5b15703a8b9370b25345d2a1fd1359f0f18776b3643d24e13ed9c036d4c", size = 1036369, upload-time = "2025-08-20T11:55:09.192Z" },
- { url = "https://files.pythonhosted.org/packages/64/a2/80072439065d493e3a4b1fbeec991724419a1b4c232e2d1147d257cac193/ujson-5.11.0-cp310-cp310-musllinux_1_2_i686.whl", hash = "sha256:a4df61a6df0a4a8eb5b9b1ffd673429811f50b235539dac586bb7e9e91994138", size = 1195738, upload-time = "2025-08-20T11:55:11.402Z" },
- { url = "https://files.pythonhosted.org/packages/5d/7e/d77f9e9c039d58299c350c978e086a804d1fceae4fd4a1cc6e8d0133f838/ujson-5.11.0-cp310-cp310-musllinux_1_2_x86_64.whl", hash = "sha256:6eff24e1abd79e0ec6d7eae651dd675ddbc41f9e43e29ef81e16b421da896915", size = 1088718, upload-time = "2025-08-20T11:55:13.297Z" },
- { url = "https://files.pythonhosted.org/packages/ab/f1/697559d45acc849cada6b3571d53522951b1a64027400507aabc6a710178/ujson-5.11.0-cp310-cp310-win32.whl", hash = "sha256:30f607c70091483550fbd669a0b37471e5165b317d6c16e75dba2aa967608723", size = 39653, upload-time = "2025-08-20T11:55:14.869Z" },
- { url = "https://files.pythonhosted.org/packages/86/a2/70b73a0f55abe0e6b8046d365d74230c20c5691373e6902a599b2dc79ba1/ujson-5.11.0-cp310-cp310-win_amd64.whl", hash = "sha256:3d2720e9785f84312b8e2cb0c2b87f1a0b1c53aaab3b2af3ab817d54409012e0", size = 43720, upload-time = "2025-08-20T11:55:15.897Z" },
- { url = "https://files.pythonhosted.org/packages/1c/5f/b19104afa455630b43efcad3a24495b9c635d92aa8f2da4f30e375deb1a2/ujson-5.11.0-cp310-cp310-win_arm64.whl", hash = "sha256:85e6796631165f719084a9af00c79195d3ebf108151452fefdcb1c8bb50f0105", size = 38410, upload-time = "2025-08-20T11:55:17.556Z" },
- { url = "https://files.pythonhosted.org/packages/da/ea/80346b826349d60ca4d612a47cdf3533694e49b45e9d1c07071bb867a184/ujson-5.11.0-cp311-cp311-macosx_10_9_x86_64.whl", hash = "sha256:d7c46cb0fe5e7056b9acb748a4c35aa1b428025853032540bb7e41f46767321f", size = 55248, upload-time = "2025-08-20T11:55:19.033Z" },
- { url = "https://files.pythonhosted.org/packages/57/df/b53e747562c89515e18156513cc7c8ced2e5e3fd6c654acaa8752ffd7cd9/ujson-5.11.0-cp311-cp311-macosx_11_0_arm64.whl", hash = "sha256:d8951bb7a505ab2a700e26f691bdfacf395bc7e3111e3416d325b513eea03a58", size = 53156, upload-time = "2025-08-20T11:55:20.174Z" },
- { url = "https://files.pythonhosted.org/packages/41/b8/ab67ec8c01b8a3721fd13e5cb9d85ab2a6066a3a5e9148d661a6870d6293/ujson-5.11.0-cp311-cp311-manylinux_2_24_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:952c0be400229940248c0f5356514123d428cba1946af6fa2bbd7503395fef26", size = 57657, upload-time = "2025-08-20T11:55:21.296Z" },
- { url = "https://files.pythonhosted.org/packages/7b/c7/fb84f27cd80a2c7e2d3c6012367aecade0da936790429801803fa8d4bffc/ujson-5.11.0-cp311-cp311-manylinux_2_24_i686.manylinux_2_28_i686.whl", hash = "sha256:94fcae844f1e302f6f8095c5d1c45a2f0bfb928cccf9f1b99e3ace634b980a2a", size = 59779, upload-time = "2025-08-20T11:55:22.772Z" },
- { url = "https://files.pythonhosted.org/packages/5d/7c/48706f7c1e917ecb97ddcfb7b1d756040b86ed38290e28579d63bd3fcc48/ujson-5.11.0-cp311-cp311-manylinux_2_24_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:7e0ec1646db172beb8d3df4c32a9d78015e671d2000af548252769e33079d9a6", size = 57284, upload-time = "2025-08-20T11:55:24.01Z" },
- { url = "https://files.pythonhosted.org/packages/ec/ce/48877c6eb4afddfd6bd1db6be34456538c07ca2d6ed233d3f6c6efc2efe8/ujson-5.11.0-cp311-cp311-musllinux_1_2_aarch64.whl", hash = "sha256:da473b23e3a54448b008d33f742bcd6d5fb2a897e42d1fc6e7bf306ea5d18b1b", size = 1036395, upload-time = "2025-08-20T11:55:25.725Z" },
- { url = "https://files.pythonhosted.org/packages/8b/7a/2c20dc97ad70cd7c31ad0596ba8e2cf8794d77191ba4d1e0bded69865477/ujson-5.11.0-cp311-cp311-musllinux_1_2_i686.whl", hash = "sha256:aa6b3d4f1c0d3f82930f4cbd7fe46d905a4a9205a7c13279789c1263faf06dba", size = 1195731, upload-time = "2025-08-20T11:55:27.915Z" },
- { url = "https://files.pythonhosted.org/packages/15/f5/ca454f2f6a2c840394b6f162fff2801450803f4ff56c7af8ce37640b8a2a/ujson-5.11.0-cp311-cp311-musllinux_1_2_x86_64.whl", hash = "sha256:4843f3ab4fe1cc596bb7e02228ef4c25d35b4bb0809d6a260852a4bfcab37ba3", size = 1088710, upload-time = "2025-08-20T11:55:29.426Z" },
- { url = "https://files.pythonhosted.org/packages/fe/d3/9ba310e07969bc9906eb7548731e33a0f448b122ad9705fed699c9b29345/ujson-5.11.0-cp311-cp311-win32.whl", hash = "sha256:e979fbc469a7f77f04ec2f4e853ba00c441bf2b06720aa259f0f720561335e34", size = 39648, upload-time = "2025-08-20T11:55:31.194Z" },
- { url = "https://files.pythonhosted.org/packages/57/f7/da05b4a8819f1360be9e71fb20182f0bb3ec611a36c3f213f4d20709e099/ujson-5.11.0-cp311-cp311-win_amd64.whl", hash = "sha256:683f57f0dd3acdd7d9aff1de0528d603aafcb0e6d126e3dc7ce8b020a28f5d01", size = 43717, upload-time = "2025-08-20T11:55:32.241Z" },
- { url = "https://files.pythonhosted.org/packages/9a/cc/f3f9ac0f24f00a623a48d97dc3814df5c2dc368cfb00031aa4141527a24b/ujson-5.11.0-cp311-cp311-win_arm64.whl", hash = "sha256:7855ccea3f8dad5e66d8445d754fc1cf80265a4272b5f8059ebc7ec29b8d0835", size = 38402, upload-time = "2025-08-20T11:55:33.641Z" },
- { url = "https://files.pythonhosted.org/packages/b9/ef/a9cb1fce38f699123ff012161599fb9f2ff3f8d482b4b18c43a2dc35073f/ujson-5.11.0-cp312-cp312-macosx_10_13_x86_64.whl", hash = "sha256:7895f0d2d53bd6aea11743bd56e3cb82d729980636cd0ed9b89418bf66591702", size = 55434, upload-time = "2025-08-20T11:55:34.987Z" },
- { url = "https://files.pythonhosted.org/packages/b1/05/dba51a00eb30bd947791b173766cbed3492269c150a7771d2750000c965f/ujson-5.11.0-cp312-cp312-macosx_11_0_arm64.whl", hash = "sha256:12b5e7e22a1fe01058000d1b317d3b65cc3daf61bd2ea7a2b76721fe160fa74d", size = 53190, upload-time = "2025-08-20T11:55:36.384Z" },
- { url = "https://files.pythonhosted.org/packages/03/3c/fd11a224f73fbffa299fb9644e425f38b38b30231f7923a088dd513aabb4/ujson-5.11.0-cp312-cp312-manylinux_2_24_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:0180a480a7d099082501cad1fe85252e4d4bf926b40960fb3d9e87a3a6fbbc80", size = 57600, upload-time = "2025-08-20T11:55:37.692Z" },
- { url = "https://files.pythonhosted.org/packages/55/b9/405103cae24899df688a3431c776e00528bd4799e7d68820e7ebcf824f92/ujson-5.11.0-cp312-cp312-manylinux_2_24_i686.manylinux_2_28_i686.whl", hash = "sha256:fa79fdb47701942c2132a9dd2297a1a85941d966d8c87bfd9e29b0cf423f26cc", size = 59791, upload-time = "2025-08-20T11:55:38.877Z" },
- { url = "https://files.pythonhosted.org/packages/17/7b/2dcbc2bbfdbf68f2368fb21ab0f6735e872290bb604c75f6e06b81edcb3f/ujson-5.11.0-cp312-cp312-manylinux_2_24_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:8254e858437c00f17cb72e7a644fc42dad0ebb21ea981b71df6e84b1072aaa7c", size = 57356, upload-time = "2025-08-20T11:55:40.036Z" },
- { url = "https://files.pythonhosted.org/packages/d1/71/fea2ca18986a366c750767b694430d5ded6b20b6985fddca72f74af38a4c/ujson-5.11.0-cp312-cp312-musllinux_1_2_aarch64.whl", hash = "sha256:1aa8a2ab482f09f6c10fba37112af5f957689a79ea598399c85009f2f29898b5", size = 1036313, upload-time = "2025-08-20T11:55:41.408Z" },
- { url = "https://files.pythonhosted.org/packages/a3/bb/d4220bd7532eac6288d8115db51710fa2d7d271250797b0bfba9f1e755af/ujson-5.11.0-cp312-cp312-musllinux_1_2_i686.whl", hash = "sha256:a638425d3c6eed0318df663df44480f4a40dc87cc7c6da44d221418312f6413b", size = 1195782, upload-time = "2025-08-20T11:55:43.357Z" },
- { url = "https://files.pythonhosted.org/packages/80/47/226e540aa38878ce1194454385701d82df538ccb5ff8db2cf1641dde849a/ujson-5.11.0-cp312-cp312-musllinux_1_2_x86_64.whl", hash = "sha256:7e3cff632c1d78023b15f7e3a81c3745cd3f94c044d1e8fa8efbd6b161997bbc", size = 1088817, upload-time = "2025-08-20T11:55:45.262Z" },
- { url = "https://files.pythonhosted.org/packages/7e/81/546042f0b23c9040d61d46ea5ca76f0cc5e0d399180ddfb2ae976ebff5b5/ujson-5.11.0-cp312-cp312-win32.whl", hash = "sha256:be6b0eaf92cae8cdee4d4c9e074bde43ef1c590ed5ba037ea26c9632fb479c88", size = 39757, upload-time = "2025-08-20T11:55:46.522Z" },
- { url = "https://files.pythonhosted.org/packages/44/1b/27c05dc8c9728f44875d74b5bfa948ce91f6c33349232619279f35c6e817/ujson-5.11.0-cp312-cp312-win_amd64.whl", hash = "sha256:b7b136cc6abc7619124fd897ef75f8e63105298b5ca9bdf43ebd0e1fa0ee105f", size = 43859, upload-time = "2025-08-20T11:55:47.987Z" },
- { url = "https://files.pythonhosted.org/packages/22/2d/37b6557c97c3409c202c838aa9c960ca3896843b4295c4b7bb2bbd260664/ujson-5.11.0-cp312-cp312-win_arm64.whl", hash = "sha256:6cd2df62f24c506a0ba322d5e4fe4466d47a9467b57e881ee15a31f7ecf68ff6", size = 38361, upload-time = "2025-08-20T11:55:49.122Z" },
- { url = "https://files.pythonhosted.org/packages/1c/ec/2de9dd371d52c377abc05d2b725645326c4562fc87296a8907c7bcdf2db7/ujson-5.11.0-cp313-cp313-macosx_10_13_x86_64.whl", hash = "sha256:109f59885041b14ee9569bf0bb3f98579c3fa0652317b355669939e5fc5ede53", size = 55435, upload-time = "2025-08-20T11:55:50.243Z" },
- { url = "https://files.pythonhosted.org/packages/5b/a4/f611f816eac3a581d8a4372f6967c3ed41eddbae4008d1d77f223f1a4e0a/ujson-5.11.0-cp313-cp313-macosx_11_0_arm64.whl", hash = "sha256:a31c6b8004438e8c20fc55ac1c0e07dad42941db24176fe9acf2815971f8e752", size = 53193, upload-time = "2025-08-20T11:55:51.373Z" },
- { url = "https://files.pythonhosted.org/packages/e9/c5/c161940967184de96f5cbbbcce45b562a4bf851d60f4c677704b1770136d/ujson-5.11.0-cp313-cp313-manylinux_2_24_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:78c684fb21255b9b90320ba7e199780f653e03f6c2528663768965f4126a5b50", size = 57603, upload-time = "2025-08-20T11:55:52.583Z" },
- { url = "https://files.pythonhosted.org/packages/2b/d6/c7b2444238f5b2e2d0e3dab300b9ddc3606e4b1f0e4bed5a48157cebc792/ujson-5.11.0-cp313-cp313-manylinux_2_24_i686.manylinux_2_28_i686.whl", hash = "sha256:4c9f5d6a27d035dd90a146f7761c2272cf7103de5127c9ab9c4cd39ea61e878a", size = 59794, upload-time = "2025-08-20T11:55:53.69Z" },
- { url = "https://files.pythonhosted.org/packages/fe/a3/292551f936d3d02d9af148f53e1bc04306b00a7cf1fcbb86fa0d1c887242/ujson-5.11.0-cp313-cp313-manylinux_2_24_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:837da4d27fed5fdc1b630bd18f519744b23a0b5ada1bbde1a36ba463f2900c03", size = 57363, upload-time = "2025-08-20T11:55:54.843Z" },
- { url = "https://files.pythonhosted.org/packages/90/a6/82cfa70448831b1a9e73f882225980b5c689bf539ec6400b31656a60ea46/ujson-5.11.0-cp313-cp313-musllinux_1_2_aarch64.whl", hash = "sha256:787aff4a84da301b7f3bac09bc696e2e5670df829c6f8ecf39916b4e7e24e701", size = 1036311, upload-time = "2025-08-20T11:55:56.197Z" },
- { url = "https://files.pythonhosted.org/packages/84/5c/96e2266be50f21e9b27acaee8ca8f23ea0b85cb998c33d4f53147687839b/ujson-5.11.0-cp313-cp313-musllinux_1_2_i686.whl", hash = "sha256:6dd703c3e86dc6f7044c5ac0b3ae079ed96bf297974598116aa5fb7f655c3a60", size = 1195783, upload-time = "2025-08-20T11:55:58.081Z" },
- { url = "https://files.pythonhosted.org/packages/8d/20/78abe3d808cf3bb3e76f71fca46cd208317bf461c905d79f0d26b9df20f1/ujson-5.11.0-cp313-cp313-musllinux_1_2_x86_64.whl", hash = "sha256:3772e4fe6b0c1e025ba3c50841a0ca4786825a4894c8411bf8d3afe3a8061328", size = 1088822, upload-time = "2025-08-20T11:55:59.469Z" },
- { url = "https://files.pythonhosted.org/packages/d8/50/8856e24bec5e2fc7f775d867aeb7a3f137359356200ac44658f1f2c834b2/ujson-5.11.0-cp313-cp313-win32.whl", hash = "sha256:8fa2af7c1459204b7a42e98263b069bd535ea0cd978b4d6982f35af5a04a4241", size = 39753, upload-time = "2025-08-20T11:56:01.345Z" },
- { url = "https://files.pythonhosted.org/packages/5b/d8/1baee0f4179a4d0f5ce086832147b6cc9b7731c24ca08e14a3fdb8d39c32/ujson-5.11.0-cp313-cp313-win_amd64.whl", hash = "sha256:34032aeca4510a7c7102bd5933f59a37f63891f30a0706fb46487ab6f0edf8f0", size = 43866, upload-time = "2025-08-20T11:56:02.552Z" },
- { url = "https://files.pythonhosted.org/packages/a9/8c/6d85ef5be82c6d66adced3ec5ef23353ed710a11f70b0b6a836878396334/ujson-5.11.0-cp313-cp313-win_arm64.whl", hash = "sha256:ce076f2df2e1aa62b685086fbad67f2b1d3048369664b4cdccc50707325401f9", size = 38363, upload-time = "2025-08-20T11:56:03.688Z" },
- { url = "https://files.pythonhosted.org/packages/28/08/4518146f4984d112764b1dfa6fb7bad691c44a401adadaa5e23ccd930053/ujson-5.11.0-cp314-cp314-macosx_10_13_x86_64.whl", hash = "sha256:65724738c73645db88f70ba1f2e6fb678f913281804d5da2fd02c8c5839af302", size = 55462, upload-time = "2025-08-20T11:56:04.873Z" },
- { url = "https://files.pythonhosted.org/packages/29/37/2107b9a62168867a692654d8766b81bd2fd1e1ba13e2ec90555861e02b0c/ujson-5.11.0-cp314-cp314-macosx_11_0_arm64.whl", hash = "sha256:29113c003ca33ab71b1b480bde952fbab2a0b6b03a4ee4c3d71687cdcbd1a29d", size = 53246, upload-time = "2025-08-20T11:56:06.054Z" },
- { url = "https://files.pythonhosted.org/packages/9b/f8/25583c70f83788edbe3ca62ce6c1b79eff465d78dec5eb2b2b56b3e98b33/ujson-5.11.0-cp314-cp314-manylinux_2_24_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:c44c703842024d796b4c78542a6fcd5c3cb948b9fc2a73ee65b9c86a22ee3638", size = 57631, upload-time = "2025-08-20T11:56:07.374Z" },
- { url = "https://files.pythonhosted.org/packages/ed/ca/19b3a632933a09d696f10dc1b0dfa1d692e65ad507d12340116ce4f67967/ujson-5.11.0-cp314-cp314-manylinux_2_24_i686.manylinux_2_28_i686.whl", hash = "sha256:e750c436fb90edf85585f5c62a35b35082502383840962c6983403d1bd96a02c", size = 59877, upload-time = "2025-08-20T11:56:08.534Z" },
- { url = "https://files.pythonhosted.org/packages/55/7a/4572af5324ad4b2bfdd2321e898a527050290147b4ea337a79a0e4e87ec7/ujson-5.11.0-cp314-cp314-manylinux_2_24_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:f278b31a7c52eb0947b2db55a5133fbc46b6f0ef49972cd1a80843b72e135aba", size = 57363, upload-time = "2025-08-20T11:56:09.758Z" },
- { url = "https://files.pythonhosted.org/packages/7b/71/a2b8c19cf4e1efe53cf439cdf7198ac60ae15471d2f1040b490c1f0f831f/ujson-5.11.0-cp314-cp314-musllinux_1_2_aarch64.whl", hash = "sha256:ab2cb8351d976e788669c8281465d44d4e94413718af497b4e7342d7b2f78018", size = 1036394, upload-time = "2025-08-20T11:56:11.168Z" },
- { url = "https://files.pythonhosted.org/packages/7a/3e/7b98668cba3bb3735929c31b999b374ebc02c19dfa98dfebaeeb5c8597ca/ujson-5.11.0-cp314-cp314-musllinux_1_2_i686.whl", hash = "sha256:090b4d11b380ae25453100b722d0609d5051ffe98f80ec52853ccf8249dfd840", size = 1195837, upload-time = "2025-08-20T11:56:12.6Z" },
- { url = "https://files.pythonhosted.org/packages/a1/ea/8870f208c20b43571a5c409ebb2fe9b9dba5f494e9e60f9314ac01ea8f78/ujson-5.11.0-cp314-cp314-musllinux_1_2_x86_64.whl", hash = "sha256:80017e870d882d5517d28995b62e4e518a894f932f1e242cbc802a2fd64d365c", size = 1088837, upload-time = "2025-08-20T11:56:14.15Z" },
- { url = "https://files.pythonhosted.org/packages/63/b6/c0e6607e37fa47929920a685a968c6b990a802dec65e9c5181e97845985d/ujson-5.11.0-cp314-cp314-win32.whl", hash = "sha256:1d663b96eb34c93392e9caae19c099ec4133ba21654b081956613327f0e973ac", size = 41022, upload-time = "2025-08-20T11:56:15.509Z" },
- { url = "https://files.pythonhosted.org/packages/4e/56/f4fe86b4c9000affd63e9219e59b222dc48b01c534533093e798bf617a7e/ujson-5.11.0-cp314-cp314-win_amd64.whl", hash = "sha256:849e65b696f0d242833f1df4182096cedc50d414215d1371fca85c541fbff629", size = 45111, upload-time = "2025-08-20T11:56:16.597Z" },
- { url = "https://files.pythonhosted.org/packages/0a/f3/669437f0280308db4783b12a6d88c00730b394327d8334cc7a32ef218e64/ujson-5.11.0-cp314-cp314-win_arm64.whl", hash = "sha256:e73df8648c9470af2b6a6bf5250d4744ad2cf3d774dcf8c6e31f018bdd04d764", size = 39682, upload-time = "2025-08-20T11:56:17.763Z" },
- { url = "https://files.pythonhosted.org/packages/6e/cd/e9809b064a89fe5c4184649adeb13c1b98652db3f8518980b04227358574/ujson-5.11.0-cp314-cp314t-macosx_10_13_x86_64.whl", hash = "sha256:de6e88f62796372fba1de973c11138f197d3e0e1d80bcb2b8aae1e826096d433", size = 55759, upload-time = "2025-08-20T11:56:18.882Z" },
- { url = "https://files.pythonhosted.org/packages/1b/be/ae26a6321179ebbb3a2e2685b9007c71bcda41ad7a77bbbe164005e956fc/ujson-5.11.0-cp314-cp314t-macosx_11_0_arm64.whl", hash = "sha256:49e56ef8066f11b80d620985ae36869a3ff7e4b74c3b6129182ec5d1df0255f3", size = 53634, upload-time = "2025-08-20T11:56:20.012Z" },
- { url = "https://files.pythonhosted.org/packages/ae/e9/fb4a220ee6939db099f4cfeeae796ecb91e7584ad4d445d4ca7f994a9135/ujson-5.11.0-cp314-cp314t-manylinux_2_24_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:1a325fd2c3a056cf6c8e023f74a0c478dd282a93141356ae7f16d5309f5ff823", size = 58547, upload-time = "2025-08-20T11:56:21.175Z" },
- { url = "https://files.pythonhosted.org/packages/bd/f8/fc4b952b8f5fea09ea3397a0bd0ad019e474b204cabcb947cead5d4d1ffc/ujson-5.11.0-cp314-cp314t-manylinux_2_24_i686.manylinux_2_28_i686.whl", hash = "sha256:a0af6574fc1d9d53f4ff371f58c96673e6d988ed2b5bf666a6143c782fa007e9", size = 60489, upload-time = "2025-08-20T11:56:22.342Z" },
- { url = "https://files.pythonhosted.org/packages/2e/e5/af5491dfda4f8b77e24cf3da68ee0d1552f99a13e5c622f4cef1380925c3/ujson-5.11.0-cp314-cp314t-manylinux_2_24_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:10f29e71ecf4ecd93a6610bd8efa8e7b6467454a363c3d6416db65de883eb076", size = 58035, upload-time = "2025-08-20T11:56:23.92Z" },
- { url = "https://files.pythonhosted.org/packages/c4/09/0945349dd41f25cc8c38d78ace49f14c5052c5bbb7257d2f466fa7bdb533/ujson-5.11.0-cp314-cp314t-musllinux_1_2_aarch64.whl", hash = "sha256:1a0a9b76a89827a592656fe12e000cf4f12da9692f51a841a4a07aa4c7ecc41c", size = 1037212, upload-time = "2025-08-20T11:56:25.274Z" },
- { url = "https://files.pythonhosted.org/packages/49/44/8e04496acb3d5a1cbee3a54828d9652f67a37523efa3d3b18a347339680a/ujson-5.11.0-cp314-cp314t-musllinux_1_2_i686.whl", hash = "sha256:b16930f6a0753cdc7d637b33b4e8f10d5e351e1fb83872ba6375f1e87be39746", size = 1196500, upload-time = "2025-08-20T11:56:27.517Z" },
- { url = "https://files.pythonhosted.org/packages/64/ae/4bc825860d679a0f208a19af2f39206dfd804ace2403330fdc3170334a2f/ujson-5.11.0-cp314-cp314t-musllinux_1_2_x86_64.whl", hash = "sha256:04c41afc195fd477a59db3a84d5b83a871bd648ef371cf8c6f43072d89144eef", size = 1089487, upload-time = "2025-08-20T11:56:29.07Z" },
- { url = "https://files.pythonhosted.org/packages/30/ed/5a057199fb0a5deabe0957073a1c1c1c02a3e99476cd03daee98ea21fa57/ujson-5.11.0-cp314-cp314t-win32.whl", hash = "sha256:aa6d7a5e09217ff93234e050e3e380da62b084e26b9f2e277d2606406a2fc2e5", size = 41859, upload-time = "2025-08-20T11:56:30.495Z" },
- { url = "https://files.pythonhosted.org/packages/aa/03/b19c6176bdf1dc13ed84b886e99677a52764861b6cc023d5e7b6ebda249d/ujson-5.11.0-cp314-cp314t-win_amd64.whl", hash = "sha256:48055e1061c1bb1f79e75b4ac39e821f3f35a9b82de17fce92c3140149009bec", size = 46183, upload-time = "2025-08-20T11:56:31.574Z" },
- { url = "https://files.pythonhosted.org/packages/5d/ca/a0413a3874b2dc1708b8796ca895bf363292f9c70b2e8ca482b7dbc0259d/ujson-5.11.0-cp314-cp314t-win_arm64.whl", hash = "sha256:1194b943e951092db611011cb8dbdb6cf94a3b816ed07906e14d3bc6ce0e90ab", size = 40264, upload-time = "2025-08-20T11:56:32.773Z" },
- { url = "https://files.pythonhosted.org/packages/50/17/30275aa2933430d8c0c4ead951cc4fdb922f575a349aa0b48a6f35449e97/ujson-5.11.0-pp311-pypy311_pp73-macosx_10_15_x86_64.whl", hash = "sha256:abae0fb58cc820092a0e9e8ba0051ac4583958495bfa5262a12f628249e3b362", size = 51206, upload-time = "2025-08-20T11:56:48.797Z" },
- { url = "https://files.pythonhosted.org/packages/c3/15/42b3924258eac2551f8f33fa4e35da20a06a53857ccf3d4deb5e5d7c0b6c/ujson-5.11.0-pp311-pypy311_pp73-macosx_11_0_arm64.whl", hash = "sha256:fac6c0649d6b7c3682a0a6e18d3de6857977378dce8d419f57a0b20e3d775b39", size = 48907, upload-time = "2025-08-20T11:56:50.136Z" },
- { url = "https://files.pythonhosted.org/packages/94/7e/0519ff7955aba581d1fe1fb1ca0e452471250455d182f686db5ac9e46119/ujson-5.11.0-pp311-pypy311_pp73-manylinux_2_24_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:4b42c115c7c6012506e8168315150d1e3f76e7ba0f4f95616f4ee599a1372bbc", size = 50319, upload-time = "2025-08-20T11:56:51.63Z" },
- { url = "https://files.pythonhosted.org/packages/74/cf/209d90506b7d6c5873f82c5a226d7aad1a1da153364e9ebf61eff0740c33/ujson-5.11.0-pp311-pypy311_pp73-manylinux_2_24_i686.manylinux_2_28_i686.whl", hash = "sha256:86baf341d90b566d61a394869ce77188cc8668f76d7bb2c311d77a00f4bdf844", size = 56584, upload-time = "2025-08-20T11:56:52.89Z" },
- { url = "https://files.pythonhosted.org/packages/e9/97/bd939bb76943cb0e1d2b692d7e68629f51c711ef60425fa5bb6968037ecd/ujson-5.11.0-pp311-pypy311_pp73-manylinux_2_24_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:4598bf3965fc1a936bd84034312bcbe00ba87880ef1ee33e33c1e88f2c398b49", size = 51588, upload-time = "2025-08-20T11:56:54.054Z" },
- { url = "https://files.pythonhosted.org/packages/52/5b/8c5e33228f7f83f05719964db59f3f9f276d272dc43752fa3bbf0df53e7b/ujson-5.11.0-pp311-pypy311_pp73-win_amd64.whl", hash = "sha256:416389ec19ef5f2013592f791486bef712ebce0cd59299bf9df1ba40bb2f6e04", size = 43835, upload-time = "2025-08-20T11:56:55.237Z" },
+version = "5.12.0"
+source = { registry = "https://pypi.org/simple" }
+sdist = { url = "https://files.pythonhosted.org/packages/cb/3e/c35530c5ffc25b71c59ae0cd7b8f99df37313daa162ce1e2f7925f7c2877/ujson-5.12.0.tar.gz", hash = "sha256:14b2e1eb528d77bc0f4c5bd1a7ebc05e02b5b41beefb7e8567c9675b8b13bcf4", size = 7158451, upload-time = "2026-03-11T22:19:30.397Z" }
+wheels = [
+ { url = "https://files.pythonhosted.org/packages/db/ee/45c7c1f9268b0fecdd68f9ada490bc09632b74f5f90a9be759e51a746ddc/ujson-5.12.0-cp310-cp310-macosx_10_9_x86_64.whl", hash = "sha256:38051f36423f084b909aaadb3b41c9c6a2958e86956ba21a8489636911e87504", size = 56145, upload-time = "2026-03-11T22:17:49.409Z" },
+ { url = "https://files.pythonhosted.org/packages/6d/dc/ed181dbfb2beee598e91280c6903ba71e10362b051716317e2d3664614bb/ujson-5.12.0-cp310-cp310-macosx_11_0_arm64.whl", hash = "sha256:457fabc2700a8e6ddb85bc5a1d30d3345fe0d3ec3ee8161a4e032ec585801dfa", size = 53839, upload-time = "2026-03-11T22:17:50.973Z" },
+ { url = "https://files.pythonhosted.org/packages/e4/d8/eb9ef42c660f431deeedc2e1b09c4ba29aa22818a439ddda7da6ae23ddfa/ujson-5.12.0-cp310-cp310-manylinux_2_24_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:57930ac9519099b852e190d2c04b1fb5d97ea128db33bce77ed874eccb4c7f09", size = 57844, upload-time = "2026-03-11T22:17:53.029Z" },
+ { url = "https://files.pythonhosted.org/packages/68/37/0b586d079d3f2a5be5aa58ab5c423cbb4fae2ee4e65369c87aa74ac7e113/ujson-5.12.0-cp310-cp310-manylinux_2_24_i686.manylinux_2_28_i686.whl", hash = "sha256:9b3b86ec3e818f3dd3e13a9de628e88a9990f4af68ecb0b12dd3de81227f0a26", size = 59923, upload-time = "2026-03-11T22:17:54.332Z" },
+ { url = "https://files.pythonhosted.org/packages/28/ed/6a4b69eb397502767f438b5a2b4c066dccc9e3b263115f5ee07510250fc7/ujson-5.12.0-cp310-cp310-manylinux_2_24_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:460e76a4daff214ae33ab959494962c93918cb44714ea3e3f748b14aa37f8a87", size = 57427, upload-time = "2026-03-11T22:17:55.317Z" },
+ { url = "https://files.pythonhosted.org/packages/bb/4b/ae118440a72e85e68ee8dd26cfc47ea7857954a3341833cde9da7dc40ca3/ujson-5.12.0-cp310-cp310-musllinux_1_2_aarch64.whl", hash = "sha256:e584d0cdd37cac355aca52ed788d1a2d939d6837e2870d3b70e585db24025a50", size = 1037301, upload-time = "2026-03-11T22:17:56.427Z" },
+ { url = "https://files.pythonhosted.org/packages/c2/76/834caa7905f65d3a695e4f5ff8d5d4a98508e396a9e8ab0739ab4fe2d422/ujson-5.12.0-cp310-cp310-musllinux_1_2_i686.whl", hash = "sha256:0fe9128e75c6aa6e9ae06c1408d6edd9179a2fef0fe6d9cda3166b887eba521d", size = 1196664, upload-time = "2026-03-11T22:17:58.061Z" },
+ { url = "https://files.pythonhosted.org/packages/f2/33/1f3c1543c1d3f18c54bb3f8c1e74314fd6ad3c1aa375f01433e89a86bfa6/ujson-5.12.0-cp310-cp310-musllinux_1_2_x86_64.whl", hash = "sha256:3ed5cb149892141b1e77ef312924a327f2cc718b34247dae346ed66329e1b8be", size = 1089668, upload-time = "2026-03-11T22:17:59.617Z" },
+ { url = "https://files.pythonhosted.org/packages/db/52/07d9da456a78296f61893b9d2bbfb2512f4233394748aae80b8d08c7d96e/ujson-5.12.0-cp310-cp310-win32.whl", hash = "sha256:973b7d7145b1ac553a7466a64afa8b31ec2693d7c7fff6a755059e0a2885dfd2", size = 39644, upload-time = "2026-03-11T22:18:01.212Z" },
+ { url = "https://files.pythonhosted.org/packages/ec/e5/c1de3041672fa1ab97aae0f0b9f4e30a9b15d4104c734d5627779206c878/ujson-5.12.0-cp310-cp310-win_amd64.whl", hash = "sha256:1d072a403d82aef8090c6d4f728e3a727dfdba1ad3b7fa3a052c3ecbd37e73cb", size = 43875, upload-time = "2026-03-11T22:18:02.268Z" },
+ { url = "https://files.pythonhosted.org/packages/8b/49/714a9240d9e6bd86c9684a72f100a0005459165fb2b0f6bf1a1156be0b9f/ujson-5.12.0-cp310-cp310-win_arm64.whl", hash = "sha256:55ede2a7a051b3b7e71a394978a098d71b3783e6b904702ff45483fad434ae2d", size = 38563, upload-time = "2026-03-11T22:18:03.546Z" },
+ { url = "https://files.pythonhosted.org/packages/10/22/fd22e2f6766bae934d3050517ca47d463016bd8688508d1ecc1baa18a7ad/ujson-5.12.0-cp311-cp311-macosx_10_9_x86_64.whl", hash = "sha256:58a11cb49482f1a095a2bd9a1d81dd7c8fb5d2357f959ece85db4e46a825fd00", size = 56139, upload-time = "2026-03-11T22:18:04.591Z" },
+ { url = "https://files.pythonhosted.org/packages/c6/fd/6839adff4fc0164cbcecafa2857ba08a6eaeedd7e098d6713cb899a91383/ujson-5.12.0-cp311-cp311-macosx_11_0_arm64.whl", hash = "sha256:9b3cf13facf6f77c283af0e1713e5e8c47a0fe295af81326cb3cb4380212e797", size = 53836, upload-time = "2026-03-11T22:18:05.662Z" },
+ { url = "https://files.pythonhosted.org/packages/f9/b0/0c19faac62d68ceeffa83a08dc3d71b8462cf5064d0e7e0b15ba19898dad/ujson-5.12.0-cp311-cp311-manylinux_2_24_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:fb94245a715b4d6e24689de12772b85329a1f9946cbf6187923a64ecdea39e65", size = 57851, upload-time = "2026-03-11T22:18:06.744Z" },
+ { url = "https://files.pythonhosted.org/packages/04/f6/e7fd283788de73b86e99e08256726bb385923249c21dcd306e59d532a1a1/ujson-5.12.0-cp311-cp311-manylinux_2_24_i686.manylinux_2_28_i686.whl", hash = "sha256:0fe6b8b8968e11dd9b2348bd508f0f57cf49ab3512064b36bc4117328218718e", size = 59906, upload-time = "2026-03-11T22:18:07.791Z" },
+ { url = "https://files.pythonhosted.org/packages/d7/3a/b100735a2b43ee6e8fe4c883768e362f53576f964d4ea841991060aeaf35/ujson-5.12.0-cp311-cp311-manylinux_2_24_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:89e302abd3749f6d6699691747969a5d85f7c73081d5ed7e2624c7bd9721a2ab", size = 57409, upload-time = "2026-03-11T22:18:08.79Z" },
+ { url = "https://files.pythonhosted.org/packages/5c/fa/f97cc20c99ca304662191b883ae13ae02912ca7244710016ba0cb8a5be34/ujson-5.12.0-cp311-cp311-musllinux_1_2_aarch64.whl", hash = "sha256:0727363b05ab05ee737a28f6200dc4078bce6b0508e10bd8aab507995a15df61", size = 1037339, upload-time = "2026-03-11T22:18:10.424Z" },
+ { url = "https://files.pythonhosted.org/packages/10/7a/53ddeda0ffe1420db2f9999897b3cbb920fbcff1849d1f22b196d0f34785/ujson-5.12.0-cp311-cp311-musllinux_1_2_i686.whl", hash = "sha256:b62cb9a7501e1f5c9ffe190485501349c33e8862dde4377df774e40b8166871f", size = 1196625, upload-time = "2026-03-11T22:18:11.82Z" },
+ { url = "https://files.pythonhosted.org/packages/0d/1a/4c64a6bef522e9baf195dd5be151bc815cd4896c50c6e2489599edcda85f/ujson-5.12.0-cp311-cp311-musllinux_1_2_x86_64.whl", hash = "sha256:a6ec5bf6bc361f2f0f9644907a36ce527715b488988a8df534120e5c34eeda94", size = 1089669, upload-time = "2026-03-11T22:18:13.343Z" },
+ { url = "https://files.pythonhosted.org/packages/18/11/8ccb109f5777ec0d9fb826695a9e2ac36ae94c1949fc8b1e4d23a5bd067a/ujson-5.12.0-cp311-cp311-win32.whl", hash = "sha256:006428d3813b87477d72d306c40c09f898a41b968e57b15a7d88454ecc42a3fb", size = 39648, upload-time = "2026-03-11T22:18:14.785Z" },
+ { url = "https://files.pythonhosted.org/packages/6f/e3/87fc4c27b20d5125cff7ce52d17ea7698b22b74426da0df238e3efcb0cf2/ujson-5.12.0-cp311-cp311-win_amd64.whl", hash = "sha256:40aa43a7a3a8d2f05e79900858053d697a88a605e3887be178b43acbcd781161", size = 43876, upload-time = "2026-03-11T22:18:15.768Z" },
+ { url = "https://files.pythonhosted.org/packages/9e/21/324f0548a8c8c48e3e222eaed15fb6d48c796593002b206b4a28a89e445f/ujson-5.12.0-cp311-cp311-win_arm64.whl", hash = "sha256:561f89cc82deeae82e37d4a4764184926fb432f740a9691563a391b13f7339a4", size = 38553, upload-time = "2026-03-11T22:18:17.251Z" },
+ { url = "https://files.pythonhosted.org/packages/84/f6/ac763d2108d28f3a40bb3ae7d2fafab52ca31b36c2908a4ad02cd3ceba2a/ujson-5.12.0-cp312-cp312-macosx_10_13_x86_64.whl", hash = "sha256:09b4beff9cc91d445d5818632907b85fb06943b61cb346919ce202668bf6794a", size = 56326, upload-time = "2026-03-11T22:18:18.467Z" },
+ { url = "https://files.pythonhosted.org/packages/25/46/d0b3af64dcdc549f9996521c8be6d860ac843a18a190ffc8affeb7259687/ujson-5.12.0-cp312-cp312-macosx_11_0_arm64.whl", hash = "sha256:ca0c7ce828bb76ab78b3991904b477c2fd0f711d7815c252d1ef28ff9450b052", size = 53910, upload-time = "2026-03-11T22:18:19.502Z" },
+ { url = "https://files.pythonhosted.org/packages/9a/10/853c723bcabc3e9825a079019055fc99e71b85c6bae600607a2b9d31d18d/ujson-5.12.0-cp312-cp312-manylinux_2_24_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:a2d79c6635ccffcbfc1d5c045874ba36b594589be81d50d43472570bb8de9c57", size = 57754, upload-time = "2026-03-11T22:18:20.874Z" },
+ { url = "https://files.pythonhosted.org/packages/f9/c6/6e024830d988f521f144ead641981c1f7a82c17ad1927c22de3242565f5c/ujson-5.12.0-cp312-cp312-manylinux_2_24_i686.manylinux_2_28_i686.whl", hash = "sha256:7e07f6f644d2c44d53b7a320a084eef98063651912c1b9449b5f45fcbdc6ccd2", size = 59936, upload-time = "2026-03-11T22:18:21.924Z" },
+ { url = "https://files.pythonhosted.org/packages/34/c9/c5f236af5abe06b720b40b88819d00d10182d2247b1664e487b3ed9229cf/ujson-5.12.0-cp312-cp312-manylinux_2_24_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:085b6ce182cdd6657481c7c4003a417e0655c4f6e58b76f26ee18f0ae21db827", size = 57463, upload-time = "2026-03-11T22:18:22.924Z" },
+ { url = "https://files.pythonhosted.org/packages/ae/04/41342d9ef68e793a87d84e4531a150c2b682f3bcedfe59a7a5e3f73e9213/ujson-5.12.0-cp312-cp312-musllinux_1_2_aarch64.whl", hash = "sha256:16b4fe9c97dc605f5e1887a9e1224287291e35c56cbc379f8aa44b6b7bcfe2bb", size = 1037239, upload-time = "2026-03-11T22:18:24.04Z" },
+ { url = "https://files.pythonhosted.org/packages/d4/81/dc2b7617d5812670d4ff4a42f6dd77926430ee52df0dedb2aec7990b2034/ujson-5.12.0-cp312-cp312-musllinux_1_2_i686.whl", hash = "sha256:0d2e8db5ade3736a163906154ca686203acc7d1d30736cbf577c730d13653d84", size = 1196713, upload-time = "2026-03-11T22:18:25.391Z" },
+ { url = "https://files.pythonhosted.org/packages/b6/9c/80acff0504f92459ed69e80a176286e32ca0147ac6a8252cd0659aad3227/ujson-5.12.0-cp312-cp312-musllinux_1_2_x86_64.whl", hash = "sha256:93bc91fdadcf046da37a214eaa714574e7e9b1913568e93bb09527b2ceb7f759", size = 1089742, upload-time = "2026-03-11T22:18:26.738Z" },
+ { url = "https://files.pythonhosted.org/packages/e3/f0/123ffaac17e45ef2b915e3e3303f8f4ea78bb8d42afad828844e08622b1e/ujson-5.12.0-cp312-cp312-win32.whl", hash = "sha256:2a248750abce1c76fbd11b2e1d88b95401e72819295c3b851ec73399d6849b3d", size = 39773, upload-time = "2026-03-11T22:18:28.244Z" },
+ { url = "https://files.pythonhosted.org/packages/b5/20/f3bd2b069c242c2b22a69e033bfe224d1d15d3649e6cd7cc7085bb1412ff/ujson-5.12.0-cp312-cp312-win_amd64.whl", hash = "sha256:1b5c6ceb65fecd28a1d20d1eba9dbfa992612b86594e4b6d47bb580d2dd6bcb3", size = 44040, upload-time = "2026-03-11T22:18:29.236Z" },
+ { url = "https://files.pythonhosted.org/packages/f0/a7/01b5a0bcded14cd2522b218f2edc3533b0fcbccdea01f3e14a2b699071aa/ujson-5.12.0-cp312-cp312-win_arm64.whl", hash = "sha256:9a5fcbe7b949f2e95c47ea8a80b410fcdf2da61c98553b45a4ee875580418b68", size = 38526, upload-time = "2026-03-11T22:18:30.551Z" },
+ { url = "https://files.pythonhosted.org/packages/3f/f1/0ef0eeab1db8493e1833c8b440fe32cf7538f7afa6e7f7c7e9f62cef464d/ujson-5.12.0-cp313-cp313-macosx_10_13_x86_64.whl", hash = "sha256:15d416440148f3e56b9b244fdaf8a09fcf5a72e4944b8e119f5bf60417a2bfc8", size = 56331, upload-time = "2026-03-11T22:18:31.539Z" },
+ { url = "https://files.pythonhosted.org/packages/b0/2f/9159f6f399b3f572d20847a2b80d133e3a03c14712b0da4971a36879fb64/ujson-5.12.0-cp313-cp313-macosx_11_0_arm64.whl", hash = "sha256:e0dd3676ea0837cd70ea1879765e9e9f6be063be0436de9b3ea4b775caf83654", size = 53910, upload-time = "2026-03-11T22:18:32.829Z" },
+ { url = "https://files.pythonhosted.org/packages/e5/a9/f96376818d71495d1a4be19a0ab6acf0cc01dd8826553734c3d4dac685b2/ujson-5.12.0-cp313-cp313-manylinux_2_24_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:7bbf05c38debc90d1a195b11340cc85cb43ab3e753dc47558a3a84a38cbc72da", size = 57757, upload-time = "2026-03-11T22:18:33.866Z" },
+ { url = "https://files.pythonhosted.org/packages/98/8d/dd4a151caac6fdcb77f024fbe7f09d465ebf347a628ed6dd581a0a7f6364/ujson-5.12.0-cp313-cp313-manylinux_2_24_i686.manylinux_2_28_i686.whl", hash = "sha256:3c2f947e55d3c7cfe124dd4521ee481516f3007d13c6ad4bf6aeb722e190eb1b", size = 59940, upload-time = "2026-03-11T22:18:35.276Z" },
+ { url = "https://files.pythonhosted.org/packages/c7/17/0d36c2fee0a8d8dc37b011ccd5bbdcfaff8b8ec2bcfc5be998661cdc935b/ujson-5.12.0-cp313-cp313-manylinux_2_24_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:2ea6206043385343aff0b7da65cf73677f6f5e50de8f1c879e557f4298cac36a", size = 57465, upload-time = "2026-03-11T22:18:36.644Z" },
+ { url = "https://files.pythonhosted.org/packages/8c/04/b0ee4a4b643a01ba398441da1e357480595edb37c6c94c508dbe0eb9eb60/ujson-5.12.0-cp313-cp313-musllinux_1_2_aarch64.whl", hash = "sha256:bb349dbba57c76eec25e5917e07f35aabaf0a33b9e67fc13d188002500106487", size = 1037236, upload-time = "2026-03-11T22:18:37.743Z" },
+ { url = "https://files.pythonhosted.org/packages/2d/08/0e7780d0bbb48fe57ded91f550144bcc99c03b5360bf2886dd0dae0ea8f5/ujson-5.12.0-cp313-cp313-musllinux_1_2_i686.whl", hash = "sha256:937794042342006f707837f38d721426b11b0774d327a2a45c0bd389eb750a87", size = 1196717, upload-time = "2026-03-11T22:18:39.101Z" },
+ { url = "https://files.pythonhosted.org/packages/ba/4c/e0e34107715bb4dd2d4dcc1ce244d2f074638837adf38aff85a37506efe4/ujson-5.12.0-cp313-cp313-musllinux_1_2_x86_64.whl", hash = "sha256:6ad57654570464eb1b040b5c353dee442608e06cff9102b8fcb105565a44c9ed", size = 1089748, upload-time = "2026-03-11T22:18:40.473Z" },
+ { url = "https://files.pythonhosted.org/packages/72/43/814f4e2b5374d0d505c254ba4bed43eb25d2d046f19f5fd88555f81a7bd0/ujson-5.12.0-cp313-cp313-win32.whl", hash = "sha256:76bf3e7406cf23a3e1ca6a23fb1fb9ea82f4f6bd226fe226e09146b0194f85dc", size = 39778, upload-time = "2026-03-11T22:18:41.791Z" },
+ { url = "https://files.pythonhosted.org/packages/0f/fe/19310d848ebe93315b6cb171277e4ce29f47ef9d46caabd63ff05d5be548/ujson-5.12.0-cp313-cp313-win_amd64.whl", hash = "sha256:15e555c4caca42411270b2ed2b2ebc7b3a42bb04138cef6c956e1f1d49709fe2", size = 44038, upload-time = "2026-03-11T22:18:43.094Z" },
+ { url = "https://files.pythonhosted.org/packages/3f/e4/7a39103d7634691601a02bd1ca7268fba4da47ed586365e6ee68168f575a/ujson-5.12.0-cp313-cp313-win_arm64.whl", hash = "sha256:bd03472c36fa3a386a6deb887113b9e3fa40efba8203eb4fe786d3c0ccc724f6", size = 38529, upload-time = "2026-03-11T22:18:44.167Z" },
+ { url = "https://files.pythonhosted.org/packages/10/bd/9a8d693254bada62bfea75a507e014afcfdb6b9d047b6f8dd134bfefaf67/ujson-5.12.0-cp314-cp314-macosx_10_15_x86_64.whl", hash = "sha256:85833bca01aa5cae326ac759276dc175c5fa3f7b3733b7d543cf27f2df12d1ef", size = 56499, upload-time = "2026-03-11T22:18:45.431Z" },
+ { url = "https://files.pythonhosted.org/packages/bd/2d/285a83df8176e18dcd675d1a4cff8f7620f003f30903ea43929406e98986/ujson-5.12.0-cp314-cp314-macosx_11_0_arm64.whl", hash = "sha256:d22cad98c2a10bbf6aa083a8980db6ed90d4285a841c4de892890c2b28286ef9", size = 53998, upload-time = "2026-03-11T22:18:47.184Z" },
+ { url = "https://files.pythonhosted.org/packages/bf/8b/e2f09e16dabfa91f6a84555df34a4329fa7621e92ed054d170b9054b9bb2/ujson-5.12.0-cp314-cp314-manylinux_2_24_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:99cc80facad240b0c2fb5a633044420878aac87a8e7c348b9486450cba93f27c", size = 57783, upload-time = "2026-03-11T22:18:48.271Z" },
+ { url = "https://files.pythonhosted.org/packages/68/fb/ba1d06f3658a0c36d0ab3869ec3914f202bad0a9bde92654e41516c7bb13/ujson-5.12.0-cp314-cp314-manylinux_2_24_i686.manylinux_2_28_i686.whl", hash = "sha256:d1831c07bd4dce53c4b666fa846c7eba4b7c414f2e641a4585b7f50b72f502dc", size = 60011, upload-time = "2026-03-11T22:18:49.284Z" },
+ { url = "https://files.pythonhosted.org/packages/64/2b/3e322bf82d926d9857206cd5820438d78392d1f523dacecb8bd899952f73/ujson-5.12.0-cp314-cp314-manylinux_2_24_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:0e00cec383eab2406c9e006bd4edb55d284e94bb943fda558326048178d26961", size = 57465, upload-time = "2026-03-11T22:18:50.584Z" },
+ { url = "https://files.pythonhosted.org/packages/e9/fd/af72d69603f9885e5136509a529a4f6d88bf652b457263ff96aefcd3ab7d/ujson-5.12.0-cp314-cp314-musllinux_1_2_aarch64.whl", hash = "sha256:f19b3af31d02a2e79c5f9a6deaab0fb3c116456aeb9277d11720ad433de6dfc6", size = 1037275, upload-time = "2026-03-11T22:18:51.998Z" },
+ { url = "https://files.pythonhosted.org/packages/9c/a7/a2411ec81aef7872578e56304c3e41b3a544a9809e95c8e1df46923fc40b/ujson-5.12.0-cp314-cp314-musllinux_1_2_i686.whl", hash = "sha256:bacbd3c69862478cbe1c7ed4325caedec580d8acf31b8ee1b9a1e02a56295cad", size = 1196758, upload-time = "2026-03-11T22:18:53.548Z" },
+ { url = "https://files.pythonhosted.org/packages/ed/85/aa18ae175dd03a118555aa14304d4f466f9db61b924c97c6f84388ecacb1/ujson-5.12.0-cp314-cp314-musllinux_1_2_x86_64.whl", hash = "sha256:94c5f1621cbcab83c03be46441f090b68b9f307b6c7ec44d4e3f6d5997383df4", size = 1089760, upload-time = "2026-03-11T22:18:55.336Z" },
+ { url = "https://files.pythonhosted.org/packages/d3/d4/4b40b67ac7e916ebffc3041ae2320c5c0b8a045300d4c542b6e50930cca5/ujson-5.12.0-cp314-cp314-win32.whl", hash = "sha256:e6369ac293d2cc40d52577e4fa3d75a70c1aae2d01fa3580a34a4e6eff9286b9", size = 41043, upload-time = "2026-03-11T22:18:56.505Z" },
+ { url = "https://files.pythonhosted.org/packages/24/38/a1496d2a3428981f2b3a2ffbb4656c2b05be6cc406301d6b10a6445f6481/ujson-5.12.0-cp314-cp314-win_amd64.whl", hash = "sha256:31348a0ffbfc815ce78daac569d893349d85a0b57e1cd2cdbba50b7f333784da", size = 45303, upload-time = "2026-03-11T22:18:57.454Z" },
+ { url = "https://files.pythonhosted.org/packages/85/d3/39dbd3159543d9c57ec3a82d36226152cf0d710784894ce5aa24b8220ac1/ujson-5.12.0-cp314-cp314-win_arm64.whl", hash = "sha256:6879aed770557f0961b252648d36f6fdaab41079d37a2296b5649fd1b35608e0", size = 39860, upload-time = "2026-03-11T22:18:58.578Z" },
+ { url = "https://files.pythonhosted.org/packages/c3/71/9b4dacb177d3509077e50497222d39eec04c8b41edb1471efc764d645237/ujson-5.12.0-cp314-cp314t-macosx_10_15_x86_64.whl", hash = "sha256:7ddb08b3c2f9213df1f2e3eb2fbea4963d80ec0f8de21f0b59898e34f3b3d96d", size = 56845, upload-time = "2026-03-11T22:18:59.629Z" },
+ { url = "https://files.pythonhosted.org/packages/24/c2/8abffa3be1f3d605c4a62445fab232b3e7681512ce941c6b23014f404d36/ujson-5.12.0-cp314-cp314t-macosx_11_0_arm64.whl", hash = "sha256:0a3ae28f0b209be5af50b54ca3e2123a3de3a57d87b75f1e5aa3d7961e041983", size = 54463, upload-time = "2026-03-11T22:19:00.697Z" },
+ { url = "https://files.pythonhosted.org/packages/db/2e/60114a35d1d6796eb428f7affcba00a921831ff604a37d9142c3d8bbe5c5/ujson-5.12.0-cp314-cp314t-manylinux_2_24_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:d30ad4359413c8821cc7b3707f7ca38aa8bc852ba3b9c5a759ee2d7740157315", size = 58689, upload-time = "2026-03-11T22:19:01.739Z" },
+ { url = "https://files.pythonhosted.org/packages/c8/ad/010925c2116c21ce119f9c2ff18d01f48a19ade3ff4c5795da03ce5829fc/ujson-5.12.0-cp314-cp314t-manylinux_2_24_i686.manylinux_2_28_i686.whl", hash = "sha256:02f93da7a4115e24f886b04fd56df1ee8741c2ce4ea491b7ab3152f744ad8f8e", size = 60618, upload-time = "2026-03-11T22:19:03.101Z" },
+ { url = "https://files.pythonhosted.org/packages/9b/74/db7f638bf20282b1dccf454386cbd483faaaed3cdbb9cb27e06f74bb109e/ujson-5.12.0-cp314-cp314t-manylinux_2_24_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:3ff4ede90ed771140caa7e1890de17431763a483c54b3c1f88bd30f0cc1affc0", size = 58151, upload-time = "2026-03-11T22:19:04.175Z" },
+ { url = "https://files.pythonhosted.org/packages/9c/7e/3ebaecfa70a2e8ce623db8e21bd5cb05d42a5ef943bcbb3309d71b5de68d/ujson-5.12.0-cp314-cp314t-musllinux_1_2_aarch64.whl", hash = "sha256:a7bf9cc97f05048ac8f3e02cd58f0fe62b901453c24345bfde287f4305dcc31c", size = 1038117, upload-time = "2026-03-11T22:19:05.558Z" },
+ { url = "https://files.pythonhosted.org/packages/2e/aa/e073eda7f0036c2973b28db7bb99faba17a932e7b52d801f9bb3e726271f/ujson-5.12.0-cp314-cp314t-musllinux_1_2_i686.whl", hash = "sha256:2324d9a0502317ffc35d38e153c1b2fa9610ae03775c9d0f8d0cca7b8572b04e", size = 1197434, upload-time = "2026-03-11T22:19:06.92Z" },
+ { url = "https://files.pythonhosted.org/packages/1c/01/b9a13f058fdd50c746b192c4447ca8d6352e696dcda912ccee10f032ff85/ujson-5.12.0-cp314-cp314t-musllinux_1_2_x86_64.whl", hash = "sha256:50524f4f6a1c839714dbaff5386a1afb245d2d5ec8213a01fbc99cea7307811e", size = 1090401, upload-time = "2026-03-11T22:19:08.383Z" },
+ { url = "https://files.pythonhosted.org/packages/c4/37/3d1b4e0076b6e43379600b5229a5993db8a759ff2e1830ea635d876f6644/ujson-5.12.0-cp314-cp314t-win32.whl", hash = "sha256:f7a0430d765f9bda043e6aefaba5944d5f21ec43ff4774417d7e296f61917382", size = 41880, upload-time = "2026-03-11T22:19:09.671Z" },
+ { url = "https://files.pythonhosted.org/packages/b1/c5/3c2a262a138b9f0014fe1134a6b5fdc2c54245030affbaac2fcbc0632138/ujson-5.12.0-cp314-cp314t-win_amd64.whl", hash = "sha256:ccbfd94e59aad4a2566c71912b55f0547ac1680bfac25eb138e6703eb3dd434e", size = 46365, upload-time = "2026-03-11T22:19:10.662Z" },
+ { url = "https://files.pythonhosted.org/packages/83/40/956dc20b7e00dc0ff3259871864f18dab211837fce3478778bedb3132ac1/ujson-5.12.0-cp314-cp314t-win_arm64.whl", hash = "sha256:42d875388fbd091c7ea01edfff260f839ba303038ffb23475ef392012e4d63dd", size = 40398, upload-time = "2026-03-11T22:19:11.666Z" },
+ { url = "https://files.pythonhosted.org/packages/95/3c/5ee154d505d1aad2debc4ba38b1a60ae1949b26cdb5fa070e85e320d6b64/ujson-5.12.0-graalpy312-graalpy250_312_native-macosx_10_13_x86_64.whl", hash = "sha256:bf85a00ac3b56a1e7a19c5be7b02b5180a0895ac4d3c234d717a55e86960691c", size = 54494, upload-time = "2026-03-11T22:19:13.035Z" },
+ { url = "https://files.pythonhosted.org/packages/ce/b3/9496ec399ec921e434a93b340bd5052999030b7ac364be4cbe5365ac6b20/ujson-5.12.0-graalpy312-graalpy250_312_native-macosx_11_0_arm64.whl", hash = "sha256:64df53eef4ac857eb5816a56e2885ccf0d7dff6333c94065c93b39c51063e01d", size = 57999, upload-time = "2026-03-11T22:19:14.385Z" },
+ { url = "https://files.pythonhosted.org/packages/0e/da/e9ae98133336e7c0d50b43626c3f2327937cecfa354d844e02ac17379ed1/ujson-5.12.0-graalpy312-graalpy250_312_native-manylinux_2_24_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:6c0aed6a4439994c9666fb8a5b6c4eac94d4ef6ddc95f9b806a599ef83547e3b", size = 54518, upload-time = "2026-03-11T22:19:15.4Z" },
+ { url = "https://files.pythonhosted.org/packages/58/10/978d89dded6bb1558cd46ba78f4351198bd2346db8a8ee1a94119022ce40/ujson-5.12.0-graalpy312-graalpy250_312_native-manylinux_2_24_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:efae5df7a8cc8bdb1037b0f786b044ce281081441df5418c3a0f0e1f86fe7bb3", size = 55736, upload-time = "2026-03-11T22:19:16.496Z" },
+ { url = "https://files.pythonhosted.org/packages/80/25/1df8e6217c92e57a1266bf5be750b1dddc126ee96e53fe959d5693503bc6/ujson-5.12.0-graalpy312-graalpy250_312_native-win_amd64.whl", hash = "sha256:8712b61eb1b74a4478cfd1c54f576056199e9f093659334aeb5c4a6b385338e5", size = 44615, upload-time = "2026-03-11T22:19:17.53Z" },
+ { url = "https://files.pythonhosted.org/packages/19/fa/f4a957dddb99bd68c8be91928c0b6fefa7aa8aafc92c93f5d1e8b32f6702/ujson-5.12.0-pp311-pypy311_pp73-macosx_10_15_x86_64.whl", hash = "sha256:871c0e5102e47995b0e37e8df7819a894a6c3da0d097545cd1f9f1f7d7079927", size = 52145, upload-time = "2026-03-11T22:19:18.566Z" },
+ { url = "https://files.pythonhosted.org/packages/55/6e/50b5cf612de1ca06c7effdc5a5d7e815774dee85a5858f1882c425553b82/ujson-5.12.0-pp311-pypy311_pp73-macosx_11_0_arm64.whl", hash = "sha256:56ba3f7abbd6b0bb282a544dc38406d1a188d8bb9164f49fdb9c2fee62cb29da", size = 49577, upload-time = "2026-03-11T22:19:19.627Z" },
+ { url = "https://files.pythonhosted.org/packages/6e/24/b6713fa9897774502cd4c2d6955bb4933349f7d84c3aa805531c382a4209/ujson-5.12.0-pp311-pypy311_pp73-manylinux_2_24_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:9c5a52987a990eb1bae55f9000994f1afdb0326c154fb089992f839ab3c30688", size = 50807, upload-time = "2026-03-11T22:19:20.778Z" },
+ { url = "https://files.pythonhosted.org/packages/1f/b6/c0e0f7901180ef80d16f3a4bccb5dc8b01515a717336a62928963a07b80b/ujson-5.12.0-pp311-pypy311_pp73-manylinux_2_24_i686.manylinux_2_28_i686.whl", hash = "sha256:adf28d13a33f9d750fe7a78fb481cac298fa257d8863d8727b2ea4455ea41235", size = 56972, upload-time = "2026-03-11T22:19:21.84Z" },
+ { url = "https://files.pythonhosted.org/packages/02/a9/05d91b4295ea7239151eb08cf240e5a2ba969012fda50bc27bcb1ea9cd71/ujson-5.12.0-pp311-pypy311_pp73-manylinux_2_24_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:51acc750ec7a2df786cdc868fb16fa04abd6269a01d58cf59bafc57978773d8e", size = 52045, upload-time = "2026-03-11T22:19:22.879Z" },
+ { url = "https://files.pythonhosted.org/packages/e3/7a/92047d32bf6f2d9db64605fc32e8eb0e0dd68b671eaafc12a464f69c4af4/ujson-5.12.0-pp311-pypy311_pp73-win_amd64.whl", hash = "sha256:ab9056d94e5db513d9313b34394f3a3b83e6301a581c28ad67773434f3faccab", size = 44053, upload-time = "2026-03-11T22:19:23.918Z" },
]
[[package]]