跳至內容

開發 - 貢獻

首先,您可能想先了解協助 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 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 連接埠上的文件不會發生衝突。

翻譯

非常歡迎協助翻譯!沒有社群的幫助,這是不可能完成的。 🌎 🚀

以下是如何協助翻譯的步驟。

技巧和準則

  • 檢查目前 現有的拉取請求 (Pull Request) 是否有您的語言。您可以使用語言標籤篩選拉取請求。例如,西班牙文的標籤是 lang-es

  • 審閱這些拉取請求,請求更改或批准它們。對於我不懂的語言,我會在合併之前等待其他人審閱翻譯。

提示

您可以 新增註解並提出修改建議 到現有的拉取請求。

查看有關 新增拉取請求審閱 的文件,以批准或請求更改。

  • 檢查是否有 GitHub 討論區 來協調您語言的翻譯。您可以訂閱它,當有新的拉取請求需要審閱時,會自動在討論區中新增評論。

  • 如果您翻譯頁面,請為每個翻譯的頁面新增一個拉取請求。這將使其他人更容易進行審閱。

  • 要檢查您要翻譯的語言的兩個字母代碼,您可以使用表格 ISO 639-1 代碼列表

現有語言

假設您要翻譯已有部分頁面翻譯的語言,例如西班牙文。

西班牙文的兩個字母代碼是 es。因此,西班牙文翻譯的目錄位於 docs/es/

提示

主要的(「官方」)語言是英文,位於 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/es/

$ cd docs/es/

然後在該目錄中執行 mkdocs

$ mkdocs serve --dev-addr 8008

現在您可以前往 http://127.0.0.1:8008 並即時查看您的變更。

您會看到每種語言都有所有頁面。但有些頁面尚未翻譯,頂部會有一個關於缺少翻譯的資訊方塊。

現在假設您要新增「功能」區段的翻譯 功能

  • 複製位於以下位置的檔案
docs/en/docs/features.md
  • 將其貼到完全相同的位置,但使用您要翻譯的語言,例如:
docs/es/docs/features.md

提示

請注意,路徑和檔案名稱中唯一的更改是語言代碼,從 en 更改為 es

如果您前往您的瀏覽器,您會看到現在文件顯示您的新區段(頂部的資訊方塊已消失)。🎉

現在您可以翻譯所有內容,並在儲存檔案時查看其外觀。

不要翻譯這些頁面

🚨 不要翻譯

  • reference/ 下的檔案
  • release-notes.md
  • fastapi-people.md
  • external-links.md
  • newsletter.md
  • management-tasks.md
  • management.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.ymldocs/ht/index.md 提交第一個拉取請求。🎉

預覽結果

如上所述,您可以使用帶有 live 命令的 ./scripts/docs.py 來預覽結果(或 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 | 注意。但不要更改 /// 後面的第一個詞,它決定了資訊方塊的顏色。

  • 不要更改圖片、程式碼檔案、Markdown 文件連結中的路徑。

  • 然而,當 Markdown 文件被翻譯後,連結到其標題的 #hash-parts(井字號片段)可能會改變。如果可能,請更新這些連結。

    • 使用正規表達式 #[^# ] 在翻譯後的文件中搜尋此類連結。
    • 在所有已翻譯成您的語言的文件中搜尋 your-translated-document.md(您已翻譯的文件.md)。例如,VS Code 有個選項「編輯」->「在檔案中尋找」。
    • 翻譯文件時,不要「預先翻譯」連結到未翻譯文件標題的 #hash-parts(井字號片段)。