FastHTML 和 Heroku

构建 web 应用的新途径:告别 javascript,拥抱 fasthtml!

创建新应用或服务时,往往需要掌握多种工具和框架。Python 开发者通常需要学习 HTML、CSS 和 JavaScript 来构建 Web 应用,这无疑增加了学习曲线。而 Web 开发者则可能发现许多 Python 后端工具在 JavaScript 中的对应版本已过时。 您是否也面临着在 JavaScript 和 Python 之间难以抉择的困境?

FastHTML 应运而生,它填补了 Python 和 Web 开发之间的鸿沟。对于 Python 开发者,它简化了 Web 应用的创建过程——无需 JavaScript!对于 Web 开发者,它则提供了一种快速、简便的构建 Python 应用的方法,并可以选择使用 JavaScript 进行扩展,避免技术锁定。

作为一名 Web 开发者,我一直寻求更便捷的 Python 开发方式。因此,我决定尝试 FastHTML 的图像生成教程,并将其部署到 Heroku,亲身体验其速度和效率。

FastHTML 简介

立即学习“前端免费学习笔记(深入)”;

从未听说过 FastHTML?它被定义为:

FastHTML 是一个新一代 Web 框架,它通过简洁高效的代码,实现快速、可扩展的 Web 应用。其设计目标是:

功能强大,足以构建各种复杂的交互式 Web 应用。快速轻量,减少代码量,提高开发效率。易于学习和使用,语法简洁直观,快速构建复杂应用。

FastHTML 致力于构建轻量级、快速响应的 Web 应用。许多 Web 应用过于臃肿,简单的任务也需要大量的处理能力和带宽。而 FastHTML 旨在简化这一过程,让开发者轻松创建简洁、美观且易于使用的应用。

FastHTML 的设计理念受到 FastAPI 的启发,FastAPI 简化了 Python API 的创建,而 FastHTML 则致力于为前端应用提供同样的便利。

对简洁性和易用性的关注

FastHTML 的目标是“成为创建快速原型和可扩展、强大、丰富应用的最简单方法”。作为一个开发工具,FastHTML 注重简洁性和易用性,同时又不限制未来的扩展性。

它通过选择 ASGI 和 HTMX 等核心技术来实现快速启动和运行,并提升用户体验。FastHTML 的基础页面介绍了这些技术,但即使您不了解这些技术,也能轻松上手。

快速启动与运行

FastHTML 教程提供了多个不同应用示例。我选择了图像生成应用教程,并尝试将其转化为一个可用的 Web 应用。结果令人惊叹,速度非常快!

不到 60 行代码,我就创建了一个功能齐全的 Web 应用,用户可以输入提示并从免费的 Pollinations 文本到图像模型接收图像。

以下是该应用的演示:

FastHTML 和 Heroku

通过这个教程,我了解了 FastHTML 的一些强大功能,例如:

通过表单提交数据与外部 API 交互显示加载文本

令人印象深刻的是,仅使用一个小的 Python 文件就完成了所有这些功能,最终的应用轻量级且界面美观。以下是我的最终代码:

from fastcore.parallel import threadedfrom fasthtml.common import *import os, uvicorn, requests, replicatefrom pil import imageapp = fasthtml(hdrs=(picolink,))# store our generationsgenerations = []folder = f"gens/"os.makedirs(folder, exist_ok=True)# main page@app.get("/")def home():    inp = input(id="new-prompt", name="prompt", placeholder="enter a prompt")    add = form(group(inp, button("generate")), hx_post="/", target_id='gen-list', hx_swap="afterbegin")    gen_list = div(id='gen-list')    return title('image generation demo'), main(h1('magic image generation'), add, gen_list, cls='container')# a pending preview keeps polling this route until we return the image previewdef generation_preview(id):    if os.path.exists(f"gens/{id}.png"):        return div(img(src=f"/gens/{id}.png"), id=f'gen-{id}')    else:        return div("generating...", id=f'gen-{id}',                    hx_post=f"/generations/{id}",                   hx_trigger='every 1s', hx_swap='outerhtml')@app.post("/generations/{id}")def get(id:int): return generation_preview(id)# for images, css, etc.@app.get("/{fname:path}.{ext:static}")def static(fname:str, ext:str): return fileresponse(f'{fname}.{ext}')# generation route@app.post("/")def post(prompt:str):    id = len(generations)    generate_and_save(prompt, id)    generations.append(prompt)    clear_input =  input(id="new-prompt", name="prompt", placeholder="enter a prompt", hx_swap_oob='true')    return generation_preview(id), clear_input# url (for image generation)  def get_url(prompt):     return f"https://image.pollinations.ai/prompt/{prompt.replace(' ', '%20')}?model=flux&width=1024&height=1024&seed=42&nologo=true&enhance=true"@threadeddef generate_and_save(prompt, id):    full_url = get_url(prompt)    image.open(requests.get(full_url, stream=True).raw).save(f"{folder}/{id}.png")    return Trueif __name__ == '__main__': uvicorn.run("app:app", host='0.0.0.0', port=int(os.getenv("port", default=5000)))

