Browse Source

Merge a59530e635 into cbd7d4895b

pull/12208/merge
LeoMax 2 weeks ago
committed by GitHub
parent
commit
58f987ae43
No known key found for this signature in database GPG Key ID: B5690EEEBB952194
  1. 12
      docs/zh/docs/async.md
  2. 2
      docs/zh/docs/how-to/index.md
  3. 8
      docs/zh/docs/python-types.md
  4. 8
      docs/zh/docs/tutorial/body.md
  5. 8
      docs/zh/docs/tutorial/first-steps.md
  6. 12
      docs/zh/docs/tutorial/index.md
  7. 32
      docs/zh/docs/tutorial/path-params.md

12
docs/zh/docs/async.md

@ -56,7 +56,7 @@ def results():
## 技术细节
Python 的现代版本支持通过一种叫**"协程"**——使用 `async``await` 语法的东西来写**”异步代码“**。
Python 的现代版本支持通过一种叫 **"协程"** ——使用 `async``await` 语法的东西来写 **"异步代码"**。
让我们在下面的部分中逐一介绍:
@ -285,7 +285,7 @@ CPU 密集型操作的常见示例是需要复杂的数学处理。
例如:
* **音频**或**图像**处理;
* **音频** **图像** 处理;
* **计算机视觉**: 一幅图像由数百万像素组成,每个像素有3种颜色值,处理通常需要同时对这些像素进行计算;
* **机器学习**: 它通常需要大量的"矩阵"和"向量"乘法。想象一个包含数字的巨大电子表格,并同时将所有数字相乘;
* **深度学习**: 这是机器学习的一个子领域,同样适用。只是没有一个数字的电子表格可以相乘,而是一个庞大的数字集合,在很多情况下,你需要使用一个特殊的处理器来构建和使用这些模型。
@ -296,7 +296,7 @@ CPU 密集型操作的常见示例是需要复杂的数学处理。
并且,你也可以利用并行和多进程(让多个进程并行运行)的优点来处理与机器学习系统中类似的 **CPU 密集型** 工作。
这一点,再加上 Python 是**数据科学**、机器学习(尤其是深度学习)的主要语言这一简单事实,使得 **FastAPI** 与数据科学/机器学习 Web API 和应用程序(以及其他许多应用程序)非常匹配。
这一点,再加上 Python 是 **数据科学**、机器学习(尤其是深度学习)的主要语言这一简单事实,使得 **FastAPI** 与数据科学/机器学习 Web API 和应用程序(以及其他许多应用程序)非常匹配。
了解如何在生产环境中实现这种并行性,可查看此文 [Deployment](deployment/index.md){.internal-link target=_blank}。
@ -387,7 +387,7 @@ Starlette (和 **FastAPI**) 是基于 <a href="https://anyio.readthedocs.io/
## 协程
**协程**只是 `async def` 函数返回的一个非常奇特的东西的称呼。Python 知道它有点像一个函数,它可以启动,也会在某个时刻结束,而且它可能会在内部暂停 ⏸ ,只要内部有一个 `await`
**协程** 只是 `async def` 函数返回的一个非常奇特的东西的称呼。Python 知道它有点像一个函数,它可以启动,也会在某个时刻结束,而且它可能会在内部暂停 ⏸ ,只要内部有一个 `await`
通过使用 `async``await` 的异步代码的所有功能大多数被概括为"协程"。它可以与 Go 的主要关键特性 "Goroutines" 相媲美。
@ -395,7 +395,7 @@ Starlette (和 **FastAPI**) 是基于 <a href="https://anyio.readthedocs.io/
让我们再来回顾下上文所说的:
> Python 的现代版本可以通过使用 `async``await` 语法创建**协程**,并用于支持**异步代码**。
> Python 的现代版本可以通过使用 `async``await` 语法创建 **协程**,并用于支持 **异步代码**
现在应该能明白其含义了。✨
@ -415,7 +415,7 @@ Starlette (和 **FastAPI**) 是基于 <a href="https://anyio.readthedocs.io/
### 路径操作函数
当你使用 `def` 而不是 `async def` 来声明一个*路径操作函数*时,它运行在外部的线程池中并等待其结果,而不是直接调用(因为它会阻塞服务器)。
当你使用 `def` 而不是 `async def` 来声明一个 **路径操作函数** 时,它运行在外部的线程池中并等待其结果,而不是直接调用(因为它会阻塞服务器)。
如果你使用过另一个不以上述方式工作的异步框架,并且你习惯于用普通的 `def` 定义普通的仅计算路径操作函数,以获得微小的性能增益(大约100纳秒),请注意,在 FastAPI 中,效果将完全相反。在这些情况下,最好使用 `async def`,除非路径操作函数内使用执行阻塞 <abbr title="输入/输出:磁盘读写,网络通讯.">I/O</abbr> 的代码。

2
docs/zh/docs/how-to/index.md

