开发 - 贡献¶
首先,你可能需要了解 帮助 FastAPI 并获得帮助 的基本方式。
开发中¶
如果你已经克隆了 FastAPI 仓库 并想深入代码,这里有一些设置环境的指南。
虚拟环境¶
按照说明为 fastapi
的内部代码创建并激活 虚拟环境。
使用 pip 安装依赖¶
激活环境后,安装所需软件包
$ pip install -r requirements.txt
---> 100%
它将在你的本地环境中安装所有依赖项和你的本地 FastAPI。
使用本地 FastAPI¶
如果你创建一个导入并使用 FastAPI 的 Python 文件,并使用本地环境中的 Python 运行它,它将使用你克隆的本地 FastAPI 源代码。
如果你在再次运行该 Python 文件时更新本地 FastAPI 源代码,它将使用你刚刚编辑过的 FastAPI 的最新版本。
这样,你就不必“安装”你的本地版本就能测试每一次更改。
技术细节
这种情况只在你使用此随附的 requirements.txt
进行安装,而不是直接运行 pip install fastapi
时发生。
这是因为在 requirements.txt
文件中,FastAPI 的本地版本被标记为以“可编辑”模式安装,带有 -e
选项。
格式化代码¶
有一个脚本可以运行来格式化和清理你的所有代码
$ bash scripts/format.sh
它还会自动排序你所有的导入。
测试¶
有一个脚本可以在本地运行,用于测试所有代码并生成 HTML 格式的覆盖率报告
$ bash scripts/test-cov-html.sh
此命令会生成一个 ./htmlcov/
目录,如果你在浏览器中打开 ./htmlcov/index.html
文件,你可以交互式地探索代码中被测试覆盖的区域,并留意是否有任何区域缺失。
文档¶
首先,请确保你已按照上述说明设置好环境,这将安装所有依赖项。
文档实时预览¶
在本地开发期间,有一个脚本可以构建站点并检查任何更改,实现实时重载
$ python ./scripts/docs.py live
<span style="color: green;">[INFO]</span> Serving on http://127.0.0.1:8008
<span style="color: green;">[INFO]</span> Start watching changes
<span style="color: green;">[INFO]</span> Start detecting changes
它将在 http://127.0.0.1:8008
上提供文档服务。
这样,你就可以编辑文档/源文件并实时查看更改。
提示
或者,你可以手动执行脚本所做相同步骤。
进入语言目录,英文主文档位于 docs/en/
$ cd docs/en/
然后在该目录中运行 mkdocs
$ mkdocs serve --dev-addr 127.0.0.1:8008
Typer CLI (可选)¶
这里的说明展示了如何直接使用 python
程序运行 ./scripts/docs.py
脚本。
但你也可以使用 Typer CLI,安装补全功能后,你将在终端中获得命令的自动补全。
如果你安装了 Typer CLI,你可以通过以下方式安装补全功能
$ typer --install-completion
zsh completion installed in /home/user/.bashrc.
Completion will take effect once you restart the terminal.
文档结构¶
文档使用 MkDocs。
并且在 ./scripts/docs.py
中有一些额外的工具/脚本来处理翻译。
提示
你不需要查看 ./scripts/docs.py
中的代码,只需在命令行中使用它。
所有文档都以 Markdown 格式存储在 ./docs/en/
目录中。
许多教程都包含代码块。
在大多数情况下,这些代码块是实际的完整应用程序,可以直接运行。
事实上,这些代码块并非直接写在 Markdown 中,它们是 ./docs_src/
目录下的 Python 文件。
在生成站点时,这些 Python 文件会被包含/注入到文档中。
用于测试的文档¶
大多数测试实际上都针对文档中的示例源文件运行。
这有助于确保
- 文档是最新的。
- 文档示例可以直接运行。
- 大多数功能都通过文档涵盖,并通过测试覆盖率得到保证。
应用与文档同时运行¶
如果你运行示例,例如
$ fastapi dev tutorial001.py
<span style="color: green;">INFO</span>: Uvicorn running on http://127.0.0.1:8000 (Press CTRL+C to quit)
因为 Uvicorn 默认会使用 8000
端口,所以 8008
端口上的文档不会冲突。
翻译¶
非常感谢您在翻译方面的帮助!没有社区的帮助,这项工作无法完成。🌎 🚀
以下是帮助翻译的步骤。
提示和指南¶
-
检查当前 针对你的语言已有的拉取请求。你可以根据你的语言标签来筛选拉取请求。例如,对于西班牙语,标签是
lang-es
。 -
审查这些拉取请求,提出更改意见或批准它们。对于我不懂的语言,我会等待其他几位审查翻译后才进行合并。
-
查看是否有 GitHub 讨论 来协调你语言的翻译。你可以订阅它,当有新的拉取请求需要审查时,会自动在讨论中添加评论。
-
如果你翻译页面,请为每个翻译的页面提交一个单独的拉取请求。这将使其他人更容易审查。
-
要检查你想要翻译的语言的两位字母代码,你可以使用 ISO 639-1 代码列表 表格。
现有语言¶
假设你想为一个已经有部分页面翻译的语言(如西班牙语)翻译一个页面。
以西班牙语为例,其两位字母代码是 es
。因此,西班牙语翻译的目录位于 docs/
。
提示
主要(“官方”)语言是英语,位于 docs/en/
。
现在运行西班牙语文档的实时服务器
// Use the command "live" and pass the language code as a CLI argument
$ python ./scripts/docs.py live es
<span style="color: green;">[INFO]</span> Serving on http://127.0.0.1:8008
<span style="color: green;">[INFO]</span> Start watching changes
<span style="color: green;">[INFO]</span> Start detecting changes
提示
或者,你可以手动执行脚本所做相同步骤。
进入语言目录,西班牙语翻译位于 docs/
$ cd docs/
然后在该目录中运行 mkdocs
$ mkdocs serve --dev-addr 127.0.0.1:8008
现在你可以访问 http://127.0.0.1:8008 并实时查看你的更改。
你会看到每种语言都包含所有页面。但有些页面尚未翻译,并在顶部有一个信息框,提示缺少翻译。
现在假设你想为 特性 部分添加翻译。
- 复制文件位于
docs/en/docs/features.md
- 将其粘贴到完全相同的位置,但针对你想要翻译的语言,例如
docs/docs/features.md
提示
请注意,路径和文件名中唯一的更改是语言代码,从 en
变为 es
。
如果你打开浏览器,你会发现现在文档显示了你的新部分(顶部的信息框已消失)。🎉
现在你可以翻译所有内容,并在保存文件时查看其效果。
请勿翻译这些页面¶
🚨 请勿翻译
reference/
下的文件release-notes.md
fastapi-people.md
external-links.md
newsletter.md
management-tasks.md
management.md
contributing.md
其中一些文件更新非常频繁,翻译会一直滞后,或者它们包含来自英文源文件的主要内容等。
新语言¶
假设你想为一个尚未有任何页面翻译的语言添加翻译。
假设你想为克里奥尔语添加翻译,而文档中尚未有此语言。
查看上面的链接,”克里奥尔语“的代码是 ht
。
下一步是运行脚本以生成一个新的翻译目录
// Use the command new-lang, pass the language code as a CLI argument
$ python ./scripts/docs.py new-lang ht
Successfully initialized: docs/ht
现在你可以在代码编辑器中查看新创建的 docs/ht/
目录。
该命令创建了一个 docs/ht/mkdocs.yml
文件,其中包含一个简单的配置,继承了 en
版本的所有内容
INHERIT: ../en/mkdocs.yml
提示
你也可以手动创建该文件并填充这些内容。
该命令还为主页创建了一个虚拟文件 docs/ht/index.md
,你可以从翻译该文件开始。
你可以按照前面“现有语言”的说明继续该过程。
你可以用这两个文件 docs/ht/mkdocs.yml
和 docs/ht/index.md
提交第一个拉取请求。🎉
预览结果¶
如上所述,你可以使用 ./scripts/docs.py
配合 live
命令来预览结果(或使用 mkdocs serve
)。
完成后,你还可以测试它在线时的样子,包括所有其他语言。
要做到这一点,首先构建所有文档
// Use the command "build-all", this will take a bit
$ python ./scripts/docs.py build-all
Building docs for: en
Building docs for: es
Successfully built docs for: es
这会为每种语言构建所有独立的 MkDocs 站点,将它们组合起来,并在 ./site/
生成最终输出。
然后你可以使用 serve
命令来提供服务
// Use the command "serve" after running "build-all"
$ python ./scripts/docs.py serve
Warning: this is a very simple server. For development, use mkdocs serve instead.
This is here only to preview a site with translations already built.
Make sure you run the build-all command first.
Serving at: http://127.0.0.1:8008
翻译特有的提示和指南¶
-
只翻译 Markdown 文档 (
.md
)。不要翻译./docs_src
中的代码示例。 -
在 Markdown 文档的代码块中,翻译注释 (
# 一个注释
),但其余部分保持不变。 -
不要更改任何被“``”包围的内容(行内代码)。
-
以
///
开头的行,只翻译|
后的文本部分。其余保持不变。 -
你可以翻译像
/// warning
这样的信息框,例如翻译成/// warning | Achtung
。但不要更改///
后的单词,它决定了信息框的颜色。 -
不要更改图片、代码文件、Markdown 文档链接中的路径。
-
然而,当 Markdown 文档被翻译时,链接到其标题的
#hash-parts
可能会改变。如果可能,请更新这些链接。- 在翻译后的文档中使用正则表达式
#[^# ]
搜索此类链接。 - 在你已翻译成你的语言的所有文档中搜索
your-translated-document.md
。例如,VS Code 有一个选项“编辑”->“在文件中查找”。 - 翻译文档时,不要“预先翻译”链接到未翻译文档中标题的
#hash-parts
。
- 在翻译后的文档中使用正则表达式