diff --git a/docs/zh/docs/advanced/additional-responses.md b/docs/zh/docs/advanced/additional-responses.md index 842d49b4ca..b94715cbae 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 对象](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`。 +* [OpenAPI Responses 对象](https://github.com/OAI/OpenAPI-Specification/blob/main/versions/3.1.0.md#responses-object),它包含 `Response Object`。 +* [OpenAPI Response 对象](https://github.com/OAI/OpenAPI-Specification/blob/main/versions/3.1.0.md#response-object),你可以把这里的任何内容直接包含到 `responses` 参数中的每个响应里。包括 `description`、`headers`、`content`(在这里声明不同的媒体类型和 JSON Schemas),以及 `links`。 diff --git a/docs/zh/docs/advanced/async-tests.md b/docs/zh/docs/advanced/async-tests.md index 2030bb11e2..5ba7c6129b 100644 --- a/docs/zh/docs/advanced/async-tests.md +++ b/docs/zh/docs/advanced/async-tests.md @@ -45,7 +45,7 @@
+ 没有大家之前所做的工作,**FastAPI** 就不会存在。 以前创建的这些工具为它的出现提供了灵感。 @@ -24,6 +25,7 @@ 在那几年中,我一直回避创建新的框架。首先,我尝试使用各种框架、插件、工具解决 **FastAPI** 现在的功能。 但到了一定程度之后,我别无选择,只能从之前的工具中汲取最优思路,并以尽量好的方式把这些思路整合在一起,使用之前甚至是不支持的语言特性(Python 3.6+ 的类型提示),从而创建一个能满足我所有需求的框架。 +## 调研 { #investigation } @@ -52,11 +54,11 @@ ## 需求项 { #requirements } -经过测试多种备选方案,我最终决定使用 [**Pydantic**](https://docs.pydantic.dev/),并充分利用它的优势。 +经过测试多种备选方案,我最终决定使用 [**Pydantic**](https://pydantic.dev/docs/),并充分利用它的优势。 我甚至为它做了不少贡献,让它完美兼容了 JSON Schema,支持多种方式定义约束声明,并基于多个编辑器,改进了它对编辑器支持(类型检查、自动补全)。 -在开发期间,我还为 [**Starlette**](https://www.starlette.dev/) 做了不少贡献,这是另一个关键需求项。 +在开发期间,我还为 [**Starlette**](https://starlette.dev/) 做了不少贡献,这是另一个关键需求项。 ## 开发 { #development } 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 4065818eaa..a88813c958 100644 --- a/docs/zh/docs/how-to/custom-request-and-route.md +++ b/docs/zh/docs/how-to/custom-request-and-route.md @@ -66,7 +66,7 @@ 创建一个新的 `Request` 实例需要这两样:`scope` 和 `receive`。 -想了解更多关于 `Request` 的信息,请查看 [Starlette 的 Request 文档](https://www.starlette.dev/requests/)。 +想了解更多关于 `Request` 的信息,请查看 [Starlette 的 Request 文档](https://starlette.dev/requests/)。 /// diff --git a/docs/zh/docs/how-to/extending-openapi.md b/docs/zh/docs/how-to/extending-openapi.md index 9b8d1c07e0..09bc9b1e6f 100644 --- a/docs/zh/docs/how-to/extending-openapi.md +++ b/docs/zh/docs/how-to/extending-openapi.md @@ -45,7 +45,7 @@ 基于以上信息,你可以用同一个工具函数生成 OpenAPI 架构,并按需覆盖其中的各个部分。 -例如,让我们添加 [ReDoc 的 OpenAPI 扩展以包含自定义 Logo](https://github.com/Rebilly/ReDoc/blob/master/docs/redoc-vendor-extensions.md#x-logo)。 +例如,让我们添加 [ReDoc 的 OpenAPI 扩展以包含自定义 Logo](https://github.com/Redocly/redoc/blob/main/docs/redoc-vendor-extensions.md#x-logo)。 ### 常规 **FastAPI** { #normal-fastapi } diff --git a/docs/zh/docs/how-to/graphql.md b/docs/zh/docs/how-to/graphql.md index 31d15d3b41..a8f7c9b2f5 100644 --- a/docs/zh/docs/how-to/graphql.md +++ b/docs/zh/docs/how-to/graphql.md @@ -21,7 +21,7 @@ * [Strawberry](https://strawberry.rocks/) 🍓 * 提供 [面向 FastAPI 的文档](https://strawberry.rocks/docs/integrations/fastapi) * [Ariadne](https://ariadnegraphql.org/) - * 提供 [面向 FastAPI 的文档](https://ariadnegraphql.org/docs/fastapi-integration) + * 提供 [面向 FastAPI 的文档](https://ariadnegraphql.org/server/Integrations/fastapi-integration) * [Tartiflette](https://tartiflette.io/) * 提供用于 ASGI 集成的 [Tartiflette ASGI](https://tartiflette.github.io/tartiflette-asgi/) * [Graphene](https://graphene-python.org/) 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 ecfdd0278b..de3891341e 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 @@ -24,7 +24,7 @@ FastAPI 0.128.0 也移除了对 `pydantic.v1` 的支持,因此最新版本的 ## 官方指南 { #official-guide } -Pydantic 有一份从 v1 迁移到 v2 的官方[迁移指南](https://docs.pydantic.dev/latest/migration/)。 +Pydantic 有一份从 v1 迁移到 v2 的官方[迁移指南](https://pydantic.dev/docs/validation/latest/get-started/migration/)。 其中包含变更内容、校验如何更准确更严格、可能的注意事项等。 @@ -80,7 +80,7 @@ Pydantic v2 以子模块 `pydantic.v1` 的形式包含了 Pydantic v1 的全部 ### 同一应用中同时使用 Pydantic v1 与 v2 { #pydantic-v1-and-v2-on-the-same-app } -Pydantic 不支持在一个 Pydantic v2 模型的字段中定义 Pydantic v1 模型,反之亦然。 +Pydantic **不支持**在一个 Pydantic v2 模型的字段中定义 Pydantic v1 模型,反之亦然。 ```mermaid graph TB @@ -120,7 +120,7 @@ graph TB style V2Field fill:#f9fff3 ``` -在某些情况下,甚至可以在 FastAPI 应用的同一个路径操作中同时使用 Pydantic v1 和 v2 模型: +在某些情况下,甚至可以在 FastAPI 应用的同一个 **路径操作** 中同时使用 Pydantic v1 和 v2 模型: {* ../../docs_src/pydantic_v1_in_v2/tutorial003_an_py310.py hl[2:3,6,12,21:22] *} diff --git a/docs/zh/docs/index.md b/docs/zh/docs/index.md index 6b75291fe1..74ca286391 100644 --- a/docs/zh/docs/index.md +++ b/docs/zh/docs/index.md @@ -110,7 +110,7 @@ FastAPI 是一个用于构建 API 的现代、快速(高性能)的 Web 框
“我们采用了 FastAPI 库来启动一个可查询获取预测结果的 REST 服务器。” [用于 Ludwig]-
“Netflix 很高兴宣布开源我们的危机管理编排框架:Dispatch!” [使用 FastAPI 构建]@@ -133,7 +133,7 @@ FastAPI 是一个用于构建 API 的现代、快速(高性能)的 Web 框 「_我们采用 **FastAPI** 库来启动一个可查询以获取**预测结果**的 **REST** 服务器。[用于 Ludwig]_」 -
-
## FastAPI 迷你纪录片 { #fastapi-mini-documentary }
在 2025 年末发布了一部 [FastAPI 迷你纪录片](https://www.youtube.com/watch?v=mpR8ngthqiE),你可以在线观看:
@@ -175,17 +169,17 @@ FastAPI 是一个用于构建 API 的现代、快速(高性能)的 Web 框
FastAPI 站在巨人的肩膀之上:
-* [Starlette](https://www.starlette.dev/) 负责 Web 部分。
-* [Pydantic](https://docs.pydantic.dev/) 负责数据部分。
+* [Starlette](https://starlette.dev/) 负责 Web 部分。
+* [Pydantic](https://pydantic.dev/docs/) 负责数据部分。
## 安装 { #installation }
-创建并激活一个 [虚拟环境](https://fastapi.tiangolo.com/zh/virtual-environments/),然后安装 FastAPI:
+首先,[安装 `uv`](https://docs.astral.sh/uv/getting-started/installation/),然后将 FastAPI 添加到你的项目中:
fastapi dev...
-### 使用 Python 枚举 { #working-with-python-enumerations }
+### 使用 Python *枚举* { #working-with-python-enumerations }
-路径参数的值是一个枚举成员。
+*路径参数*的值是一个*枚举成员*。
-#### 比较枚举成员 { #compare-enumeration-members }
+#### 比较*枚举成员* { #compare-enumeration-members }
-可以将其与枚举类 `ModelName` 中的枚举成员进行比较:
+可以将其与你创建的枚举 `ModelName` 中的*枚举成员*进行比较:
{* ../../docs_src/path_params/tutorial005_py310.py hl[17] *}
-#### 获取枚举值 { #get-the-enumeration-value }
+#### 获取*枚举值* { #get-the-enumeration-value }
使用 `model_name.value` 或通用的 `your_enum_member.value` 获取实际的值(本例中为 `str`):
@@ -182,11 +182,11 @@ API 文档会显示预定义路径参数的可用值:
///
-#### 返回枚举成员 { #return-enumeration-members }
+#### 返回*枚举成员* { #return-enumeration-members }
-即使嵌套在 JSON 请求体里(例如,`dict`),也可以从路径操作返回枚举成员。
+即使嵌套在 JSON 请求体里(例如,`dict`),也可以从你的*路径操作*返回*枚举成员*。
-返回给客户端之前,会把枚举成员转换为对应的值(本例中为字符串):
+返回给客户端之前,会把它们转换为对应的值(本例中为字符串):
{* ../../docs_src/path_params/tutorial005_py310.py hl[18,21,23] *}
@@ -201,29 +201,29 @@ API 文档会显示预定义路径参数的可用值:
## 包含路径的路径参数 { #path-parameters-containing-paths }
-假设路径操作的路径为 `/files/{file_path}`。
+假设你有一个路径为 `/files/{file_path}` 的*路径操作*。
-但需要 `file_path` 中也包含路径,比如,`home/johndoe/myfile.txt`。
+但需要 `file_path` 本身也包含*路径*,比如,`home/johndoe/myfile.txt`。
-此时,该文件的 URL 是这样的:`/files/home/johndoe/myfile.txt`。
+因此,该文件的 URL 可能是这样的:`/files/home/johndoe/myfile.txt`。
### OpenAPI 支持 { #openapi-support }
-OpenAPI 不支持声明包含路径的路径参数,因为这会导致测试和定义更加困难。
+OpenAPI 不支持声明内部包含*路径*的*路径参数*,因为这会导致测试和定义更加困难。
-不过,仍可使用 Starlette 内置工具在 **FastAPI** 中实现这一功能。
+不过,仍可使用 Starlette 内部工具之一在 **FastAPI** 中实现这一功能。
-而且不影响文档正常运行,但是不会添加该参数包含路径的说明。
+而且不影响文档正常运行,但是不会添加该参数应包含路径的说明。
### 路径转换器 { #path-convertor }
-直接使用 Starlette 的选项声明包含路径的路径参数:
+直接使用 Starlette 的选项,就可以用如下 URL 声明包含*路径*的*路径参数*:
```
/files/{file_path:path}
```
-本例中,参数名为 `file_path`,结尾部分的 `:path` 说明该参数应匹配路径。
+本例中,参数名为 `file_path`,结尾部分的 `:path` 说明该参数应匹配任意*路径*。
用法如下:
@@ -241,10 +241,10 @@ OpenAPI 不支持声明包含路径的路径参数,因为这会导致测试和
通过简短、直观的 Python 标准类型声明,**FastAPI** 可以获得:
-- 编辑器支持:错误检查,代码自动补全等
-- 数据 "解析"
-- 数据校验
-- API 注解和自动文档
+* 编辑器支持:错误检查,代码自动补全等
+* 数据 "解析"
+* 数据校验
+* API 注解和自动文档
只需要声明一次即可。
diff --git a/docs/zh/docs/tutorial/query-params-str-validations.md b/docs/zh/docs/tutorial/query-params-str-validations.md
index 0164c27e62..88d4306f0b 100644
--- a/docs/zh/docs/tutorial/query-params-str-validations.md
+++ b/docs/zh/docs/tutorial/query-params-str-validations.md
@@ -370,11 +370,11 @@ http://127.0.0.1:8000/items/?item-query=foobaritems
在这些情况下,你可以使用**自定义校验函数**,该函数会在正常校验之后应用(例如,在先校验值是 `str` 之后)。
-你可以在 `Annotated` 中使用 [Pydantic 的 `AfterValidator`](https://docs.pydantic.dev/latest/concepts/validators/#field-after-validator) 来实现。
+你可以在 `Annotated` 中使用 [Pydantic 的 `AfterValidator`](https://pydantic.dev/docs/validation/latest/concepts/validators/#field-after-validator) 来实现。
/// tip | 提示
-Pydantic 还有 [`BeforeValidator`](https://docs.pydantic.dev/latest/concepts/validators/#field-before-validator) 等。🤓
+Pydantic 还有 [`BeforeValidator`](https://pydantic.dev/docs/validation/latest/concepts/validators/#field-before-validator) 等。🤓
///
diff --git a/docs/zh/docs/tutorial/request-files.md b/docs/zh/docs/tutorial/request-files.md
index 38c089ff3f..8e98b547d4 100644
--- a/docs/zh/docs/tutorial/request-files.md
+++ b/docs/zh/docs/tutorial/request-files.md
@@ -6,10 +6,10 @@
要接收上传的文件,请先安装 [`python-multipart`](https://github.com/Kludex/python-multipart)。
-请确保你创建一个[虚拟环境](../virtual-environments.md)、激活它,然后安装,例如:
+将它添加到你的项目中:
```console
-$ pip install python-multipart
+$ uv add python-multipart
```
这是因为上传文件是以「表单数据」发送的。
@@ -151,7 +151,7 @@ HTML 表单(``)向服务器发送数据的方式通常会对数
它们会被关联到同一个通过「表单数据」发送的「表单字段」。
-要实现这一点,声明一个由 `bytes` 或 `UploadFile` 组成的列表(`List`):
+要实现这一点,声明一个由 `bytes` 或 `UploadFile` 组成的列表:
{* ../../docs_src/request_files/tutorial002_an_py310.py hl[10,15] *}
diff --git a/docs/zh/docs/tutorial/request-form-models.md b/docs/zh/docs/tutorial/request-form-models.md
index bbe805ef88..9b3de06179 100644
--- a/docs/zh/docs/tutorial/request-form-models.md
+++ b/docs/zh/docs/tutorial/request-form-models.md
@@ -6,10 +6,10 @@
要使用表单,首先安装 [`python-multipart`](https://github.com/Kludex/python-multipart)。
-确保你创建一个[虚拟环境](../virtual-environments.md),激活它,然后再安装,例如:
+将它添加到你的项目:
```console
-$ pip install python-multipart
+$ uv add 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 d972391368..b0e0052673 100644
--- a/docs/zh/docs/tutorial/request-forms-and-files.md
+++ b/docs/zh/docs/tutorial/request-forms-and-files.md
@@ -6,10 +6,10 @@ FastAPI 支持同时使用 `File` 和 `Form` 定义文件和表单字段。
接收上传的文件和/或表单数据,首先安装 [`python-multipart`](https://github.com/Kludex/python-multipart)。
-请先创建并激活一个[虚拟环境](../virtual-environments.md),然后再安装,例如:
+将它添加到你的项目中:
```console
-$ pip install python-multipart
+$ uv add python-multipart
```
///
diff --git a/docs/zh/docs/tutorial/request-forms.md b/docs/zh/docs/tutorial/request-forms.md
index 0e7f19c70d..6da128a83f 100644
--- a/docs/zh/docs/tutorial/request-forms.md
+++ b/docs/zh/docs/tutorial/request-forms.md
@@ -6,10 +6,10 @@
要使用表单,首先安装 [`python-multipart`](https://github.com/Kludex/python-multipart)。
-请先创建并激活一个[虚拟环境](../virtual-environments.md),然后再进行安装,例如:
+将其添加到你的项目中:
```console
-$ pip install python-multipart
+$ uv add python-multipart
```
///
diff --git a/docs/zh/docs/tutorial/response-model.md b/docs/zh/docs/tutorial/response-model.md
index 5d8d0c1859..5cdfee2176 100644
--- a/docs/zh/docs/tutorial/response-model.md
+++ b/docs/zh/docs/tutorial/response-model.md
@@ -76,16 +76,16 @@ FastAPI 会使用这个 `response_model` 来完成数据文档、校验等,并
要使用 `EmailStr`,首先安装 [`email-validator`](https://github.com/JoshData/python-email-validator)。
-请先创建并激活一个[虚拟环境](../virtual-environments.md),然后安装,例如:
+将它添加到你的项目中:
```console
-$ pip install email-validator
+$ uv add email-validator
```
-或者:
+或者使用:
```console
-$ pip install "pydantic[email]"
+$ uv add "pydantic[email]"
```
///
@@ -258,7 +258,7 @@ FastAPI 在内部配合 Pydantic 做了多项处理,确保不会把类继承
* `response_model_exclude_defaults=True`
* `response_model_exclude_none=True`
-详见 [Pydantic 文档](https://docs.pydantic.dev/1.10/usage/exporting_models/#modeldict)中对 `exclude_defaults` 和 `exclude_none` 的说明。
+详见 [Pydantic 文档](https://pydantic.dev/docs/validation/latest/concepts/serialization/#excluding-and-including-fields-based-on-their-value)中对 `exclude_defaults` 和 `exclude_none` 的说明。
///
diff --git a/docs/zh/docs/tutorial/schema-extra-example.md b/docs/zh/docs/tutorial/schema-extra-example.md
index b18e696410..a2ffcc8128 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 文档:配置](https://docs.pydantic.dev/latest/api/config/)。
+你可以使用属性 `model_config`,它接收一个 `dict`,详见 [Pydantic 文档:配置](https://pydantic.dev/docs/validation/latest/api/pydantic/config/)。
你可以设置 `"json_schema_extra"`,其值为一个 `dict`,包含你希望出现在生成 JSON Schema 中的任意附加数据,包括 `examples`。
diff --git a/docs/zh/docs/tutorial/security/first-steps.md b/docs/zh/docs/tutorial/security/first-steps.md
index ca3ef83527..52745820a2 100644
--- a/docs/zh/docs/tutorial/security/first-steps.md
+++ b/docs/zh/docs/tutorial/security/first-steps.md
@@ -1,6 +1,5 @@
# 安全 - 第一步 { #security-first-steps }
-
假设你的**后端** API 位于某个域名下。
而**前端**在另一个域名,或同一域名的不同路径(或在移动应用中)。
@@ -27,14 +26,14 @@
/// note | 注意
-当你使用命令 `pip install "fastapi[standard]"` 安装 **FastAPI** 时,[`python-multipart`](https://github.com/Kludex/python-multipart) 包会自动安装。
+当你运行 `uv add "fastapi[standard]"` 命令时,[`python-multipart`](https://github.com/Kludex/python-multipart) 包会随 **FastAPI** 自动安装。
-但是,如果你使用 `pip install fastapi`,默认不会包含 `python-multipart` 包。
+但是,如果你使用 `uv add fastapi` 命令,默认不会包含 `python-multipart` 包。
-如需手动安装,请先创建[虚拟环境](../../virtual-environments.md)、激活它,然后执行:
+如需手动安装,请把它添加到你的项目中:
```console
-$ pip install python-multipart
+$ uv add python-multipart
```
这是因为 **OAuth2** 使用“表单数据”来发送 `username` 和 `password`。
@@ -46,7 +45,7 @@ $ pip install python-multipart