HTMX 和 FastAPI 绝佳搭配

FastAPI的优势

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

  • 性能:FastAPI 基于 Starlette 和 Pydantic 构建,使其与 NodeJS 和 Go 一样快(感谢 Starlette),并且是最快的 Python 框架之一。
  • 易于使用:它提供了直观的 API,使其易于使用且功能强大。由于其简单性,您可以期待显着的开发速度。
  • 自动文档:借助 FastAPI,可以使用 Swagger UI 和 ReDoc 自动生成 API 文档,使开发人员更轻松地理解和使用您的 API。
  • 类型安全:利用 Python 类型提示,FastAPI 有助于在开发早期捕获错误,从而生成更健壮且无错误的代码。

HTMX 的优势

HTMX 是一个 JavaScript 库,允许您直接在 HTML 中访问 AJAX、CSS 、WebSocket 和SSE,使其成为使用动态内容增强网页的强大工具,而无需编写复杂的 JavaScript。其好处包括:

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

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

现在我们了解了好处,让我们深入创建一个简单的应用程序,该应用程序列出项目并允许用户动态地将新项目添加到列表中。

第 1 步:设置您的项目

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

mkdir fastapi-htmx-demo
cd fastapi-htmx-demo
python3 -m venv venv
venv\Scripts\activate

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

pip install fastapi uvicorn jinja2 python-multipart

第 2 步:创建 FastAPI 应用程序

创建一个名为 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})

 第 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>

接下来,在templates目录中创建partials子目录,在partials 目录中创建一个名为 item.html 的模板文件。这将用于在 FastAPI 服务器中呈现新项目,因为它们是通过浏览器中的 HTMX POST 调用添加的。

<li>{{ item }}</li>

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

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

uvicorn main:app --reload

在浏览器中访问 http://127.0.0.1:8000 以查看正在运行的应用程序。

如果您有兴趣查看所有代码,请猛戳:https://github.com/jaydev/fastapi-htmx-demo

 结论

FastAPI 提供强大的后端,提供高性能且易于开发,而 HTMX 则允许以最小的努力实现动态前端交互。该技术堆栈具有简单的学习曲线,并且在各种情况下都很有用。

我知道在未来我开发应用程序的时候我会尝试这种组合。请在评论中告诉我您最喜欢的 HTMX 后端配对是什么!

  • 19
    点赞
  • 9
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值