diff --git a/docs/zh/docs/tutorial/debugging.md b/docs/zh/docs/tutorial/debugging.md new file mode 100644 index 000000000..51801d498 --- /dev/null +++ b/docs/zh/docs/tutorial/debugging.md @@ -0,0 +1,108 @@ +# 调试 + +你可以在编辑器中连接调试器,例如使用 Visual Studio Code 或 PyCharm。 + +## 调用 `uvicorn` + +在你的 FastAPI 应用中直接导入 `uvicorn` 并运行: + +```Python hl_lines="1 15" +{!../../../docs_src/debugging/tutorial001.py!} +``` + +### 关于 `__name__ == "__main__"` + +`__name__ == "__main__"` 的主要目的是使用以下代码调用文件时执行一些代码: + +
+ +```console +$ python myapp.py +``` + +
+ +而当其它文件导入它时并不会被调用,像这样: + +```Python +from myapp import app +``` + +#### 更多细节 + +假设你的文件命名为 `myapp.py`。 + +如果你这样运行: + +
+ +```console +$ python myapp.py +``` + +
+ +那么文件中由 Python 自动创建的内部变量 `__name__`,会将字符串 `"__main__"` 作为值。 + +所以,下面这部分代码才会运行: + +```Python + uvicorn.run(app, host="0.0.0.0", port=8000) +``` + +--- + +如果你是导入这个模块(文件)就不会这样。 + +因此,如果你的另一个文件 `importer.py` 像这样: + +```Python +from myapp import app + +# Some more code +``` + +在这种情况下,`myapp.py` 内部的自动变量不会有值为 `"__main__"` 的变量 `__name__`。 + +所以,下面这一行不会被执行: + +```Python + uvicorn.run(app, host="0.0.0.0", port=8000) +``` + +!!! info + 更多信息请检查 Python 官方文档. + +## 使用你的调试器运行代码 + +由于是从代码直接运行的 Uvicorn 服务器,所以你可以从调试器直接调用 Python 程序(你的 FastAPI 应用)。 + +--- + +例如,你可以在 Visual Studio Code 中: + +* 进入到「调试」面板。 +* 「添加配置...」。 +* 选中「Python」 +* 运行「Python:当前文件(集成终端)」选项的调试器。 + +然后它会使用你的 **FastAPI** 代码开启服务器,停在断点处,等等。 + +看起来可能是这样: + + + +--- + +如果使用 Pycharm,你可以: + +* 打开「运行」菜单。 +* 选中「调试...」。 +* 然后出现一个上下文菜单。 +* 选择要调试的文件(本例中的 `main.py`)。 + +然后它会使用你的 **FastAPI** 代码开启服务器,停在断点处,等等。 + +看起来可能是这样: + + diff --git a/docs/zh/mkdocs.yml b/docs/zh/mkdocs.yml index 2546a9c01..9cea77745 100644 --- a/docs/zh/mkdocs.yml +++ b/docs/zh/mkdocs.yml @@ -79,6 +79,7 @@ nav: - tutorial/cors.md - tutorial/bigger-applications.md - tutorial/metadata.md + - tutorial/debugging.md - 高级用户指南: - advanced/index.md - advanced/path-operation-advanced-configuration.md