首页 > 其他分享 >HTMX 和 FastAPI 绝佳搭配

HTMX 和 FastAPI 绝佳搭配

时间:2024-08-07 15:58:15浏览次数:9  
标签:绝佳 HTMX FastAPI 应用程序 item items 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
source venv/bin/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 后端配对是什么!

标签:绝佳,HTMX,FastAPI,应用程序,item,items,fastapi
From: https://blog.csdn.net/liuyukuan/article/details/140992013

相关文章

  • [python]使用gunivorn部署fastapi服务
    前言Gunicorn是一种流行的WSGIHTTP服务器,常用于部署Django和Flask等PythonWeb框架程序。Gunicorn具有轻量级、高稳定性和高性能等特性,可以轻易提高PythonWSGIApp运行时的性能。基本原理Gunicorn采用了pre-fork模型,也就是一个工作进程和多个worker进程的工作模式。在这个模......
  • FastAPI技巧
    文章目录依赖注入路径操作中的标签和摘要后台任务自定义异常处理中间件(Middleware)使用Pydantic进行数据验证:异步编程使用WebSockets使用FastAPI进行测试使用缓存优化性能使用`Response`对象自定义响应版本控制自定义路由类异步数据库操作事件处理器(EventHandler......
  • FastAPI Starlette Middleware 会话 - 重定向后无法访问会话数据
    我正在使用FastAPI作为后端编写一个简单的Web应用程序,并且我希望通过AzureB2C实现身份验证。这一切的逻辑现在并不重要,我只是想能够测试一下我是否可以使用不同的方法成功登录。但是,在尝试了很长一段时间之后,我不明白,为什么我可以重定向后不会从会话中检索用户的数据......
  • FastAPI oauth2 + jwt 延长每个请求的exp时间
    根据fastapi的示例,我们可以使用ouath2和json网络令牌为用户创建登录:fromdatetimeimportdatetime,timedelta,timezonefromtypingimportAnnotatedfromfastapiimportDepends,FastAPI,HTTPException,statusfromfastapi.securityimportOAuth2PasswordBearer,O......
  • Python框架-FastAPI
    FastAPI是一个现代、快速(高性能)的web框架,用于构建API。官网:https://fastapi.tiangolo.com/源码:https://github.com/fastapi/fastapi安装#安装FastAPIpipinstallfastapi#安装Uvicorn(用于运行ASGI服务器)pipinstalluvicorn创建一个main.pyfromfastapiimpor......
  • fastapi 使用websocket协议
      fastapi是一个高性能异步web框架,并且支持websocket协议。这是一个比较新的框架,但github上的Star数挺多,快追上flask了。1、websocket服务端的简单实现:@app.websocket('/test')asyncdefwebsocket_test(websocket:WebSocket):#服务器接受客户端的WebSocket连接请求。......
  • Python中FastAPI项目使用 Annotated的参数设计
    在FastAPI中,你可以使用PEP593中的Annotated类型来添加元数据到类型提示中。这个功能非常有用,因为它允许你在类型提示中添加更多的上下文信息,例如描述、默认值或其他自定义元数据。FastAPI支持Annotated类型,这使得你可以为路径操作函数的参数提供额外的元数据,例如依赖项、查询参......
  • fastapi 的uvicorn配置日志
      目前从flask框架转fastapi,之前flask框架日志很好用。这次学习了fastapi的日志使用,第一种是自定义日志,这个不讲了,自己封装就好,第二种是使用uvicorn自带日志,Uvicorn是fastapi框架的默认ASGI服务器,它提供了强大的异步能力和高性能。 一、配置输出格式化uvicorn其实已经......
  • 如何在 FastAPI 中同时接收 JSON 数据和文件上传
    我正在开发一个FastAPI项目,我需要在同一请求中接收JSON数据和文件上传。具体来说,我需要在JSON数据中传递整数数组,同时上传文件。这是我的请求正文的样子:标题(字符串)描述(字符串)评论(字符串)due_date(日期)优先级(字符串)signed_to(数组)整......
  • 如何检查多个依赖项中是否至少有一个在 Fastapi 中传递
    我有一个端点应该适用于两个不同的用户组,如果用户不属于任一组,我想给出正确的错误消息。对于这些组,我创建了也在其他端点中使用的依赖项:defis_teacher(email:str=Depends(get_email),db=Depends(get_db))->bool:teacher=...ifnotteacher:......