@ -8,6 +8,6 @@
/// tip | 小技巧
如果你想以系统的方式**学习 FastAPI**(推荐),请阅读 [教程 - 用户指南](../tutorial/index.md){.internal-link target=_blank} 的每一章节。
如果你想以系统的方式 **学习 FastAPI**(推荐),请阅读 [教程 - 用户指南](../tutorial/index.md){.internal-link target=_blank} 的每一章节。
///

8
docs/zh/docs/python-types.md

@ -1,12 +1,12 @@
# Python 类型提示简介
**Python 3.6+ 版本**加入了对"类型提示"的支持。
**Python 3.6+ 版本** 加入了对"类型提示"的支持。
这些**"类型提示"**是一种新的语法(在 Python 3.6 版本加入)用来声明一个变量的<abbr title="例如:str、int、float、bool">类型</abbr>
这些 **"类型提示"** 是一种新的语法(在 Python 3.6 版本加入)用来声明一个变量的<abbr title="例如:str、int、float、bool">类型</abbr>
通过声明变量的类型,编辑器和一些工具能给你提供更好的支持。
这只是一个关于 Python 类型提示的**快速入门 / 复习**。它仅涵盖与 **FastAPI** 一起使用所需的最少部分...实际上只有很少一点。
这只是一个关于 Python 类型提示的 **快速入门 / 复习**。它仅涵盖与 **FastAPI** 一起使用所需的最少部分...实际上只有很少一点。
整个 **FastAPI** 都基于这些类型提示构建,它们带来了许多优点和好处。
@ -230,7 +230,7 @@ John Doe
<a href="https://docs.pydantic.dev/" class="external-link" target="_blank">Pydantic</a> 是一个用来用来执行数据校验的 Python 库。
你可以将数据的"结构"声明为具有属性的类。
你可以将数据的 **"结构"** 声明为具有属性的类。
每个属性都拥有类型。

8
docs/zh/docs/tutorial/body.md

@ -1,12 +1,12 @@
# 请求体
FastAPI 使用**请求体**从客户端(例如浏览器)向 API 发送数据。
FastAPI 使用 **请求体** 从客户端(例如浏览器)向 API 发送数据。
**请求体**是客户端发送给 API 的数据。**响应体**是 API 发送给客户端的数据。
**请求体** 是客户端发送给 API 的数据。**响应体** `API` 发送给客户端的数据。
API 基本上肯定要发送**响应体**,但是客户端不一定发送**请求体**。
API 基本上肯定要发送 **响应体**,但是客户端不一定发送 **请求体**
使用 <a href="https://docs.pydantic.dev/" class="external-link" target="_blank">Pydantic</a> 模型声明**请求体**,能充分利用它的功能和优点。
使用 <a href="https://docs.pydantic.dev/" class="external-link" target="_blank">Pydantic</a> 模型声明 **请求体**,能充分利用它的功能和优点。
/// info | 说明

8
docs/zh/docs/tutorial/first-steps.md

@ -180,7 +180,7 @@ $ uvicorn main:my_awesome_api --reload
</div>
### 步骤 3:创建一个*路径操作*
### 步骤 3:创建一个 *路径操作*
#### 路径
@ -241,7 +241,7 @@ https://example.com/items/foo
我们也打算称呼它们为「操作」。
#### 定义一个*路径操作装饰器*
#### 定义一个 *路径操作装饰器*
{* ../../docs_src/first_steps/tutorial001.py hl[6] *}
@ -258,7 +258,7 @@ https://example.com/items/foo
装饰器接收位于其下方的函数并且用它完成一些工作。
在我们的例子中,这个装饰器告诉 **FastAPI** 位于其下方的函数对应着**路径** `/` 加上 `get` **操作**
在我们的例子中,这个装饰器告诉 **FastAPI** 位于其下方的函数对应着 **路径** `/` 加上 `get` **操作**
它是一个「**路径操作装饰器**」。
@ -289,7 +289,7 @@ https://example.com/items/foo
///
### 步骤 4:定义**路径操作函数**
### 步骤 4:定义 **路径操作函数**
这是我们的「**路径操作函数**」:

12
docs/zh/docs/tutorial/index.md

@ -58,13 +58,13 @@ $ pip install "fastapi[all]"
假如你想将应用程序部署到生产环境,你可能要执行以下操作:
```
``` shell
pip install fastapi
```
并且安装`uvicorn`来作为服务器:
```
``` shell
pip install "uvicorn[standard]"
```
@ -74,10 +74,10 @@ pip install "uvicorn[standard]"
## 进阶用户指南
在本**教程-用户指南**之后,你可以阅读**进阶用户指南**。
在本 **教程-用户指南** 之后,你可以阅读 **进阶用户指南**
**进阶用户指南**以本教程为基础,使用相同的概念,并教授一些额外的特性。
**进阶用户指南** 以本教程为基础,使用相同的概念,并教授一些额外的特性。
但是你应该先阅读**教程-用户指南**(即你现在正在阅读的内容)。
但是你应该先阅读 **教程-用户指南**(即你现在正在阅读的内容)。
教程经过精心设计,使你可以仅通过**教程-用户指南**来开发一个完整的应用程序,然后根据你的需要,使用**进阶用户指南**中的一些其他概念,以不同的方式来扩展它。
教程经过精心设计,使你可以仅通过 **教程-用户指南** 来开发一个完整的应用程序,然后根据你的需要,使用 **进阶用户指南** 中的一些其他概念,以不同的方式来扩展它。