教程还介绍了如何添加 CSS 样式、用户会话,甚至使用 Stripe 进行支付跟踪。虽然我没有全部尝试,但其潜力已显而易见:无需大量的样板代码或同时使用 Python 和 JavaScript,即可实现丰富的功能和良好的用户体验。

快速部署到 Heroku

本地运行的 Python 应用需要部署到云端才能被访问。Heroku 简化了这一过程。我添加了一个名为 Procfile 的文件,其中只有一行:

web: python app.py

这个文件告诉 Heroku 如何运行应用。Procfile 就绪后,我使用 Heroku CLI 创建并部署了我的应用。整个过程非常快速,从零到部署不到 45 秒。

FastHTML 和 Heroku

只需两个命令,我就创建、构建并部署了我的应用。最终结果令人满意:

FastHTML 和 Heroku

结论

发现 FastHTML 之后,我看到了构建应用的新可能性。其简洁性让我想到,未来可以尝试将它与其他工具集成,以提高开发效率。选择合适的工具是编程的关键。

FastHTML 为我打开了基于 Python 的应用开发的大门,而 Heroku 则简化了应用的部署过程。虽然 FastHTML 的一些基础概念对我来说比较新颖,但我期待在未来更深入地学习和使用它。

希望您也能享受 FastHTML 和 Heroku 带来的便利!祝您编程愉快!

以上就是FastHTML 和 Heroku的详细内容,更多请关注创想鸟其它相关文章!

版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。
如发现本站有涉嫌抄袭侵权/违法违规的内容, 请发送邮件至 chuangxiangniao@163.com 举报,一经查实,本站将立刻删除。
发布者:程序猿,转转请注明出处:https://www.chuangxiangniao.com/p/1355600.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
作为一名 drepress 程序员如何赚到第一笔钱
上一篇 2025年12月13日 19:20:32
构建 BLE 实时 macOS 菜单栏应用程序
下一篇 2025年12月13日 19:20:44

