HTMX 和 FastAPI 绝佳搭配

news2024/9/23 10:19:22

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 后端配对是什么!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/1989890.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

Linux 中 core dump 异常的分析

目录 一、概述二、发生 core dump 的原因1. 空指针或非法指针2. 数组越界或指针越界3. 数据竞争 三、分析 core dump 的方法1. 启用 core dump2. 触发 core dump2.1 因空指针解引用而崩溃2.2 通过 信号触发 core dump 3. 利用 gdb 分析 core dump 一、概述 在 UNIX 系统中&…

sqli-labs第一关详细解答

首先判断是否有注入点 发现and 11 和 and 12结果一样&#xff0c;所以应该是字符型注入&#xff0c;需要对单引号做闭合 做闭合后发现报错&#xff0c;提示Limit 0,1&#xff0c;那就说明存在注入点&#xff0c;但是要注释掉后面的limit 0,1 使用--注释掉limit 0,1后&#xff…

25考研英语长难句Day05

25考研英语长难句Day05 【词组】【断句】 【词组】 单词解释gelimpsen.一瞥、瞥见rapidly adv.迅速&#xff1b;迅速地&#xff1b;高速&#xff1b;急速地&#xff1b;急促scene n.场景&#xff1b;&#xff08;尤指不愉快事件发生的)地点&#xff0c;现场&#xff1b;场面&a…

记录下泡面神器的满血复活-Kindle Voyage刷安卓系统记录

Kindle在国内已经没有服务了&#xff0c;一段时间内通过连手机热点(上下班通勤)&#xff0c;用内置浏览器访问微信读书&#xff0c;但体验不是很好&#xff0c;在考虑是否购买一个国内的墨水屏阅读器时&#xff0c;偶然想到了是否可以刷安卓&#xff0c;然后装微信读书的墨水屏…

超详细!网络安全知识入门及学习流程

第一章&#xff1a;网络安全的基本概念和术 一、网络安全的基本概念 1.保密性&#xff08;Confidentiality&#xff09; 定义&#xff1a;确保信息在存储、传输和处理过程中不被未授权的人员访问或获取。例子&#xff1a;企业的商业机密文件被加密存储&#xff0c;只有拥有正…

5个理由让你爱上CleanMyMac2025告别卡顿,迎接极速体验!

CleanMyMac是一款Mac电脑专用的清理工具&#xff0c;具有系统垃圾、大型旧文件、邮件附件、iTunes垃圾、软件卸载残余等清理功能。 它采用先进的扫描技术&#xff0c;快速识别并清除垃圾文件&#xff0c;释放磁盘空间&#xff0c;提高系统运行速度。 同时&#xff0c;它还具备…

Android经典实战之Kotlin中实现圆角图片和圆形图片

本文首发于公众号“AntDream”&#xff0c;欢迎微信搜索“AntDream”或扫描文章底部二维码关注&#xff0c;和我一起每天进步一点点 实现圆角是一个很常见的需求&#xff0c;也有很多种方式&#xff0c;这里介绍2种&#xff0c;实现起来都不麻烦&#xff0c;很方便 方法一&…

JS+CSS案例:可适应上下布局和左右布局的菜单(含二级菜单)

今天,我给大家分享一个原创的CSS菜单,整个菜单全由CSS写成,仅在切换布局时使用JS。合不合意,先看看效果图。 本例图片 接下来,我来详细给大家分享它的制作方法。 文件夹结构 因为涉及到了样式表切换,所以,你需要借鉴一下我的文件夹结构。 CSS文件夹: reset.css 用于…

【Dash】Dash Layout

一、Dash Layout Dash apps are composed of two parts. The first part is the layout, which describes what the app looks like. The second part describes the interactivity of the app. To get started, create a file named app.py, copy the code below into it, a…

Linux权限-chmod命令

作者介绍&#xff1a;简历上没有一个精通的运维工程师。希望大家多多关注作者&#xff0c;下面的思维导图也是预计更新的内容和当前进度(不定时更新)。 根据前面Linux用户介绍&#xff0c;里面涉及到超级管理员&#xff0c;普通用户&#xff0c;系统用户&#xff0c;既然用户有…