32
docs/zh/docs/tutorial/path-params.md

@ -1,6 +1,6 @@
# 路径参数
FastAPI 支持使用 Python 字符串格式化语法声明**路径参数**(**变量**):
FastAPI 支持使用 Python 字符串格式化语法声明 **路径参数**(**变量**):
{* ../../docs_src/path_params/tutorial001.py hl[6:7] *}
@ -109,13 +109,13 @@ FastAPI 充分地利用了 <a href="https://docs.pydantic.dev/" class="external-
## 顺序很重要
有时,*路径操作*中的路径是写死的。
有时,*路径操作* 中的路径是写死的。
比如要使用 `/users/me` 获取当前用户的数据。
然后还要使用 `/users/{user_id}`,通过用户 ID 获取指定用户的数据。
由于*路径操作*是按顺序依次运行的,因此,一定要在 `/users/{user_id}` 之前声明 `/users/me`
由于 *路径操作* 是按顺序依次运行的,因此,一定要在 `/users/{user_id}` 之前声明 `/users/me`
{* ../../docs_src/path_params/tutorial003.py hl[6,11] *}
@ -129,7 +129,7 @@ FastAPI 充分地利用了 <a href="https://docs.pydantic.dev/" class="external-
导入 `Enum` 并创建继承自 `str``Enum` 的子类。
通过从 `str` 继承,API 文档就能把值的类型定义为**字符串**,并且能正确渲染。
通过从 `str` 继承,API 文档就能把值的类型定义为 **字符串**,并且能正确渲染。
然后,创建包含固定值的类属性,这些固定值是可用的有效值:
@ -147,31 +147,31 @@ Python 3.4 及之后版本支持<a href="https://docs.python.org/zh-cn/3/library
///
### 声明*路径参数*
### 声明 *路径参数*
使用 Enum 类(`ModelName`)创建使用类型注解的*路径参数*:
使用 `Enum` 类(`ModelName`)创建使用类型注解的 *路径参数*
{* ../../docs_src/path_params/tutorial005.py hl[16] *}
### 查看文档
API 文档会显示预定义*路径参数*的可用值:
API 文档会显示预定义 *路径参数*的可用值:
<img src="/img/tutorial/path-params/image03.png">
### 使用 Python _枚举类型_
*路径参数*的值是枚举的元素。
*路径参数* 的值是枚举的元素。
#### 比较*枚举元素*
#### 比较 *枚举元素*
枚举类 `ModelName` 中的*枚举元素*支持比较操作:
枚举类 `ModelName` 中的 *枚举元素* 支持比较操作:
{* ../../docs_src/path_params/tutorial005.py hl[17] *}
#### 获取*枚举值*
#### 获取 *枚举值*
使用 `model_name.value``your_enum_member.value` 获取实际的值(本例中为**字符串**):
使用 `model_name.value``your_enum_member.value` 获取实际的值(本例中为 **字符串**):
{* ../../docs_src/path_params/tutorial005.py hl[20] *}
@ -181,9 +181,9 @@ Python 3.4 及之后版本支持<a href="https://docs.python.org/zh-cn/3/library
///
#### 返回*枚举元素*
#### 返回 *枚举元素*
即使嵌套在 JSON 请求体里(例如, `dict`),也可以从*路径操作*返回*枚举元素*。
即使嵌套在 JSON 请求体里(例如, `dict`),也可以从 *路径操作* 返回 *枚举元素*
返回给客户端之前,要把枚举元素转换为对应的值(本例中为字符串):
@ -232,7 +232,7 @@ OpenAPI 不支持声明包含路径的*路径参数*,因为这会导致测试
注意,包含 `/home/johndoe/myfile.txt` 的路径参数要以斜杠(`/`)开头。
本例中的 URL 是 `/files//home/johndoe/myfile.txt`。注意,`files` 和 `home` 之间要使用**双斜杠**(`//`)。
本例中的 URL 是 `/files//home/johndoe/myfile.txt`。注意,`files` 和 `home` 之间要使用 **双斜杠**(`//`)。
///
@ -241,7 +241,7 @@ OpenAPI 不支持声明包含路径的*路径参数*,因为这会导致测试
通过简短、直观的 Python 标准类型声明,**FastAPI** 可以获得:
- 编辑器支持:错误检查,代码自动补全等
- 数据**<abbr title="把来自 HTTP 请求中的字符串转换为 Python 数据类型">解析</abbr>**
- 数据 **<abbr title="把来自 HTTP 请求中的字符串转换为 Python 数据类型">解析</abbr>**
- 数据校验
- API 注解和 API 文档

Loading…
Cancel
Save