相关推荐

  • safari浏览器如何开启画中画模式播放视频_safari浏览器画中画模式开启方法

    如果您在观看网页视频时希望同时进行其他操作,可以启用 Safari 浏览器的画中画模式,让视频以浮动小窗形式继续播放。此功能支持大多数主流视频网站,如 YouTube、优酷等。 本文运行环境:MacBook Air,macOS Sonoma 一、通过视频右键菜单开启画中画 此方法适用于正在播放的视频…

    2026年9月23日
    000
  • FlexClip如何用于在线AI视频制作?快速创建云端AI视频的技巧

    FlexClip如何用于在线AI视频制作?快速创建云端AI视频的技巧FlexClip如何用于在线AI视频制作?快速创建云端AI视频的技巧FlexClip如何用于在线AI视频制作?快速创建云端AI视频的技巧FlexClip如何用于在线AI视频制作?快速创建云端AI视频的技巧

    FlexClip通过AI脚本生成、文本转视频、AI配音与图片生成等智能工具,实现从文案到成片的高效制作。其亮点在于一站式云端操作、强大内容生成力、素材库丰富、易用性与专业性兼备。用户可通过个性化修改、原创素材融入、精细剪辑及多轮迭代提升视频独特性,同时应对AI理解偏差、素材同质化、情感表达局限等挑战…

    2026年9月23日 用户投稿
    000
  • mysql怎么添加降序索引 mysql创建排序索引的语法详解

    mysql怎么添加降序索引 mysql创建排序索引的语法详解mysql怎么添加降序索引 mysql创建排序索引的语法详解mysql怎么添加降序索引 mysql创建排序索引的语法详解mysql怎么添加降序索引 mysql创建排序索引的语法详解

    mysql从8.0版本开始支持降序索引,通过在列名后添加desc关键字创建,例如create index idx_order_date_desc on orders (order_date desc);。1. 降序索引优化了order by column desc查询的性能,避免文件排序;2. 升序…

    2026年9月23日 用户投稿
    100
  • Java中使用栈验证JSON字符串结构:深入理解与实践

    本文探讨了在Java中利用栈验证JSON字符串结构的核心原理与常见陷阱。我们将分析一种初始实现中处理引号、转义字符及字符串内部结构字符的不足,并提供一个更健壮的栈基方法,以准确判断JSON的括号、方括号和引号是否平衡,同时纠正关于不完整JSON片段有效性的常见误解。 1. JSON结构与验证的重要性…

    2026年9月23日
    100
  • CentOS服务器安装宝塔(图文详解)

    CentOS服务器安装宝塔(图文详解)CentOS服务器安装宝塔(图文详解)CentOS服务器安装宝塔(图文详解)CentOS服务器安装宝塔(图文详解)

    一、概述 宝塔是一款安全且高效的服务器管理面板。 快速创建和管理web项目 提供方便的网站管理功能,例如域名绑定,一键部署SSL证书,调整网站配置等。 >>查看 快速查看服务器资源使用情况 监测CPU、内存、磁盘IO、网络IO数据,并可设置记录保存天数,随时查看特定日期的数据。 >…

    2026年9月23日 用户投稿
    100
  • mysql索引类型有哪些 mysql创建不同索引的方法对比

    mysql索引类型有哪些 mysql创建不同索引的方法对比mysql索引类型有哪些 mysql创建不同索引的方法对比mysql索引类型有哪些 mysql创建不同索引的方法对比mysql索引类型有哪些 mysql创建不同索引的方法对比

    mysql支持多种索引类型,选择合适的索引类型可提升数据库性能。1.b-tree索引适用于等值、范围查询和排序,是innodb和myisam的默认索引;2.hash索引仅适合等值查询,不支持范围和排序,memory引擎支持显式创建;3.fulltext索引用于文本搜索,适合关键词查找;4.空间索引(…

    2026年9月23日 用户投稿
    000
  • Tableau的AI混合工具如何操作?生成智能数据可视化的实用指南

    Tableau的AI混合工具通过自然语言查询、自动解释和预测模型,降低数据分析门槛,帮助非技术用户快速获取洞察。首先,Ask Data支持用日常语言提问,自动生成可视化图表,显著提升数据探索效率;其次,Explain Data利用机器学习分析异常点,揭示潜在影响因素,将“是什么”转化为“为什么”;再…

    2026年9月23日
    000
  • VSCode配置Java编程环境(手把手教学,环境搭建不求人)

    安装jdk并配置环境变量,推荐使用java 11或java 17等lts版本,通过命令行执行java -version和javac -version验证安装成功;2. 下载并安装vscode本体,按照默认安装流程完成;3. 在vscode中安装“extension pack for java”扩展包…

    2026年9月23日
    100
  • mysql安装完成如何事件 mysql定时任务设置教程

    mysql安装完成如何事件 mysql定时任务设置教程mysql安装完成如何事件 mysql定时任务设置教程mysql安装完成如何事件 mysql定时任务设置教程mysql安装完成如何事件 mysql定时任务设置教程

    要使用mysql的事件调度器设置定时任务,首先需开启事件调度器,其次创建定时事件,再查看管理事件,最后注意权限与时间格式等问题。具体步骤如下:1. 开启事件调度器:通过命令或配置文件启用;2. 创建事件:使用create event定义执行频率与sql操作;3. 管理事件:可查看、修改或删除已有事件…

    2026年9月23日 用户投稿
    100
  • OpenAI 与微软达成重磅交易:股权结构再变,投资者面临稀释风险

    据《金融时报》披露,OpenAI 近期完成了一系列关键性交易,使其股权架构日趋复杂,同时也加剧了投资者对未来收益前景的担忧。在这些新协议推动下,OpenAI 的估值已飙升至5000亿美元,跃居全球最具价值的未上市企业之列。这一惊人估值的背后,是公司与英伟达和AMD两家芯片巨头达成的数十亿美元合作协议…

    2026年9月23日
    000
  • NS2版《无主之地4》突遭延期!预购将取消

    《无主之地4》现可提前购入,使用金币叠加限时优惠券后,标准版仅需244.5元(共节省 ¥53.5);超级豪华版为457.4元(总计优惠 ¥100.6)。 原计划于10月3日发布的《无主之地4》Nintendo Switch 2版本已确认延期。Gearbox Entertainment最新发布公告称,…

    2026年9月23日
    200
  • 如何在mysql中优化多表JOIN查询

    答案:优化MySQL多表JOIN需创建关联字段索引、提前过滤数据、选择合适JOIN类型与表序、利用EXPLAIN分析执行计划,并定期更新统计信息以提升查询效率。 在MySQL中优化多表JOIN查询,关键在于减少数据扫描量、提升连接效率,并合理利用索引和执行计划。以下是一些实用的优化策略。 1. 确保…

    2026年9月23日
    300
  • WooCommerce 购物车联动:实现赠品自动添加与移除的专业指南

    本文提供了一份关于在 woocommerce 中实现自动赠品系统的全面指南。它解决了在程序化添加产品时常见的 `woocommerce_add_to_cart` 递归问题,并提供了一个使用自定义购物车项元数据来管理关联赠品的健壮解决方案,确保赠品能与特定主产品同步添加和移除。 引言 在电子商务中,为…

    2026年9月23日
    500
  • Java Web项目在无Maven/Eclipse环境下生成WAR包的实践指南

    本文详细介绍了如何在没有Maven或Eclipse等集成开发环境或构建工具的情况下,为Java Web项目手动或通过Apache Ant工具生成WAR文件。教程涵盖了WAR文件的基本结构、使用Ant进行编译和打包的具体步骤,并提供了Ant构建脚本示例,旨在帮助开发者理解并实践WAR包的独立构建过程。…

    2026年9月23日
    100
  • MySQL安装需要哪些硬件配置要求?

    MySQL安装需要哪些硬件配置要求?MySQL安装需要哪些硬件配置要求?MySQL安装需要哪些硬件配置要求?MySQL安装需要哪些硬件配置要求?

    mysql的硬件配置需根据应用场景和负载决定,生产环境应重点考虑磁盘i/o、内存、cpu和网络。1. cpu:oltp场景多核心更重要,olap则更依赖主频和缓存;2. 内存:buffer pool越大越好,但需避免过度分配导致swap使用;3. 磁盘i/o:ssd是标配,nvme ssd和raid…

    2026年9月23日 用户投稿
    200
  • 如何在Procreate中使用AI导出图片?保存高质量图像的正确方法

    Procreate无内置AI导出功能,但可通过导出高质量图像(如PSD、TIFF、PNG)供外部AI工具优化;选择格式需根据用途,PSD适合协作,TIFF用于印刷,PNG支持透明背景,JPEG慎用以避免压缩损失;画布应高DPI创建,色彩配置优先sRGB,印刷时后期转CMYK更精准。 ☞☞☞AI 智能…

    2026年9月23日
    100
  • VSCode极速配置Scala:sbt支持、中文文档、REPL集成

    安装JDK和sbt后,在VSCode中安装Metals扩展,即可快速搭建Scala开发环境;2. Metals通过LSP和BSP协议实现代码补全、错误检查、重构及sbt项目自动导入;3. 支持通过sbt shell启动REPL或使用Run Worksheet实现交互式编程;4. 虽无内置中文文档,但…

    2026年9月23日
    100
  • 优麒麟 25.10 版本正式发布

    优麒麟 25.10 正式版现已上线,此版本将提供长达9个月的支持周期,基于最新的 linux 6.17 内核打造,在基础库、子系统及核心组件等方面实现了全面升级,显著提升了系统的稳定性与兼容性,同时推出了焕然一新的软件商店。 新增特性 1. 搭载 Linux 6.17 内核 优麒麟 25.10 集成…

    2026年9月23日
    100
  • 蹭《丝之歌》热度吸引玩家?独立游戏开发者回应

    在如今高度饱和的独立游戏领域,如何让作品被更多玩家看见,成为每位开发者面临的难题。不少创作者开始借助热门话题来提升曝光,《Constance》的开发者btf便是其中之一。这款2D动作平台游戏近期频繁与备受期待的《空洞骑士:丝之歌》相提并论,引发了不少讨论。 部分玩家在社交平台上指出,《Constan…

    2026年9月23日
    400
  • linux如何优雅的关机

    优雅关机的三大法宝:拔电源、shutdown、poweroff 及其对硬件和数据的影响 在讨论关机方法之前,先了解一下机械硬盘的内部结构。 那固态硬盘SSD呢? FTL工作示意图。FTL表对SSD至关重要,如果在FTL写回Flash之前突然断电,内存数据丢失,FTL表也将丢失。因此,高端SSD和服务…

    2026年9月23日
    100

发表回复

登录后才能评论
关注微信