微信小程序-Vant组件库的使用

一. 在app.json里面删除style&#xff1a;v2 为了避免使用Vant组件库和微信小程序组件样式的相互影响 二.在app.json里面usingComponents注册Vant组件库的自定义组件 "usingComponents": {"van-icon": "./miniprogram_npm/vant-weapp/icon/index&qu…

Discourse 将主题打印成 PDF

Discourse 允许用户通过使用 打印主题&#xff08;Print topic&#xff09; 快捷键来生成 PDF 文件。这个快捷键针对操作系统的不同&#xff0c;可以通过键盘上的 ? 来进行查看。 大部分操作系统: ctrlpMacOS: ⌘p 使用快捷键后会打开一个新的浏览器窗口&#xff0c;在这个新…

【LeetCode每日一题】——653.两数之和 IV - 输入二叉搜索树

文章目录 一【题目类别】二【题目难度】三【题目编号】四【题目描述】五【题目示例】六【题目提示】七【解题思路】八【时间频度】九【代码实现】十【提交结果】 一【题目类别】 广度优先搜索 二【题目难度】 简单 三【题目编号】 653.两数之和 IV - 输入二叉搜索树 四【…

使用MAC电脑、iPhone 真机调试 H5页面

使用MAC电脑、iPhone 真机调试 H5页面 简介Safari 浏览器设置iPhone 手机设置开始调试 简介 为方便在 H5开发过程中在真实手机调试 H5页面&#xff0c;可进行一下设置 Safari 浏览器设置 在 Mac 电脑打开浏览器后&#xff0c;点左上角的" Safari 浏览器" -> “设…

Android OCR 谷歌OCR TextRecognition用法介绍

谷歌OCR TextRecognition用法介绍 文章目录 谷歌OCR TextRecognition用法介绍简介作用如何使用1 在project-build.gradle/setting.gradle添加maven仓库2.在module-build.gradle添加仓库依赖3.初始化4.使用InputImage5.进行识别 完整代码使用效果&#xff1a; 所有代码在Github-…

IEEE报告解读:存储技术发展趋势分析

1.引言 随着数据科学、物联网&#xff08;IoT&#xff09;和永久存储需求的快速增长&#xff0c;对大规模数据存储的需求正在迅速增加。存储技术的发展趋势直接关系到数据的可靠性和经济性。本文将根据IEEE最新发布的《2023年国际器件与系统路线图》&#xff0c;深入探讨各种存…

私网环境下如何使用云效流水线进行 CI/CD?

作者&#xff1a;怀虎 场景介绍 代码库、制品库等数据资产托管在内部办公网&#xff0c;公网不能访问&#xff0c;希望能够使用云效流水线进行 CICD 的编排和控制。 整体方案 云效流水线可以托管用户的私网环境内的机器&#xff0c;并将构建任务调度到这些机器上&#xff0…

PPT创作新纪元C-Ai PPT助手

前端必备工具推荐网站(免费图床、API和ChatAI等实用工具): http://luckycola.com.cn/ 解锁PPT创作新纪元 —— 遇见C-AiPPT助手 在这个快节奏的时代&#xff0c;无论是商务演示还是学术汇报&#xff0c;一份精美且内容丰富的PPT都是不可或缺的利器。但你是否曾为寻找合适的PPT…

81.SAP ME - SAP SMGW Getway Monitor

目录 1.起因 2.SMGW Displaying Logged On Clients Displaying Remote Gateways Display and Control Existing Connections Deleting a Connection Displaying Gateway Release Information Displaying Parameters and Attributes of the Gateway Change Gateway Pa…

QModbus例程分析

由于有一个Modebus上位机的需要&#xff0c;分析一下QModbus Slave的源代码&#xff0c;方便后面的开发。 什么是Modbus Modbus是一种常用的串行通信协议&#xff0c;被广泛应用于工业自动化领域。它最初由Modicon&#xff08;目前属于施耐德电气公司&#xff09;于1979年开发…