@@ -128,7 +128,7 @@ from main import app
///
-每种 ASGI 服务器程序通常都会有类似的命令,您可以在它们的官方文档中找到更多信息。
+每种 ASGI 服务器程序通常都会有类似的命令,你可以在它们的官方文档中找到更多信息。
/// warning | 警告
@@ -144,7 +144,7 @@ Uvicorn 和其他服务器支持 `--reload` 选项,该选项在开发过程中
这些示例运行服务器程序(例如 Uvicorn),启动**单个进程**,在所有 IP(`0.0.0.0`)上监听预定义端口(例如`80`)。
-这是基本思路。 但您可能需要处理一些其他事情,例如:
+这是基本思路。 但你可能需要处理一些其他事情,例如:
* 安全性 - HTTPS
* 启动时运行
@@ -153,4 +153,4 @@ Uvicorn 和其他服务器支持 `--reload` 选项,该选项在开发过程中
* 内存
* 开始前的步骤
-在接下来的章节中,我将向您详细介绍每个概念、如何思考它们,以及一些具体示例以及处理它们的策略。 🚀
+在接下来的章节中,我将向你详细介绍每个概念、如何思考它们,以及一些具体示例以及处理它们的策略。 🚀
diff --git a/docs/zh/docs/help-fastapi.md b/docs/zh/docs/help-fastapi.md
index 2ff9752eb..1692d07ec 100644
--- a/docs/zh/docs/help-fastapi.md
+++ b/docs/zh/docs/help-fastapi.md
@@ -26,7 +26,7 @@
你可以在 GitHub 上为 FastAPI 点亮「星标」(点击右上角的星形按钮):[https://github.com/fastapi/fastapi](https://github.com/fastapi/fastapi)。⭐️
-加星后,其他用户更容易发现它,并看到它已经对许多人有帮助。
+加星后,其他用户更容易发现它,并看到它已经对其他人有帮助。
## 关注 GitHub 资源库的版本发布 { #watch-the-github-repository-for-releases }
@@ -34,7 +34,7 @@
在那里你可以选择「Releases only」。
-这样做之后,每当 **FastAPI** 发布新版本(包含修复和新功能),你都会收到通知(邮件)。
+这样做之后,每当 **FastAPI** 发布包含 Bug 修复和新功能的新版本时,你都会收到通知(邮件)。
## 关注作者 { #follow-the-author }
diff --git a/docs/zh/docs/how-to/configure-swagger-ui.md b/docs/zh/docs/how-to/configure-swagger-ui.md
index 3dbc54911..d1909488a 100644
--- a/docs/zh/docs/how-to/configure-swagger-ui.md
+++ b/docs/zh/docs/how-to/configure-swagger-ui.md
@@ -16,11 +16,11 @@ FastAPI会将这些配置转换为 **JSON**,使其与 JavaScript 兼容,因

-但是你可以通过设置 `syntaxHighlight` 为 `False` 来禁用 Swagger UI 中的语法高亮:
+但是你可以通过设置 `syntaxHighlight` 为 `False` 来禁用它:
{* ../../docs_src/configure_swagger_ui/tutorial001_py310.py hl[3] *}
-...在此之后,Swagger UI 将不会高亮代码:
+...在此之后,Swagger UI 将不再显示语法高亮:

@@ -30,7 +30,7 @@ FastAPI会将这些配置转换为 **JSON**,使其与 JavaScript 兼容,因
{* ../../docs_src/configure_swagger_ui/tutorial002_py310.py hl[3] *}
-这个配置会改变语法高亮主题:
+这个配置会改变语法高亮颜色主题:

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 79860a562..4065818ea 100644
--- a/docs/zh/docs/how-to/custom-request-and-route.md
+++ b/docs/zh/docs/how-to/custom-request-and-route.md
@@ -72,7 +72,7 @@
由 `GzipRequest.get_route_handler` 返回的函数唯一不同之处是把 `Request` 转换为 `GzipRequest`。
-这样,在传给我们的路径操作之前,`GzipRequest` 会(在需要时)负责解压数据。
+这样,在传给我们的*路径操作*之前,`GzipRequest` 会(在需要时)负责解压数据。
之后,其余处理逻辑完全相同。
@@ -104,6 +104,6 @@
{* ../../docs_src/custom_request_and_route/tutorial003_py310.py hl[26] *}
-在此示例中,`router` 下的路径操作将使用自定义的 `TimedRoute` 类,响应中会多一个 `X-Response-Time` 头,包含生成响应所用的时间:
+在此示例中,`router` 下的*路径操作*将使用自定义的 `TimedRoute` 类,响应中会多一个 `X-Response-Time` 头,包含生成响应所用的时间:
{* ../../docs_src/custom_request_and_route/tutorial003_py310.py hl[13:20] *}
diff --git a/docs/zh/docs/how-to/graphql.md b/docs/zh/docs/how-to/graphql.md
index b33d6759f..31d15d3b4 100644
--- a/docs/zh/docs/how-to/graphql.md
+++ b/docs/zh/docs/how-to/graphql.md
@@ -2,7 +2,7 @@
由于 **FastAPI** 基于 **ASGI** 标准,因此很容易集成任何也兼容 ASGI 的 **GraphQL** 库。
-你可以在同一个应用中将常规的 FastAPI 路径操作与 GraphQL 结合使用。
+你可以在同一个应用中将常规的 FastAPI *路径操作* 与 GraphQL 结合使用。
/// tip | 提示
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 3723eb032..ecfdd0278 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
@@ -8,9 +8,11 @@ FastAPI 0.119.0 引入了在 Pydantic v2 内部以 `pydantic.v1` 形式对 Pydan
FastAPI 0.126.0 移除了对 Pydantic v1 的支持,但在一段时间内仍支持 `pydantic.v1`。
+FastAPI 0.128.0 也移除了对 `pydantic.v1` 的支持,因此最新版本的 FastAPI 需要 Pydantic v2。
+
/// warning | 警告
-从 Python 3.14 开始,Pydantic 团队不再为最新的 Python 版本提供 Pydantic v1 的支持。
+从 **Python 3.14** 开始,Pydantic 团队不再为最新的 Python 版本提供 Pydantic v1 的支持。
这也包括 `pydantic.v1`,在 Python 3.14 及更高版本中不再受支持。
@@ -18,7 +20,7 @@ FastAPI 0.126.0 移除了对 Pydantic v1 的支持,但在一段时间内仍支
///
-如果你的旧 FastAPI 应用在用 Pydantic v1,这里将向你展示如何迁移到 Pydantic v2,以及 FastAPI 0.119.0 中可帮助你渐进式迁移的功能。
+如果你的旧 FastAPI 应用在用 Pydantic v1,这里将向你展示如何迁移到 Pydantic v2,以及 **FastAPI 0.119.0 中的功能** 可帮助你渐进式迁移。
## 官方指南 { #official-guide }
@@ -54,6 +56,16 @@ Pydantic v2 以子模块 `pydantic.v1` 的形式包含了 Pydantic v1 的全部
### FastAPI 对 v2 中 Pydantic v1 的支持 { #fastapi-support-for-pydantic-v1-in-v2 }
+/// warning | 警告
+
+此 FastAPI 对 `pydantic.v1` 模型的支持是在 **FastAPI 0.119.0** 中添加的,并在 **FastAPI 0.128.0** 中移除。它原本是为了迁移到 Pydantic v2 而提供的临时辅助。
+
+在当前版本的 FastAPI 中,在你的应用里使用 `pydantic.v1` 模型会引发错误。
+
+本节其余部分描述的临时支持仅在那些较旧版本中可用。
+
+///
+
自 FastAPI 0.119.0 起,FastAPI 也对 Pydantic v2 内的 Pydantic v1 提供了部分支持,以便迁移到 v2。
因此,你可以将 Pydantic 升级到最新的 v2,并将导入改为使用 `pydantic.v1` 子模块,在很多情况下就能直接工作。
@@ -122,6 +134,12 @@ graph TB
### 分步迁移 { #migrate-in-steps }
+/// warning | 警告
+
+下面描述的在同一应用中同时使用 Pydantic v1 和 v2 模型进行渐进式迁移,只适用于 **FastAPI 0.119.0 到 0.127.x**。它已在 **FastAPI 0.128.0** 中移除,最新版本需要 **Pydantic v2** 模型。
+
+///
+
/// tip | 提示
优先尝试 `bump-pydantic`,如果测试通过且可行,那么你就用一个命令完成了。✨
diff --git a/docs/zh/docs/tutorial/bigger-applications.md b/docs/zh/docs/tutorial/bigger-applications.md
index 1be1be628..9bb4bea99 100644
--- a/docs/zh/docs/tutorial/bigger-applications.md
+++ b/docs/zh/docs/tutorial/bigger-applications.md
@@ -17,16 +17,16 @@
```
.
├── app
-│ ├── __init__.py
-│ ├── main.py
-│ ├── dependencies.py
-│ └── routers
-│ │ ├── __init__.py
-│ │ ├── items.py
-│ │ └── users.py
-│ └── internal
-│ ├── __init__.py
-│ └── admin.py
+│ ├── __init__.py
+│ ├── main.py
+│ ├── dependencies.py
+│ └── routers
+│ │ ├── __init__.py
+│ │ ├── items.py
+│ │ └── users.py
+│ └── internal
+│ ├── __init__.py
+│ └── admin.py
```
/// tip | 提示
diff --git a/docs/zh/docs/tutorial/body-nested-models.md b/docs/zh/docs/tutorial/body-nested-models.md
index 98e5168aa..ce10b74a9 100644
--- a/docs/zh/docs/tutorial/body-nested-models.md
+++ b/docs/zh/docs/tutorial/body-nested-models.md
@@ -137,7 +137,7 @@ Pydantic 模型的每个属性都具有类型。
/// note | 注意
-请注意 `images` 键现在具有一组 image 对象是如何发生的。
+请注意 `images` 键现在具有一个 image 对象列表是如何发生的。
///
@@ -149,7 +149,7 @@ Pydantic 模型的每个属性都具有类型。
/// note | 注意
-请注意 `Offer` 拥有一组 `Item` 而反过来 `Item` 又有一个可选的 `Image` 列表是如何发生的。
+请注意 `Offer` 拥有一个 `Item` 列表,而反过来 `Item` 又有一个可选的 `Image` 列表是如何发生的。
///
diff --git a/docs/zh/docs/tutorial/body.md b/docs/zh/docs/tutorial/body.md
index ee4124e94..b32a5ac60 100644
--- a/docs/zh/docs/tutorial/body.md
+++ b/docs/zh/docs/tutorial/body.md
@@ -20,21 +20,22 @@
## 导入 Pydantic 的 `BaseModel` { #import-pydantics-basemodel }
-从 `pydantic` 中导入 `BaseModel`:
+首先,你需要从 `pydantic` 中导入 `BaseModel`:
{* ../../docs_src/body/tutorial001_py310.py hl[2] *}
## 创建数据模型 { #create-your-data-model }
-把数据模型声明为继承 `BaseModel` 的类。
+然后,把数据模型声明为继承 `BaseModel` 的类。
使用 Python 标准类型声明所有属性:
{* ../../docs_src/body/tutorial001_py310.py hl[5:9] *}
+
与声明查询参数一样,包含默认值的模型属性是可选的,否则就是必选的。把默认值设为 `None` 可使其变为可选。
-例如,上述模型声明如下 JSON "object"(即 Python `dict`):
+例如,上述模型声明如下 JSON "`object`"(即 Python `dict`):
```JSON
{
@@ -45,7 +46,7 @@
}
```
-...由于 `description` 和 `tax` 是可选的(默认值为 `None`),下面的 JSON "object" 也有效:
+...由于 `description` 和 `tax` 是可选的(默认值为 `None`),下面的 JSON "`object`" 也有效:
```JSON
{
@@ -123,7 +124,7 @@
## 使用模型 { #use-the-model }
-在*路径操作*函数内部直接访问模型对象的所有属性:
+在函数内部直接访问模型对象的所有属性:
{* ../../docs_src/body/tutorial002_py310.py *}
@@ -135,6 +136,7 @@
{* ../../docs_src/body/tutorial003_py310.py hl[15:16] *}
+
## 请求体 + 路径 + 查询参数 { #request-body-path-query-parameters }
也可以同时声明**请求体**、**路径**和**查询**参数。
diff --git a/docs/zh/docs/tutorial/debugging.md b/docs/zh/docs/tutorial/debugging.md
index 4f4503eef..0b1ada2de 100644
--- a/docs/zh/docs/tutorial/debugging.md
+++ b/docs/zh/docs/tutorial/debugging.md
@@ -62,7 +62,7 @@ from myapp import app
# 其他一些代码
```
-在这种情况下,`myapp.py` 内部的自动变量不会有值为 `"__main__"` 的变量 `__name__`。
+在这种情况下,`myapp.py` 内部自动创建的变量 `__name__` 不会有值 `"__main__"`。
所以,这一行:
@@ -89,7 +89,7 @@ from myapp import app
* 进入到「调试」面板。
* 「添加配置...」。
* 选中「Python」
-* 运行「Python:当前文件(集成终端)」选项的调试器。
+* 使用选项 "`Python: Current File (Integrated Terminal)`" 运行调试器。
然后它会使用你的 **FastAPI** 代码开启服务器,停在断点处,等等。
@@ -99,7 +99,7 @@ from myapp import app
---
-如果使用 Pycharm,你可以:
+如果使用 PyCharm,你可以:
* 打开「运行」菜单。
* 选中「调试...」。
diff --git a/docs/zh/docs/tutorial/dependencies/dependencies-with-yield.md b/docs/zh/docs/tutorial/dependencies/dependencies-with-yield.md
index 5beda5709..85510bbf4 100644
--- a/docs/zh/docs/tutorial/dependencies/dependencies-with-yield.md
+++ b/docs/zh/docs/tutorial/dependencies/dependencies-with-yield.md
@@ -267,7 +267,8 @@ with open("./somefile.txt") as f:
在 Python 中,你可以通过[创建一个带有 `__enter__()` 和 `__exit__()` 方法的类](https://docs.python.org/3/reference/datamodel.html#context-managers)来创建上下文管理器。
-你也可以在 **FastAPI** 的带有 `yield` 的依赖中,使用依赖函数内部的 `with` 或 `async with` 语句来使用它们:
+你也可以在 **FastAPI** 的带有 `yield` 的依赖中通过在依赖函数内部使用
+`with` 或 `async with` 语句来使用它们:
{* ../../docs_src/dependencies/tutorial010_py310.py hl[1:9,13] *}
diff --git a/docs/zh/docs/tutorial/extra-data-types.md b/docs/zh/docs/tutorial/extra-data-types.md
index 76748a7a3..441558285 100644
--- a/docs/zh/docs/tutorial/extra-data-types.md
+++ b/docs/zh/docs/tutorial/extra-data-types.md
@@ -1,15 +1,15 @@
# 额外数据类型 { #extra-data-types }
-到目前为止,您一直在使用常见的数据类型,如:
+到目前为止,你一直在使用常见的数据类型,如:
* `int`
* `float`
* `str`
* `bool`
-但是您也可以使用更复杂的数据类型。
+但是你也可以使用更复杂的数据类型。
-您仍然会拥有现在已经看到的相同的特性:
+你仍然会拥有现在已经看到的相同的特性:
* 很棒的编辑器支持。
* 传入请求的数据转换。
@@ -49,7 +49,7 @@
* `Decimal`:
* 标准的 Python `Decimal`。
* 在请求和响应中被当做 `float` 一样处理。
-* 您可以在这里检查所有有效的 Pydantic 数据类型: [Pydantic data types](https://docs.pydantic.dev/latest/usage/types/types/)。
+* 你可以在这里检查所有有效的 Pydantic 数据类型: [Pydantic data types](https://docs.pydantic.dev/latest/usage/types/types/)。
## 例子 { #example }
diff --git a/docs/zh/docs/tutorial/handling-errors.md b/docs/zh/docs/tutorial/handling-errors.md
index f3a23fab0..b77ca7a6c 100644
--- a/docs/zh/docs/tutorial/handling-errors.md
+++ b/docs/zh/docs/tutorial/handling-errors.md
@@ -6,16 +6,16 @@
你可能需要告诉客户端:
-- 客户端没有执行该操作的权限
-- 客户端没有访问该资源的权限
-- 客户端要访问的项目不存在
-- 等等
+* 客户端没有执行该操作的权限
+* 客户端没有访问该资源的权限
+* 客户端要访问的项目不存在
+* 等等
-遇到这些情况时,通常要返回 **4XX**(400 至 499)**HTTP 状态码**。
+遇到这些情况时,通常要返回 **400** 范围内(400 至 499)的 **HTTP 状态码**。
-这与表示请求成功的 **2XX**(200 至 299)HTTP 状态码类似。那些“200”状态码表示某种程度上的“成功”。
+这与 200 HTTP 状态码(200 至 299)类似。那些“200”状态码表示请求在某种程度上“成功”。
-而 **4XX** 状态码表示客户端发生了错误。
+而 400 范围内的状态码表示客户端发生了错误。
大家都知道**「404 Not Found」**错误,还有调侃这个错误的笑话吧?
@@ -237,8 +237,8 @@ from starlette.exceptions import HTTPException as StarletteHTTPException
### 复用 **FastAPI** 的异常处理器 { #reuse-fastapis-exception-handlers }
-如果你想在自定义处理后仍复用 **FastAPI** 的默认异常处理器,可以从 `fastapi.exception_handlers` 导入并复用这些默认处理器:
+如果你想在使用该异常的同时使用 **FastAPI** 的相同默认异常处理器,可以从 `fastapi.exception_handlers` 导入并复用这些默认处理器:
{* ../../docs_src/handling_errors/tutorial006_py310.py hl[2:5,15,21] *}
-虽然本例只是用非常夸张的信息打印了错误,但足以说明:你可以先处理异常,然后再复用默认的异常处理器。
+虽然本例只是用非常夸张的信息打印了错误,但足以说明:你可以使用该异常,然后直接复用默认的异常处理器。
diff --git a/docs/zh/docs/tutorial/index.md b/docs/zh/docs/tutorial/index.md
index 8d6cbc7a6..fde264d2c 100644
--- a/docs/zh/docs/tutorial/index.md
+++ b/docs/zh/docs/tutorial/index.md
@@ -1,10 +1,10 @@
# 教程 - 用户指南 { #tutorial-user-guide }
-本教程将一步步向您展示如何使用 **FastAPI** 的绝大部分特性。
+本教程将一步步向你展示如何使用 **FastAPI** 的绝大部分特性。
-各个章节的内容循序渐进,但是又围绕着单独的主题,所以您可以直接跳转到某个章节以解决您的特定 API 需求。
+各个章节的内容循序渐进,但是又围绕着单独的主题,所以你可以直接跳转到某个章节以解决你的特定 API 需求。
-本教程同样可以作为将来的参考手册,所以您可以随时回到本教程并查阅您需要的内容。
+本教程同样可以作为将来的参考手册,所以你可以随时回到本教程并查阅你需要的内容。
## 运行代码 { #run-the-code }
@@ -52,7 +52,7 @@ $
fastapi dev
-**强烈建议**您在本地编写或复制代码,对其进行编辑并运行。
+**强烈建议**你在本地编写或复制代码,对其进行编辑并运行。
在编辑器中使用 FastAPI 会真正地展现出它的优势:只需要编写很少的代码,所有的类型检查,代码补全等等。
@@ -60,9 +60,9 @@ $
@@ -76,11 +76,11 @@ $ pip install "fastapi[standard]"
/// note | 注意
-当您使用 `pip install "fastapi[standard]"` 安装时,它会附带一些默认的可选标准依赖项,其中包括 `fastapi-cloud-cli`,它可以让您部署到 [FastAPI Cloud](https://fastapicloud.com)。
+当你使用 `pip install "fastapi[standard]"` 安装时,它会附带一些默认的可选标准依赖项,其中包括 `fastapi-cloud-cli`,它可以让你部署到 [FastAPI Cloud](https://fastapicloud.com)。
-如果您不想安装这些可选依赖,可以选择安装 `pip install fastapi`。
+如果你不想安装这些可选依赖,可以选择安装 `pip install fastapi`。
-如果您想安装标准依赖但不包含 `fastapi-cloud-cli`,可以使用 `pip install "fastapi[standard-no-fastapi-cloud-cli]"` 安装。
+如果你想安装标准依赖但不包含 `fastapi-cloud-cli`,可以使用 `pip install "fastapi[standard-no-fastapi-cloud-cli]"` 安装。
///
@@ -92,10 +92,10 @@ FastAPI 提供了一个[VS Code 官方扩展](https://marketplace.visualstudio.c
## 进阶用户指南 { #advanced-user-guide }
-在本**教程-用户指南**之后,您可以阅读**进阶用户指南**。
+在本**教程-用户指南**之后,你可以阅读**进阶用户指南**。
**进阶用户指南**以本教程为基础,使用相同的概念,并教授一些额外的特性。
-但是您应该先阅读**教程-用户指南**(即您现在正在阅读的内容)。
+但是你应该先阅读**教程-用户指南**(即你现在正在阅读的内容)。
-教程经过精心设计,使您可以仅通过**教程-用户指南**来开发一个完整的应用程序,然后根据您的需要,使用**进阶用户指南**中的一些其他概念,以不同的方式来扩展它。
+教程经过精心设计,使你可以仅通过**教程-用户指南**来开发一个完整的应用程序,然后根据你的需要,使用**进阶用户指南**中的一些其他概念,以不同的方式来扩展它。
diff --git a/docs/zh/docs/tutorial/metadata.md b/docs/zh/docs/tutorial/metadata.md
index ba480637b..6518d096c 100644
--- a/docs/zh/docs/tutorial/metadata.md
+++ b/docs/zh/docs/tutorial/metadata.md
@@ -1,6 +1,6 @@
# 元数据和文档 URL { #metadata-and-docs-urls }
-你可以在 FastAPI 应用程序中自定义多个元数据配置。
+你可以在 **FastAPI** 应用程序中自定义多个元数据配置。
## API 元数据 { #metadata-for-api }
@@ -11,7 +11,7 @@
| `title` | `str` | API 的标题。 |
| `summary` | `str` | API 的简短摘要。
自 OpenAPI 3.1.0、FastAPI 0.99.0 起可用。 |
| `description` | `str` | API 的简短描述。可以使用 Markdown。 |
-| `version` | `string` | API 的版本。这是您自己的应用程序的版本,而不是 OpenAPI 的版本。例如 `2.5.0`。 |
+| `version` | `str` | 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](https://spdx.org/licenses/) 许可证表达式。字段 identifier 与字段 url 互斥。自 OpenAPI 3.1.0、FastAPI 0.99.0 起可用。 |
url | str | 用于 API 的许可证的 URL。必须采用 URL 格式。 |
|
@@ -46,11 +46,11 @@
每个字典可以包含:
-- `name`(必填):一个 `str`,与在你的*路径操作*和 `APIRouter` 的 `tags` 参数中使用的标签名相同。
-- `description`:一个 `str`,该标签的简短描述。可以使用 Markdown,并会显示在文档 UI 中。
-- `externalDocs`:一个 `dict`,描述外部文档,包含:
- - `description`:一个 `str`,该外部文档的简短描述。
- - `url`(必填):一个 `str`,该外部文档的 URL。
+* `name`(**必填**):一个 `str`,与在你的*路径操作*和 `APIRouter` 的 `tags` 参数中使用的标签名相同。
+* `description`:一个 `str`,该标签的简短描述。可以使用 Markdown,并会显示在文档 UI 中。
+* `externalDocs`:一个 `dict`,描述外部文档,包含:
+ * `description`:一个 `str`,该外部文档的简短描述。
+ * `url`(**必填**):一个 `str`,该外部文档的 URL。
### 创建标签元数据 { #create-metadata-for-tags }
@@ -108,12 +108,12 @@
你可以配置两个文档用户界面,包括:
-- **Swagger UI**:服务于 `/docs`。
- - 可以使用参数 `docs_url` 设置它的 URL。
- - 可以通过设置 `docs_url=None` 禁用它。
-- **ReDoc**:服务于 `/redoc`。
- - 可以使用参数 `redoc_url` 设置它的 URL。
- - 可以通过设置 `redoc_url=None` 禁用它。
+* **Swagger UI**:服务于 `/docs`。
+ * 可以使用参数 `docs_url` 设置它的 URL。
+ * 可以通过设置 `docs_url=None` 禁用它。
+* **ReDoc**:服务于 `/redoc`。
+ * 可以使用参数 `redoc_url` 设置它的 URL。
+ * 可以通过设置 `redoc_url=None` 禁用它。
例如,设置 Swagger UI 服务于 `/documentation` 并禁用 ReDoc:
diff --git a/docs/zh/docs/tutorial/request-files.md b/docs/zh/docs/tutorial/request-files.md
index 102d42215..38c089ff3 100644
--- a/docs/zh/docs/tutorial/request-files.md
+++ b/docs/zh/docs/tutorial/request-files.md
@@ -147,7 +147,7 @@ HTML 表单(`
`)向服务器发送数据的方式通常会对数
## 多文件上传 { #multiple-file-uploads }
-FastAPI 支持同时上传多个文件。
+可以同时上传多个文件。
它们会被关联到同一个通过「表单数据」发送的「表单字段」。
diff --git a/docs/zh/docs/tutorial/request-forms.md b/docs/zh/docs/tutorial/request-forms.md
index 3d305779f..0e7f19c70 100644
--- a/docs/zh/docs/tutorial/request-forms.md
+++ b/docs/zh/docs/tutorial/request-forms.md
@@ -2,7 +2,7 @@
当你需要接收表单字段而不是 JSON 时,可以使用 `Form`。
-/// note
+/// note | 注意
要使用表单,首先安装 [`python-multipart`](https://github.com/Kludex/python-multipart)。
@@ -32,13 +32,13 @@ $ pip install python-multipart
使用 `Form` 可以像使用 `Body`(以及 `Query`、`Path`、`Cookie`)一样声明相同的配置,包括校验、示例、别名(例如将 `username` 写成 `user-name`)等。
-/// note
+/// note | 注意
`Form` 是直接继承自 `Body` 的类。
///
-/// tip
+/// tip | 提示
要声明表单请求体,必须显式使用 `Form`,否则这些参数会被当作查询参数或请求体(JSON)参数。
@@ -60,9 +60,9 @@ HTML 表单(`
`)向服务器发送数据时通常会对数据使
///
-/// warning
+/// warning | 警告
-你可以在一个路径操作中声明多个 `Form` 参数,但不能同时再声明要接收为 JSON 的 `Body` 字段,因为此时请求体会使用 `application/x-www-form-urlencoded` 而不是 `application/json` 进行编码。
+你可以在一个*路径操作*中声明多个 `Form` 参数,但不能同时再声明要接收为 JSON 的 `Body` 字段,因为此时请求体会使用 `application/x-www-form-urlencoded` 而不是 `application/json` 进行编码。
这不是 **FastAPI** 的限制,而是 HTTP 协议的一部分。
diff --git a/docs/zh/docs/tutorial/response-status-code.md b/docs/zh/docs/tutorial/response-status-code.md
index 411ece71c..c06e67e6f 100644
--- a/docs/zh/docs/tutorial/response-status-code.md
+++ b/docs/zh/docs/tutorial/response-status-code.md
@@ -6,7 +6,7 @@
* `@app.post()`
* `@app.put()`
* `@app.delete()`
-* 等...
+* 等。
{* ../../docs_src/response_status_code/tutorial001_py310.py hl[6] *}
@@ -27,13 +27,13 @@
它可以:
* 在响应中返回状态码
-* 在 OpenAPI 概图(及用户界面)中存档:
+* 在 OpenAPI schema(以及用户界面)中将其记录为该状态码:

/// note | 注意
-某些响应状态码表示响应没有响应体(参阅下一章)。
+某些响应状态码表示响应没有响应体(参阅下一节)。
FastAPI 可以进行识别,并生成表明无响应体的 OpenAPI 文档。
@@ -43,7 +43,7 @@ FastAPI 可以进行识别,并生成表明无响应体的 OpenAPI 文档。
/// note | 注意
-如果已经了解 HTTP 状态码,请跳到下一章。
+如果已经了解 HTTP 状态码,请跳到下一节。
///
diff --git a/docs/zh/docs/tutorial/schema-extra-example.md b/docs/zh/docs/tutorial/schema-extra-example.md
index 2ea590c86..b18e69641 100644
--- a/docs/zh/docs/tutorial/schema-extra-example.md
+++ b/docs/zh/docs/tutorial/schema-extra-example.md
@@ -10,7 +10,7 @@
{* ../../docs_src/schema_extra_example/tutorial001_py310.py hl[13:24] *}
-这些额外信息会原样添加到该模型输出的 JSON Schema 中,并会在 API 文档中使用。
+这些额外信息会原样添加到该模型输出的 **JSON Schema** 中,并会在 API 文档中使用。
你可以使用属性 `model_config`,它接收一个 `dict`,详见 [Pydantic 文档:配置](https://docs.pydantic.dev/latest/api/config/)。
@@ -26,7 +26,7 @@
/// note | 注意
-OpenAPI 3.1.0(自 FastAPI 0.99.0 起使用)增加了对 `examples` 的支持,它是 JSON Schema 标准的一部分。
+OpenAPI 3.1.0(自 FastAPI 0.99.0 起使用)增加了对 `examples` 的支持,它是 **JSON Schema** 标准的一部分。
在此之前,只支持使用单个示例的关键字 `example`。OpenAPI 3.1.0 仍然支持它,但它已被弃用,并不属于 JSON Schema 标准。因此,建议你把 `example` 迁移到 `examples`。🤓
@@ -52,7 +52,7 @@ OpenAPI 3.1.0(自 FastAPI 0.99.0 起使用)增加了对 `examples` 的支持
- `Form()`
- `File()`
-你也可以声明一组 `examples`,这些带有附加信息的示例将被添加到它们在 OpenAPI 中的 JSON Schema 里。
+你也可以声明一组 `examples`,这些带有附加信息的示例将被添加到它们在 **OpenAPI** 中的 **JSON Schema** 里。
### 带有 `examples` 的 `Body` { #body-with-examples }
@@ -72,21 +72,21 @@ OpenAPI 3.1.0(自 FastAPI 0.99.0 起使用)增加了对 `examples` 的支持
{* ../../docs_src/schema_extra_example/tutorial004_an_py310.py hl[23:38] *}
-这样做时,这些示例会成为该请求体数据内部 JSON Schema 的一部分。
+这样做时,这些示例会成为该请求体数据内部 **JSON Schema** 的一部分。
-不过,在
撰写本文时,用于展示文档 UI 的 Swagger UI 并不支持显示 JSON Schema 中数据的多个示例。但请继续阅读,下面有一种变通方法。
+不过,在
撰写本文时,用于展示文档 UI 的 Swagger UI 并不支持显示 **JSON Schema** 中数据的多个示例。但请继续阅读,下面有一种变通方法。
### OpenAPI 特定的 `examples` { #openapi-specific-examples }
-在 JSON Schema 支持 `examples` 之前,OpenAPI 就已支持一个同名但不同的字段 `examples`。
+在 **JSON Schema** 支持 `examples` 之前,OpenAPI 就已支持一个同名但不同的字段 `examples`。
-这个面向 OpenAPI 的 `examples` 位于 OpenAPI 规范的另一处。它放在每个路径操作的详细信息中,而不是每个 JSON Schema 里。
+这个 **OpenAPI 特定的** `examples` 位于 OpenAPI 规范的另一处。它放在**每个*路径操作*的详细信息**中,而不是每个 JSON Schema 里。
-而 Swagger UI 早就支持这个特定的 `examples` 字段。因此,你可以用它在文档 UI 中展示不同的示例。
+而 Swagger UI 早就支持这个特定的 `examples` 字段。因此,你可以用它在文档 UI 中**展示**不同的**示例**。
-这个 OpenAPI 特定字段 `examples` 的结构是一个包含多个示例的 `dict`(而不是一个 `list`),每个示例都包含会被添加到 OpenAPI 的额外信息。
+这个 OpenAPI 特定字段 `examples` 的结构是一个包含**多个示例**的 `dict`(而不是一个 `list`),每个示例都包含会被添加到 **OpenAPI** 的额外信息。
-这不放在 OpenAPI 内部包含的各个 JSON Schema 里,而是直接放在路径操作上。
+这不放在 OpenAPI 内部包含的各个 JSON Schema 里,而是直接放在*路径操作*上。
### 使用 `openapi_examples` 参数 { #using-the-openapi-examples-parameter }
@@ -123,23 +123,23 @@ OpenAPI 3.1.0(自 FastAPI 0.99.0 起使用)增加了对 `examples` 的支持
/// tip | 提示
-如果你已经在使用 FastAPI 版本 0.99.0 或更高版本,你大概率可以跳过这些细节。
+如果你已经在使用 **FastAPI** 版本 **0.99.0 或更高版本**,你大概率可以**跳过**这些细节。
它们对更早版本(OpenAPI 3.1.0 尚不可用之前)更相关。
-你可以把这当作一堂简短的 OpenAPI 和 JSON Schema 历史课。🤓
+你可以把这当作一堂简短的 OpenAPI 和 JSON Schema **历史课**。🤓
///
/// warning | 警告
-以下是关于 JSON Schema 和 OpenAPI 标准的非常技术性的细节。
+以下是关于 **JSON Schema** 和 **OpenAPI** 标准的非常技术性的细节。
如果上面的思路对你已经足够可用,你可能不需要这些细节,可以直接跳过。
///
-在 OpenAPI 3.1.0 之前,OpenAPI 使用的是一个更旧且经过修改的 JSON Schema 版本。
+在 OpenAPI 3.1.0 之前,OpenAPI 使用的是一个更旧且经过修改的 **JSON Schema** 版本。
当时 JSON Schema 没有 `examples`,所以 OpenAPI 在它修改过的版本中添加了自己的 `example` 字段。
@@ -169,7 +169,7 @@ OpenAPI 还在规范的其他部分添加了 `example` 和 `examples` 字段:
现在,这个新的 `examples` 字段优先于旧的单个(且自定义的)`example` 字段,后者已被弃用。
-JSON Schema 中这个新的 `examples` 字段只是一个由示例组成的 `list`,而不是像上面提到的 OpenAPI 其他位置那样带有额外元数据的 `dict`。
+在 JSON Schema 中,这个新的 `examples` 字段**只是一个由示例组成的 `list`**,而不是像上面提到的 OpenAPI 其他位置那样带有额外元数据的 `dict`。
/// note | 注意
@@ -181,22 +181,22 @@ JSON Schema 中这个新的 `examples` 字段只是一个由示例组成的 `lis
### Pydantic 与 FastAPI 的 `examples` { #pydantic-and-fastapi-examples }
-当你在 Pydantic 模型中添加 `examples`,通过 `schema_extra` 或 `Field(examples=["something"])`,这些示例会被添加到该 Pydantic 模型的 JSON Schema 中。
+当你在 Pydantic 模型中添加 `examples`,通过 `schema_extra` 或 `Field(examples=["something"])`,这些示例会被添加到该 Pydantic 模型的 **JSON Schema** 中。
-这个 Pydantic 模型的 JSON Schema 会被包含到你的 API 的 OpenAPI 中,然后在文档 UI 中使用。
+这个 Pydantic 模型的 **JSON Schema** 会被包含到你的 API 的 **OpenAPI** 中,然后在文档 UI 中使用。
-在 FastAPI 0.99.0 之前的版本(0.99.0 及以上使用更新的 OpenAPI 3.1.0),当你在其他工具(`Query()`、`Body()` 等)中使用 `example` 或 `examples` 时,这些示例不会被添加到描述该数据的 JSON Schema 中(甚至不会添加到 OpenAPI 自己的 JSON Schema 版本中),而是会直接添加到 OpenAPI 的路径操作声明中(在 OpenAPI 使用 JSON Schema 的部分之外)。
+在 FastAPI 0.99.0 之前的版本(0.99.0 及以上使用更新的 OpenAPI 3.1.0),当你在其他工具(`Query()`、`Body()` 等)中使用 `example` 或 `examples` 时,这些示例不会被添加到描述该数据的 JSON Schema 中(甚至不会添加到 OpenAPI 自己的 JSON Schema 版本中),而是会直接添加到 OpenAPI 的*路径操作*声明中(在 OpenAPI 使用 JSON Schema 的部分之外)。
但现在 FastAPI 0.99.0 及以上使用 OpenAPI 3.1.0(其使用 JSON Schema 2020-12)以及 Swagger UI 5.0.0 及以上后,一切更加一致,示例会包含在 JSON Schema 中。
### Swagger UI 与 OpenAPI 特定的 `examples` { #swagger-ui-and-openapi-specific-examples }
-此前,由于 Swagger UI 不支持多个 JSON Schema 示例(截至 2023-08-26),用户无法在文档中展示多个示例。
+由于截至 2023-08-26,Swagger UI 不支持多个 JSON Schema 示例,用户无法在文档中展示多个示例。
-为了解决这个问题,FastAPI `0.103.0` 通过新增参数 `openapi_examples`,为声明同样的旧式 OpenAPI 特定 `examples` 字段提供了支持。🤓
+为了解决这个问题,FastAPI `0.103.0` **增加了支持**,可以通过新参数 `openapi_examples` 声明同样的旧式 **OpenAPI 特定的** `examples` 字段。🤓
### 总结 { #summary }
-我曾经说我不太喜欢历史……结果现在在这儿上“技术史”课。😅
+我曾经说我不太喜欢历史... 结果现在在这儿上“技术史”课。😅
-简而言之,升级到 FastAPI 0.99.0 或更高版本,一切会更简单、一致、直观,你也不必了解这些历史细节。😎
+简而言之,**升级到 FastAPI 0.99.0 或更高版本**,一切会更**简单、一致、直观**,你也不必了解这些历史细节。😎
diff --git a/docs/zh/docs/tutorial/security/get-current-user.md b/docs/zh/docs/tutorial/security/get-current-user.md
index e8a1de9d5..dc8c70014 100644
--- a/docs/zh/docs/tutorial/security/get-current-user.md
+++ b/docs/zh/docs/tutorial/security/get-current-user.md
@@ -8,14 +8,13 @@
接下来,我们学习如何返回当前用户。
-
## 创建用户模型 { #create-a-user-model }
首先,创建 Pydantic 用户模型。
与使用 Pydantic 声明请求体相同,并且可在任何位置使用:
-{* ../../docs_src/security/tutorial002_an_py310.py hl[5,12:6] *}
+{* ../../docs_src/security/tutorial002_an_py310.py hl[5,12:16] *}
## 创建 `get_current_user` 依赖项 { #create-a-get-current-user-dependency }
@@ -55,7 +54,7 @@
/// tip | 提示
-依赖系统的这种设计方式可以支持不同的依赖项返回同一个 `User` 模型。
+依赖系统的这种设计方式可以支持不同的依赖项(不同的“可依赖项”)返回同一个 `User` 模型。
而不是局限于只能有一个返回该类型数据的依赖项。
@@ -77,7 +76,6 @@
尽管使用应用所需的任何模型、类、数据库。**FastAPI** 通过依赖注入系统都能帮您搞定。
-
## 代码大小 { #code-size }
这个示例看起来有些冗长。毕竟这个文件同时包含了安全、数据模型的工具函数,以及路径操作等代码。
diff --git a/docs/zh/docs/tutorial/security/oauth2-jwt.md b/docs/zh/docs/tutorial/security/oauth2-jwt.md
index e0cbdf685..418b3b97d 100644
--- a/docs/zh/docs/tutorial/security/oauth2-jwt.md
+++ b/docs/zh/docs/tutorial/security/oauth2-jwt.md
@@ -120,7 +120,7 @@ pwdlib 也支持 bcrypt 哈希算法,但不包含遗留算法——如果需
当使用一个在数据库中不存在的用户名调用 `authenticate_user` 时,我们仍然会针对一个虚拟哈希运行 `verify_password`。
-这可以确保无论用户名是否有效,端点的响应时间大致相同,从而防止可用于枚举已存在用户名的“时间攻击”(timing attacks)。
+这可以确保无论用户名是否有效,端点的响应时间大致相同,从而防止可用于枚举已存在用户名的**时序攻击**。
/// note | 注意
@@ -168,7 +168,7 @@ $ openssl rand -hex 32
{* ../../docs_src/security/tutorial004_an_py310.py hl[93:110] *}
-## 更新 `/token` 路径操作 { #update-the-token-path-operation }
+## 更新 `/token` *路径操作* { #update-the-token-path-operation }
用令牌的过期时间创建一个 `timedelta`。
diff --git a/docs/zh/docs/tutorial/security/simple-oauth2.md b/docs/zh/docs/tutorial/security/simple-oauth2.md
index 6ebf77e36..92cf02dd2 100644
--- a/docs/zh/docs/tutorial/security/simple-oauth2.md
+++ b/docs/zh/docs/tutorial/security/simple-oauth2.md
@@ -6,7 +6,7 @@
首先,使用 **FastAPI** 安全工具获取 `username` 和 `password`。
-OAuth2 规范要求使用“密码流”时,客户端或用户必须以表单数据形式发送 `username` 和 `password` 字段。
+OAuth2 规范要求使用“密码流”(也就是我们正在使用的流程)时,客户端或用户必须以表单数据形式发送 `username` 和 `password` 字段。
并且,这两个字段必须命名为 `username` 和 `password`,不能使用 `user-name` 或 `email` 等其它名称。
@@ -80,7 +80,7 @@ OAuth2 中,**作用域**只是声明指定权限的字符串。
但 `OAuth2PasswordRequestForm` 只是可以自行编写的类依赖项,也可以直接声明 `Form` 参数。
-但由于这种用例很常见,FastAPI 为了简便,就直接提供了对它的支持。
+但由于这种用例很常见,**FastAPI** 为了简便,就直接提供了对它的支持。
///
@@ -146,7 +146,7 @@ UserInDB(
/// note | 注意
-`user_dict` 的说明,详见[**更多模型**一章](../extra-models.md#about-user-in-dict)。
+关于 `**user_dict` 的更完整说明,详见[**更多模型**文档](../extra-models.md#about-user-in-model-dump)。
///
@@ -208,7 +208,7 @@ UserInDB(
之所以在此提供这个附加响应头,是为了符合规范的要求。
-说不定什么时候,就有工具用得上它,而且,开发者或用户也可能用得上。
+此外,现在或将来,可能会有工具期望并使用它,而且现在或将来这也可能对你或你的用户有用。
这就是遵循标准的好处...
diff --git a/docs/zh/docs/tutorial/sql-databases.md b/docs/zh/docs/tutorial/sql-databases.md
index 9004983b1..1d6a3cd34 100644
--- a/docs/zh/docs/tutorial/sql-databases.md
+++ b/docs/zh/docs/tutorial/sql-databases.md
@@ -8,7 +8,7 @@
/// tip | 提示
-你可以使用任意其他你想要的 SQL 或 NoSQL 数据库库(在某些情况下称为
"ORMs"),FastAPI 不会强迫你使用任何东西。😎
+你可以使用任意其他你想要的 SQL 或 NoSQL 数据库类库(在某些情况下称为
"ORMs"),FastAPI 不会强迫你使用任何东西。😎
///
@@ -57,7 +57,7 @@ $ pip install sqlmodel
{* ../../docs_src/sql_databases/tutorial001_an_py310.py ln[1:11] hl[7:11] *}
-`Hero` 类与 Pydantic 模型非常相似(实际上,从底层来看,它确实就是一个 Pydantic 模型)。
+`Hero` 类与 Pydantic 模型非常相似(实际上,从底层来看,它*确实就是一个 Pydantic 模型*)。
有一些区别:
@@ -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 关于主键的文档](https://sqlmodel.tiangolo.com/tutorial/create-db-and-table/#primary-key-id)。
+ **注意:** 我们为主键字段使用 `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 索引**,这样在读取按此列过滤的数据时,程序能在数据库中进行更快的查找。
@@ -292,7 +292,7 @@ $ fastapi dev
/// tip | 提示
-现在我们使用 `response_model=HeroPublic` 来代替**返回类型注解** `-> HeroPublic`,因为我们返回的值实际上并不是 `HeroPublic`。
+现在我们使用 `response_model=HeroPublic` 来代替**返回类型注解** `-> HeroPublic`,因为我们返回的值实际上*并不是* `HeroPublic`。
如果我们声明了 `-> HeroPublic`,你的编辑器和代码检查工具会(理所应当地)抱怨你返回了一个 `Hero` 而不是一个 `HeroPublic`。
diff --git a/docs/zh/docs/tutorial/static-files.md b/docs/zh/docs/tutorial/static-files.md
index 65262bdb4..b700f46d6 100644
--- a/docs/zh/docs/tutorial/static-files.md
+++ b/docs/zh/docs/tutorial/static-files.md
@@ -2,6 +2,14 @@
你可以使用 `StaticFiles` 从目录中自动提供静态文件。
+/// tip | 提示
+
+如果你需要托管前端,请改用 `app.frontend()`,可在[前端](frontend.md)中阅读相关内容。
+
+`app.frontend()` 底层使用 `StaticFiles`,并为前端提供了几个额外优势,例如处理客户端路由。
+
+///
+
## 使用 `StaticFiles` { #use-staticfiles }
* 导入 `StaticFiles`。
diff --git a/docs/zh/docs/tutorial/testing.md b/docs/zh/docs/tutorial/testing.md
index 50e1d8f2d..79e5044c9 100644
--- a/docs/zh/docs/tutorial/testing.md
+++ b/docs/zh/docs/tutorial/testing.md
@@ -52,7 +52,7 @@ $ pip install httpx
/// tip | 提示
-除了发送请求之外,如果你还想测试时在FastAPI应用中调用 `async` 函数(例如异步数据库函数), 可以在高级教程中看下 [Async Tests](../advanced/async-tests.md) 。
+除了发送请求之外,如果你还想测试时在FastAPI应用中调用 `async` 函数(例如异步数据库函数), 可以在高级教程中看下[异步测试](../advanced/async-tests.md)。
///
@@ -60,7 +60,7 @@ $ pip install httpx
在实际应用中,你可能会把你的测试放在另一个文件里。
-您的**FastAPI**应用程序也可能由一些文件/模块组成等等。
+你的**FastAPI**应用程序也可能由一些文件/模块组成等等。
### **FastAPI** app 文件 { #fastapi-app-file }
@@ -80,7 +80,7 @@ $ pip install httpx
### 测试文件 { #testing-file }
-然后你会有一个包含测试的文件 `test_main.py` 。app可以像Python包那样存在(一样是目录,但有个 `__init__.py` 文件):
+然后你会有一个包含测试的文件 `test_main.py` 。它可以位于同一个 Python 包中(一样是目录,但有个 `__init__.py` 文件):
``` hl_lines="5"
.
@@ -94,6 +94,7 @@ $ pip install httpx
{* ../../docs_src/app_testing/app_a_py310/test_main.py hl[3] *}
+
...然后测试代码和之前一样的。
## 测试:扩展示例 { #testing-extended-example }
@@ -114,20 +115,21 @@ $ pip install httpx
假设现在包含**FastAPI** app的文件 `main.py` 有些其他**路径操作**。
-有个 `GET` 操作会返回错误。
+有个 `GET` 操作可能返回一个错误。
-有个 `POST` 操作会返回一些错误。
+有个 `POST` 操作可能返回多个错误。
-所有*路径操作* 都需要一个`X-Token` 头。
+两个*路径操作* 都需要一个`X-Token` 头。
{* ../../docs_src/app_testing/app_b_an_py310/main.py *}
### 扩展后的测试文件 { #extended-testing-file }
-然后您可以使用扩展后的测试更新`test_main.py`:
+然后你可以使用扩展后的测试更新`test_main.py`:
{* ../../docs_src/app_testing/app_b_an_py310/test_main.py *}
+
每当你需要客户端在请求中传递信息,但你不知道如何传递时,你可以通过搜索(谷歌)如何用 `httpx` 做,或者是用 `requests` 做,毕竟HTTPX的设计是基于Requests的设计的。
接着只需在测试中同样操作。
@@ -146,7 +148,7 @@ $ pip install httpx
注意 `TestClient` 接收可以被转化为JSON的数据,而不是Pydantic模型。
-如果你在测试中有一个Pydantic模型,并且你想在测试时发送它的数据给应用,你可以使用在[JSON Compatible Encoder](encoder.md)介绍的`jsonable_encoder` 。
+如果你在测试中有一个Pydantic模型,并且你想在测试时发送它的数据给应用,你可以使用在[JSON 兼容编码器](encoder.md)介绍的`jsonable_encoder` 。
///
@@ -166,7 +168,7 @@ $ pip install pytest
-他会自动检测文件和测试,执行测试,然后向你报告结果。
+它会自动检测文件和测试,执行测试,然后向你报告结果。
执行测试: