发布于 2026-01-06 0 阅读
0

FastAPI 和 HTML:一种现代化的全栈实现方法

FastAPI 和 HTML:一种现代化的全栈实现方法

上一篇文章中,我介绍了 HTML 是什么以及在应用程序中使用它的好处。HTML 可以解决许多前端问题,那么后端呢?我喜欢 Python 和 FastAPI,而 HTML 和 FastAPI 恰好可以完美结合。这两种技术的结合,可以为你提供一个简单而强大的端到端应用程序开发技术栈。让我们来看看它们是如何集成的!

FastAPI 的优势

FastAPI 是一个现代化的、快速(高性能)的 Web 框架,用于使用 Python 3.7 及更高版本构建 API,它基于标准的 Python 类型提示。以下是它的一些主要优势:

  • 性能:FastAPI 基于 Starlette 和 Pydantic 构建,速度与 NodeJS 和 Go 一样快(这要归功于 Starlette),并且是 Python 中最快的框架之一。
  • 易用性:它提供直观的 API,既易于使用又功能强大。由于其简洁性,您可以期待开发速度显著提升。
  • 自动生成文档:借助 FastAPI,您可以使用 Swagger UI 和 ReDoc 自动生成 API 文档,使开发人员更容易理解和使用您的 API。
  • 类型安全:FastAPI 利用 Python 类型提示,帮助在开发早期发现错误,从而生成更健壮、更无错误的代码。

HTMX 的优势

HTMX 是一个 JavaScript 库,它允许您直接在 HTML 中访问 AJAX、CSS 过渡、WebSocket 和服务器发送事件,使其成为无需编写复杂 JavaScript 代码即可增强网页动态内容的强大工具。其优势包括:

  • 简单易用:您可以使用 HTML 中的属性直接为网页添加动态行为,使网页更易于阅读和维护。
  • 渐进增强:HTML 可以作为现有服务器渲染页面的增强功能,使您可以逐步增强 Web 应用程序的交互性。
  • 无需复杂的 JavaScript 框架:借助 HTMX,您可以创建高度交互式的 Web 应用程序,而无需依赖笨重的 JavaScript 框架,从而加快加载速度并提高性能。

使用 FastAPI 和 HTMX 构建全栈应用程序

既然我们已经了解了它的好处,让我们深入创建一个简单的应用程序,该应用程序列出项目并允许用户动态地向列表中添加新项目。

步骤 1:设置您的项目

首先,创建一个新的项目目录并设置虚拟环境:

mkdir fastapi-htmx-demo
cd fastapi-htmx-demo
python3 -m venv venv
source venv/bin/activate
Enter fullscreen mode Exit fullscreen mode

安装 FastAPI、Uvicorn(ASGI 服务器)和 Jinja2(用于模板引擎):

pip install fastapi uvicorn jinja2 python-multipart
Enter fullscreen mode Exit fullscreen mode

步骤 2:创建 FastAPI 应用程序

创建一个名为 `<filename>` 的文件main.py,并设置您的 FastAPI 应用程序和路由:

from fastapi import FastAPI, Request, Form
from fastapi.responses import HTMLResponse
from fastapi.templating import Jinja2Templates

app = FastAPI()
templates = Jinja2Templates(directory="templates")

# Dummy datastore
items = ["Item 1", "Item 2"]

@app.get("/", response_class=HTMLResponse)
def get_items(request: Request):
    return templates.TemplateResponse("items.html", {"request": request, "items": items})

@app.post("/add-item")
def add_item(request: Request, item: str = Form(...)):
    items.append(item)
    return templates.TemplateResponse("partials/item.html", {"request": request, "item": item})
Enter fullscreen mode Exit fullscreen mode

步骤 3:设置 Jinja2 模板

创建templates目录并添加items.html文件:

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <title>FastAPI + HTMX Demo</title>
    <script src="https://unpkg.com/htmx.org"></script>
</head>
<body>
    <h1>Item List</h1>
    <ul id="item-list">
        {% for item in items %}
        <li>{{ item }}</li>
        {% endfor %}
    </ul>
    <form hx-post="/add-item" hx-target="#item-list" hx-swap="beforeend" hx-include="#item-input">
        <input type="text" id="item-input" name="item" required>
        <button type="submit">Add Item</button>
    </form>
</body>
</html>
Enter fullscreen mode Exit fullscreen mode

接下来,创建一个名为 `<template partial>` 的模板部分item.html。这将用于在浏览器中通过 `<HTML>` POST 调用添加新项目时,在 FastAPI 服务器中渲染新项目。

<li>{{ item }}</li>
Enter fullscreen mode Exit fullscreen mode

步骤 4:运行您的应用程序

使用 Uvicorn 运行您的应用程序:

uvicorn main:app --reload
Enter fullscreen mode Exit fullscreen mode

在浏览器中访问http://127.0.0.1:8000该网站,即可查看您的应用程序的实际运行效果。

如果您想在一个地方查看所有代码,请访问这里:https://github.com/jaydev/fastapi-htmx-demo

结论

FastAPI 提供强大的后端支持,兼具高性能和易开发性,而 HTML 则能以最小的努力实现动态的前端交互。这套技术栈学习曲线平缓,适用于各种场景。

我知道以后开发应用时我还会用到这种组合。欢迎在评论区告诉我你最喜欢的 HTML 后端搭配是什么!

文章来源:https://dev.to/jaydevm/fastapi-and-htmx-a-modern-approach-to-full-stack-bma