常见问题

常见问题解答

为什么我的编辑器提示我的 FastHTML 代码有错误?

许多编辑器,包括 Visual Studio Code,都使用 PyLance 为 Python 提供错误检查。然而,PyLance 的错误检查只是一个猜测——它无法真正知道你的代码是否正确。PyLance 尤其难以处理 FastHTML 的语法,这导致它经常在 FastHTML 项目中报告错误的错误信息。

为了避免这些误导性的错误信息,最好在你的 FastHTML 项目中禁用一些 PyLance 的错误检查。以下是在 Visual Studio Code 中的操作方法(同样的方法也应适用于其他基于 vscode 的编辑器,如 Cursor 和 GitHub Codespaces):

  1. 打开你的 FastHTML 项目
  2. Ctrl+Shift+P(在 Mac 上是 Cmd+Shift+P)打开命令面板
  3. 输入“Preferences: Open Workspace Settings (JSON)”并选择它
  4. 在打开的 JSON 文件中,添加以下几行
{
 "python.analysis.diagnosticSeverityOverrides": {
      "reportGeneralTypeIssues": "none",
      "reportOptionalMemberAccess": "none",
      "reportWildcardImportFromLibrary": "none",
      "reportRedeclaration": "none",
      "reportAttributeAccessIssue": "none",
      "reportInvalidTypeForm": "none",
      "reportAssignmentType": "none",
  }
}
  1. 保存文件

即使关闭了 PyLance 的诊断功能,你的 FastHTML 代码仍然可以正确运行。如果你仍然看到一些来自 PyLance 的假错误,你可以通过在你的设置中添加以下内容来完全禁用它:

{
  "python.analysis.ignore": [  "*"  ]
}

为什么使用独特的编码风格?

FastHTML 的编码风格是 fastai 编码风格

如果你来自数据科学背景,fastai 编码风格 可能已经成为你偏爱的风格。

如果你来自鼓励使用 ruff 的 PEP-8 背景,那么会有一个学习曲线。然而,一旦你习惯了 fastai 编码风格,你可能会发现自己开始欣赏这种风格的简洁性。它还鼓励使用更多的函数式编程工具,这既高效又有趣。话虽如此,这完全是可选的!

为什么不使用 JSX?

很多人问过这个问题!我们认为这样做没有好处……Python 的位置参数和关键字参数已经与 HTML/XML 的子元素和属性精确地 1:1 对应,所以没有必要创造一种新的语法。

我们在这里写了更多关于为什么选择 Python HTML 组件而不是 Jinja2、Mako 或 JSX 的想法:这里

为什么使用 import *

首先,通过在我们的 Python 模块中使用 __all__ 属性,我们控制了实际导入的内容。因此,没有命名空间污染的风险。

其次,我们的风格适合在相当紧凑的 Jupyter notebook 和小型 Python 模块中工作。因此,我们对自己 import * 的库的源代码很了解。这种简洁性意味着我们可以更快地开发。我们是一个小团队,任何我们能获得的优势对我们来说都很重要。

第三,对于外部库,无论是 Python 核心库、SQLAlchemy 还是其他库,我们确实倾向于使用显式导入。部分原因是为了避免命名空间冲突,也是为了作为参考,知道各个部分来自哪里。

最后我们要说的是,我们的许多用户都使用显式导入。如果你想走这条路,我们鼓励使用 from fasthtml import common as fhfh 这个缩写可以让你很容易地识别出一个符号是来自 FastHTML 库的。

FastHTML 可以用来制作仪表板吗?

是的,可以。事实上,它在构建仪表板方面表现出色。除了非常适合构建静态仪表板外,由于其基于 ASGI 的基础技术栈,FastHTML 原生支持 Websockets。这意味着使用 FastHTML 我们可以创建能够自动更新的仪表板。

为什么 FastHTML 是用 notebook 开发的?

有些人认为在 notebook 中编写软件是不好的。

请观看此视频。在过去的三年里,我们已经使用通过 nbdev 导出的 Jupyter notebook 编写了各种各样“非常严肃”的软件项目。这包括深度学习库、API 客户端、Python 语言扩展、终端用户界面、Web 框架等等!

nbdev 是一个由 Jupyter 驱动的软件编写工具。传统的编程环境会丢弃你在 REPL 或 notebook 中的探索结果。nbdev 则让探索成为你工作流程中不可或缺的一部分,同时还提倡软件工程的最佳实践。

为什么打包时不使用 pyproject.toml?

FastHTML 使用一个 setup.py 模块而不是 pyproject.toml 文件来配置其安装。原因在于 pyproject.tomlnbdev 不兼容,而后者是用来编写和构建 FastHTML 的工具。

nbdev 项目花了大约一年的时间试图迁移到 pyproject.toml,但基于 toml 的方法功能不足,无法完成过渡。