你听说过HTMX吗?我们在这档节目中讨论过一两次。我们又回到HTMX的主题,这次带来一个真实的成功案例和一些经验教训。我们邀请了Sheena O'Connell来分享她如何从一个React-Django应用迁移到纯Django+HTMX应用的经历。
HTMX。这次,我们有了一个真实的成功案例和一些经验教训,我们邀请了Sheena O'Connell来分享。她如何从一个React-Django应用迁移到纯Django+HTMX应用。这真是一个精彩的案例。第484期节目于2024年10月29日录制,你准备好迎接你的收听了么?
请听好!你正在收听由Michael Kennedy主持的Talk Python To Me,这是一档关于Python的周播节目,由Python制作。
欢迎来到Talk Python To Me,这是一档关于Python的每周播客。我是你们的节目主持人Michael Kennedy。请在Mastodon上关注我@mkennedy,并关注播客@talkpython。这两个账号都在Mastodon.org上,请关注节目并收听我们超过九年的节目集锦。Talk Python To Me,DFM。
如果您想参与我们的现场直播,可以在YouTube上找到我们的直播。请订阅我们的YouTube频道Talk Python To Me/YouTube,以便及时了解即将播出的节目。本期节目由Posit赞助。Posit Connect是用于共享、部署和构建数据项目的工具,它支持Shiny、R Markdown、API和各种仪表板。
Posit Connect支持所有这些。通过访问talkpython.fm/posit,免费试用Posit Connect。本期节目还由Bluehost赞助。
您需要一个网站吗?Bluehost可以帮助您在几分钟内建立一个网站或博客,并提供内置工具来优化您的增长。立即访问talkpython.fm/bluehost开始吧。欢迎来到Talk Python To Me。
非常感谢。
很高兴能在这里。很高兴能有你在这里。我们有一个很棒的话题,一个我可能永远不会厌倦的话题,因为它非常实用,而且能让你快速完成任务。这次我们来谈谈HTMX的成功案例,或者说从一个单一应用迁移到多个应用。
我以前和一个朋友一起工作,我们彼此合作得很好,但我们各自负责不同的应用。然后我们切换到HTMX。你写了一篇关于这个主题的精彩文章,我们现在要深入探讨你的经验。
总体来说,这是一个非常棒的经历。当我第一次接触HTMX时,我真的很惊讶,因为有很多流行的前端库和框架。
当我第一次听说HTMX时,是在2022年。我当时在听圣诞节的演讲,这让我对HTMX很兴奋。从那时起,我的整个故事就开始了。在此之前,我一直在使用。
所以,我的团队正在开发一个项目,前端使用React。这在前端开发中很常见。如果你想开发一个现代化的前端应用,React或其他类似的框架是不错的选择。
然后,后端使用Django,我认为这是一种相当常见且被接受的做法,但我觉得它有点缺陷。我认为前端Web开发变得越来越复杂。
过去几年,有时使用一些工具确实很有帮助,但对于某些事情,我认为前端需要一些特定的工具。是的,我认为事情变得越来越复杂,或者说朝着复杂的方向发展。HTMX解决了许多问题。
但你回想一下,想想jQuery时代。你如何使用jQuery?你包含了jQuery,或者如果你很勇敢,你可能会下载它并将其包含在你的静态内容中,然后你就可以开始使用了,对吧?层层叠加。
2024年的JavaScript与十年前或十五年前的JavaScript大相径庭。JavaScript,我会说它比C++等语言更复杂的编程环境,因为有很多步骤,有很多隐式链接等等。
幕后有很多“黑魔法”。很难知道发生了什么。我认为一个挑战是,许多人最初接触Web开发是为了入门编程。
他们从Web开发开始,然后从那里分支出去。现在,它就像一个包含许多层的魔盒,我认为这给许多人带来了挑战,让他们难以入门。入门门槛比以前高了。
是的,整个生态系统有很多关键因素。所有这些步骤、幕后的“魔法”以及在完全不同的应用和思维方式之间切换的任务,对我来说,我一直很喜欢Django。
所以,我在开发的项目中使用了Django,因为我需要快速构建一个项目。效率对我来说很重要,当时React是一个不错的选择。但这意味着,为了在这个项目上工作,我需要同时记住Django应用和React应用,以及它们之间的交互方式。这不仅仅是React,还有Redux、Saga、中间件等等,以及Django后端的所有内容。我认为Django后端要容易理解得多。React确实是一个棘手的问题。
这是一个棘手的问题。我想在开始讨论之前先说明一点,这并不意味着我不喜欢JavaScript。在Node.js领域有很多HTMX的忠实用户。
我认为HTMX的好处,正如我们开始讨论它时你所提到的那样,并不明显。你刚才提到React前端,它有自己的状态。
它也有自己的能力,这些能力在客户端无法实现。它无法与文件系统或数据库交互,只能与应用交互。另一方面,Django应用可能无法与API交互,但它可以与数据库和服务器层交互。
当你开发应用时,你需要考虑,哦,这意味着没有数据库,这意味着部分数据库,对吧?你拥有这两个世界,如果你想只待在一个世界里,那么你可能会选择一种编程风格,而不是不断地在两者之间切换。
在两者之间,你还有浏览器功能、服务器功能以及浏览器信息,这并不高效。
这不好,对吧?所以,尽可能避免这种情况,HTMX致力于将所有内容保持在一个地方,我认为这是人们应该关注的关键点之一。
我们谈论JavaScript,我经常在需要的时候使用它。我认为它是一个很棒的工具,但切换上下文会降低效率。你需要记住所有这些内容。所以,当我开发这个应用并需要切换上下文时,我意识到,你只需要做一些事情,就能让事情发生。
例如,你需要四个不同的链式文件观察器来完成各自的任务。
所以,就像稍微慢一点,你可能希望事情更简单,更直接。HTMX可以做到这一点,它很漂亮,它与其他工具一起使用。是的。
对我来说,这种上下文切换非常痛苦,对我的团队来说也是如此。我的团队中有许多初级成员,很难让他们高效工作,因为我需要他们同时在Django和React上工作。
这很复杂,因为有React、Redux和Redux Saga。所以他们都非常痛苦。然后,要添加实际的功能。
你需要做垂直切片,对吧?它会影响大多数,如果不是全部,你可能需要修改React前端。
你可能需要一些新的UI设计和CSS,以及一些步骤。然后你做一些侧边栏,然后进行集成。
是的,对于一些人来说,期望他们掌握所有这些技能可能并不现实,然后你必须让你的团队变得复杂。你需要一个后端团队,他们需要彼此配合。所以,团队的堆栈变得复杂。
是的,对于大型公司来说,这可能很有意义。但对于小型公司来说,当你构建项目时,你需要考虑团队的技能,他们未来的技能,以及你可能需要加入团队的技能。所以,对我来说,将团队分开没有意义。如果我拥有让每个人从一开始就保持在同一平台上的工具,那就太好了。
很棒。让我们谈谈HTMX。我们已经谈论过它,但让我们更具体一些。
也许你可以告诉我们HTMX是什么,以及为什么它不是React的另一种变体?我们可以讨论一些例子。
我个人对HTMX的理解是,想象一下HTML,HTML会一直存在。
有很多尝试取代它的方法,但它们都不好。
是的,所以它可能会在可预见的未来一直存在,并且无处不在。如果我们可以稍微增强它,以便在现代Web开发中实现我们想要的功能,就像HTML一样。
HTML是一个非常简单的工具,但现在我们需要做所有这些额外的事情,因为人们期望用户界面具有交互性,期望有良好的工作负载等等。如果HTML可以做到这一点,它可以做到这一点,这其实并不难。
你只需要添加一些额外的属性。所以,HTMX是一个非常小的JavaScript库,你只需将其包含在你的页面中,就像过去使用jQuery一样。
你可以在HTML标签上添加一些额外的属性来完成不同的操作。例如,有很多不同的操作,但最常用的操作是绑定到事件,例如点击事件或其他事件。
然后,当你点击某个东西时,它会向后端发送请求,后端会用HTML片段响应,然后你将该片段替换到页面中的某个位置。
如果你查看HTMX文档,HTMX的“你好世界”示例是一个按钮,按钮上有一个属性,表示点击按钮时向特定URL发送POST请求。
然后,当响应到达时,你对响应的HTML做一些事情。它不是Django响应,它不需要转换为HTML。它就是普通的HTML。
所以,这很简单。然后你将HTML放在页面上的某个位置,例如,用返回的HTML替换你点击的按钮,或者将其放在其他元素的末尾。
你可以插入内容,替换整个元素。
你可以替换元素内部的内容,这个小模式非常强大。你可以绑定到各种不同的事件,例如点击或表单提交。你可以说,在加载时或滚动时等等。
所以,一个动机是,为什么表单只能发出GET请求?为什么点击事件只能触发点击和提交事件?是的,它就像扩展了HTML的功能,例如,你可以在HTML中点击按钮,但不能点击图像。
然后,就像你说的,交换HTML片段,而不是发送JSON,然后让客户端将其转换为HTML,而是直接在服务器端完成。
然后将其放在代码中,这很棒。这就像我们很久以前使用HTML一样简单。这让人们感觉很熟悉,那些很久以前就接触过Web开发的人会觉得很熟悉。代码本身很容易编写。
一开始你可能觉得不熟悉,但花几个小时你就会觉得很熟悉。这真是一个很棒的工具。
我也鼓励那些想尝试HTMX的人。网站上的示例非常全面,如果你仔细研究,你会发现很多。
是的,有很多。
然后,如果你深入研究每个示例,你会发现一些有趣的东西。
例如,第一个示例是一个静态HTML,包含一个标签、一个div和一个按钮,按钮上写着“点击编辑”。它使用HTMX的GET方法,并显示“编辑此内容”。当你点击它时,你会看到一些有趣的交互历史记录。
所以,当你点击“编辑”时,你会看到响应。它显示HTMX事件,然后它返回到静态HTML,我认为这是一种非常简单的方式来了解HTMX。你认为呢?
是的,我认为如此。我认为这些示例很棒。我喜欢将HTMX与Alpine.js结合使用。对我来说,HTMX非常适合在前后端传递数据。
但是,对于像这样的东西,我可能会使用Alpine.js来显示和隐藏表单,这也很棒,所以你不需要做很多事情。它可以减少前后端的交互,使行为更本地化。
你好,世界。这很酷,因为它就像HTMX,然后你只需在HTML标签上添加一些额外的属性。关键是你可以定义变量,这些变量就像状态,它们定义在定义它们的范围内。
所以,如果你,如果你有一个像 egg_started = False 这样的 JSON 对象,它就在 Steve 的作用域内,我们有一个名为 open 的相同变量,其初始值为 False。然后你可以做一些事情,比如点击一个按钮来将 open 更改为 True 或 total_ago open,这样你就可以有一个像显示表单,dw 强制。然后你可以说,然后你可以像说,这个 span extra = open。
所以我们只在特定情况下显示它。你也可以有像 not open,或者你可以有像一个 speaks java script。所以你可以在 . 中做一些有趣的事情。
那里也有。是的,这很有趣。这个,是的,我还没有真正使用过,但我确实经常听到 alpine 和 HTMX 一起被提及。它们确实有类似的感觉。
是的,是的,它们确实。它们确实。啊,我非常喜欢。我倾向于只用它来做一些小而简单的事情,但是这些简单的事情加起来。例如,如果你有打开和关闭的菜单等等,你可能想要一些。
像这样,是的,或者处理点击这个按钮并更改状态为这个,然后触发打开或关闭部分等等。你,是的,好的,很有趣。本部分的 Python 播客由 Posit 提供,Posit 是 Shiny 的制造商,以前是我们的工作室,尤其是在 Python 中使用 Shiny。
让我问你一个问题,你正在构建很棒的东西吗?当然,你是。你是开发人员,数据科学家。这就是我们所做的。你应该查看 Posit Connect。
Posit Connect 是一种发布、共享和部署你正在使用 Python 构建的所有数据产品的途径。人们总是问我同样的问题。迈克尔,我有一些很酷的数据科学项目或我构建的书。
我该如何与我的用户分享?保持关注。团队成员,我需要快速学习。P,我使用 Flask,也许你会使用 React。
现在,这些都是很酷的技术,我相信你会从中受益,但也许应该专注于数据项目。让 Posit Connect 处理那方面的事情。使用 Posit Connect,你可以快速安全地部署你用 Python、Streamlit、Dash、Shiny、快速 P、I、Flash、Quarto 库、Dash 组件和 APS 构建的东西。Posit Connect 支持所有这些,Posit Connect 附带所有必要的工具来满足 IT 和其他企业需求。
让部署成为你工作流程中最简单的步骤,使用 Posit Connect,在有限的时间内,你可以免费试用 Posit Connect 三个月,访问 talkpython.fm/posit。链接在你的播客播放器中。感谢 Posit 团队支持 Talk Python。我提供的一个例子,我正在做的工作中,我绝对在 Talk Python 的 HTMX 课程中使用 HTMX。我添加了这个小标签。
云并非完全是云,而是很多不同的东西。所以当你加载这个页面时,真正具有挑战性的事情之一是它以你的当地货币显示价格。所以它会弄清楚你在哪里,你住在哪里,以及相应的货币。
这些东西的价格,你知道,在美国以外的地方变化很大,它非常。有时这可能非常慢。
弄清楚所有课程的销售价格,以及你在哪个国家,以及它的应用方式。所有这些价格都是通过 HTMX 计算的。所以它通常会先加载没有价格,然后当你到达那里时,价格会自动显示。
然后,当你点击周围时,你会看到,当你点击这里的小标签时,你甚至可以点击 HTMX 代理或三个 HTMX 课程,这是去年发布的,以及一个仅使用它的课程。但是所有这些,这都不是一个 JavaScript 页面,至少不是在做任何这些,这都是 HTMX 的工作。这很棒。
非常好,非常好。所以,我当然已经开始使用它,但让我们谈谈,对,让我们谈谈你开始使用 HTMX 的故事。我的意思是,你已经给我们提供了一些感觉,但让我们谈谈你正在构建的应用程序,对吧?你有一个几乎全是初级开发人员的团队。
当时的故事是,我在南非的一个非营利组织工作。我们以前让每个人都在这个名为杰基镇的地方工作,这是一个非常偏远的地方。
这很棒。这很有趣。但是后来代码出现了。
所以我们必须想办法远程支持每个人。所以,但是动物。所以最初,我们像这样查看了动物管理系统。
我们有另一个学习者。我想当时大约有 150 人。我们需要想办法从家里支持他们。我们不能只是说明年回来,因为那样的话,我们不能让他们失望。大部分的资金模式在各种事情上都不适用。所以,我经历了我们历史上最疯狂的时期,因为我们已经超越了它。
这是一个可怕的故事,从那时起,我就像这样。我就像,超级,超级紧张。但最终,我们得到了很酷的东西。
所以,很多元素都存在。你可以得到现成的。有很多非常聪明的教科书,它们会随着时间的推移跟踪课程,而我们正在培训。
我们正在培训软件开发人员。所以我们想要比教科书更多的东西。我们想培训专业人士。所以我们最终从学习的角度构建了这个东西,这是一个看板。然后他们可以在看板上移动卡片来做不同的事情,比如开始一个项目,然后为他们创建一个存储库,将他们添加为合作者,保护主分支等等。然后我们可以让他们互相审查,并跟踪所有这些。
然后他们开始工作,他们总是非常出色,进入他们的第一份工作,然后说,这很熟悉,我们知道如何做这个和那个。
这真的让我在教人们。
这里的东西实际上很奇怪,是的,完全正确。
是的。
构建这个东西并设法继续培训人们,这有效。然后它就像,好吧,这个东西有点粗糙,因为我们添加了一些自适应功能。我希望它能工作。所以我们需要进一步构建它。我们正在招聘很多初级开发人员,因为我们正在培训非常大规模的东西。
所以,如果你想教一个人什么是返回语句、什么是循环,或者任何类似的东西,你不需要高级开发人员或高级讲师,你需要有人理解什么是这个和更好的返回语句。所以他让所有这些初级开发人员四处走动,帮助他们,他们也需要通过自己的成长来构建东西,以及他们自己的,如果他们不构建东西,那么他们就构建了。我说,所以,是的,他们正在尝试让这些初级开发人员在该堆栈上高效工作。
但这非常困难。所以对我来说,是的,我一直在从事 React 应用程序的工作,我一直在从事 Django 的工作。所以对我来说,这没问题。
我可以像这样,我可以把所有东西都记在脑子里,但这对他们来说非常困难。我认为让初级开发人员高效工作需要一些技巧,但我没有弄清楚。所以,我尝试了一段时间,然后有一天去了美国,看到了关于 HTMX 的圣诞节演讲。我当时就想,也许值得一试。然后,就像,好吧,让我们证明概念,看看我是否可以在 HTMX 中构建我们应用程序中最奇怪的部分。
如果你想知道它是否有效,这可能是最疯狂的交互部分。如果我们可以做到这一点,其他事情就容易了,比如切换登录和注销,就像好的。我们的大部分功能都围绕着看板。制作一些卡片,制作一些列,看看我是否可以移动东西。这运作得非常好,而且并不难。我认为 HTMX 的一个挑战是,很容易构建大型模板,因为你有一个主模板,所有这些部分,你需要,然后所有这些指向部分的元素。
所以,你可能会陷入困境。你需要很好地安排事情。但是,这个过程非常顺利,所以我尝试了这个。
我们的应用程序是 Django 应用程序,在后端使用 Django 框架。所以想法是,而不是像我们那样,我们保留 React 前端,继续工作。同时,我们只需构建完全正常的 Django 视图来处理 HTMX,然后我们可以将每个人迁移到新应用程序。
所以新的前端是原始 Django 应用程序的一部分。所以我们没有完全重新构建所有内容。我们只是重新设计了它。一般来说,如果有人建议重新构建某物,我通常会担心,通常这是一个坏主意,通常是网站或类似的东西。是的,我不得不阻止自己很多次。
你知道吗?大卫·吉约的视频,是的,看看。我会在这里放一个链接。它有一些很棒的时刻。
一旦它成为一个六分半的美国派重写,我们将进行重写,对吧?这很辉煌。我会链接它,但你应该害怕,对吧?这是我们重写它的东西。基本上,这首歌是关于八个版本,八种不同的语言,以前用这些语言编写的东西,你知道,即使它不完美,它也能在一段时间内工作。你,是的。
他还想重写它,以便针对这个主要由初级开发人员组成的团队进行优化。所以,我就像,这我疯了吗?我非常不确定。
所以我尝试了所有这些,它运作良好,它很有趣。我就像,直接写六个小东西。然后我就像,让我看看团队如何处理这个,所以我给了他们一些小任务来完成,因为我正在实施它,尝试它。每个人都高效工作。
当你在他们面前提出这个想法时,他们是如何接受它的?他们已经生活在 React 和 Redux 等等之中。
他们对此很满意。我认为他们一开始有点怀疑。但是一旦我开始,就像我那样,从他们那里获得反馈,我确保从他们那里获得反馈。HTMX 更好。所以这很棒。
我非常喜欢。诀窍是什么?
为什么这有效?所以他们与专家合作,然后他们成功了,他们很高兴,很有效率,这很棒。即使是那些需要我太多支持的人,那些我必须真正坐下来与他们配对才能做任何事情的人,他们能够做有意义的事情。所以对我来说,这是 HTMX 最令人兴奋的事情之一。
我一直在教育领域工作这么久,我一直都在努力让开发人员做好准备,所以我知道教育生态系统、初级招聘生态系统以及入门级职位对人们来说太难了,这是一个问题。现在我们有工具可以使 Web 开发更易于上手。所以,我正在唱这首歌,因为我认为它将在某些方面改变行业。我认为它已经开始产生影响,但我希望它能更快地发生。
更大,是的,我认为它也会如此。你知道,我认为当前的框架很好,与 HTMX 很好地配合使用。但我不知道,我不会感到惊讶,看到类似快速应用程序的框架出现,并说 Python 是这个东西的核心。Python 改变了很多数据,改变了很多数据评估。我不知道是否会有一个框架出现,它只是将 HTMX 作为其核心的一部分,看看它是什么样子。
这很有趣。我认为它们确实提供了有用的模式,以及如何将不同的事情结合在一起。人们正在围绕它构建工具,或者以有用的方式使用它。我们谈到了 Alpine.js。还有另一个名为 django-template-partials 的工具,来自 GitHub。这真的很好。
像这样的东西非常需要,让代码从“我们也可以做到”变成“哦,这很好”。是的,是的。
这真的非常有帮助,这很棒。这是我目前最喜欢的工具之一。我有一个用于姜饼卡游戏的,姜饼部分,以及一些其他部分。所以,我使用它,当然,例如,这实际上是,所以我使用 django-template-partials,像这样的东西是必要的,你知道,django-template-partials 做了很棒的工作。是的,所以你将其用作网站的一部分。
所以,不是最初的网站,只是后来才听说过它,但现在我将它用于所有 HTMX 相关的东西。我使用它。
告诉人们它做了什么,就像你需要什么部分而不是一个普通的模板。
这只是关于以更干净的方式组织你的代码。所以,如果你考虑如何组织你的模板,从你的不同视图开始,如果你有一个主页面,然后该页面有许多 HTMX 相关的事情发生,这些事情调用了后端中的不同视图。这些不同的视图使用不同的模板。
即使所有这些模板都与同一个页面相关联,它们最终也会变得有点混乱,你有很多不同的部分模板。所以你需要一个很棒的命名约定,就像页面、模板一样。它变得有点混乱,你必须不断地在文件中切换来查看哪些东西相互关联。假设你只有五个页面,每个页面都有五个不同的部分模板与之关联。
突然间,有很多文件,你需要以某种方式组织它们。所以 django-template-partials 试图解决这个问题,这允许你,就像,假设你有一个主页面文件来列出,对吧?你可以在同一个文件中定义一个部分模板,用于该页面中的项目。
它不会在你说渲染这个东西之前渲染,所以你可以,当你第一次渲染你的模板时,你可以说,好的,如果你遍历项目并将其替换为部分模板,然后渲染这些东西,这很棒。但是,你还可以做另一件事,你可以在视图中选择渲染模板,也可以选择在模板中渲染部分模板。
假设你有一个小表单来添加新待办事项项目,那么你提交该表单,然后视图会在你关心的页面中查找部分模板。所以最终,所有东西都整洁地放在一起。这很有意义,因为待办事项项目只用于该页面,这些项目只用于该页面。
使用这种 HTMX 部分交换样式,你很快会遇到的一个主要挑战是,当你最初显示页面时,你只想使用服务器渲染版本,它包括,例如,你的待办事项项目。所以你需要在主页面中包含待办事项项目。但是,当你更改它时,你需要一个小的片段来将新待办事项项目添加到其中,或者编辑一个或类似的东西。
如果你不小心,当你有多个副本时,有人更新了一个设计,但你编写的部分副本没有更新,这看起来不太好。所以,找到一种重用 Django 模板部分的方法非常重要。我认为,如果你说函数是必要的,正确的代码,它基本上就是这样。
对吧?我认为你可以使用很多文件来避免这种情况,并且可以使用很多文件来保持代码简洁。但是,它变得非常混乱,你必须投入大量精力来组织它,并且让它保持组织,因为人们会做一些奇怪的事情。所以,是的,最好默认情况下就拥有它,对吧?是的。
是的。所以,获取一个库。本 Talk Python 播客部分由 Bluehost 提供,你有一些想法,但不知道如何拥有一个网站。使用 Bluehost 的 AI 设计工具,你可以快速生成高质量、加载速度快的网站,并在需要时立即上线。
这真的很简单,无论你是业余创业者还是刚刚开始副业,蓝主机都能满足你的需求,内置的营销和电子商务工具可以帮助你发展和扩展你的网站,以便长期运营。既然你正在收听我的节目,你可能已经了解 Python,但有时最好专注于你正在创建的内容,而不是定制一个网站,并让你的想法再推迟一个月才能发布。当你使用蓝主机云时,你将获得百分之百的时间和 24/7 的支持,以确保你的网站在高流量下保持在线。
蓝主机确实让构建你的梦想网站变得比以往任何时候都更容易。还有什么阻碍你呢?你已经有了愿景,现在就让它成为现实,立即访问 talkpython.fm/bluehost,开始你的旅程,感谢蓝主机对节目的支持。让我们谈谈前后端堆栈。在之前,你谈到了 React,但请告诉我们今天涉及的所有组件,它们看起来是什么样子?
所以,我使用 X 来进行状态管理,然后我使用 X 来处理大部分的杂事,以便我可以处理加载指示器,并实时查看不同请求的状态等等。然后我使用了 Material UI,因为我的前端美化技能很强,我希望它能发挥作用。我创建了一个组件库,它可以正常工作,这对我来说非常重要。
然后,后端使用 Django 框架,它非常有名。然后我使用 Django Guardian,因为我需要对不同模型实例的对象级权限。例如,我们有一个看板,看板上有用户可以移动的卡片,不同用户对不同卡片有不同的权限。
所以,我们有像一个开发人员正在处理一张卡片,然后他们要求进行审查,然后另一个开发人员应该能够进行审查。但是我们不希望任何人都能查看他们的代码,因为这会导致问题。所以,就像,这个人已经完成了这个项目,所以我们可以将他们添加到这张卡片的审查者列表中。因此,我们需要非常明确地确定哪些用户可以查看哪些内容,这并不简单,而是需要明确这个人可以查看这些内容的原因。Django Guardian 库非常棒,而且使用起来很方便。
这真是一个很棒的库。也许人们可以找到像这样的库的不错用途,因为对我来说它还是新的。
这真是太好了。你甚至可以做一些事情,例如,当你查询数据库并说“获取所有卡片”时,你可以做一些事情,例如“获取所有未完成的卡片”。只要配置得当,我就可以做这类事情,这非常有用。
这真是太棒了。所以你不需要获取所有卡片,然后确定所有这些不同的权限,然后构建一些查询来找出结果。
是的,非常棒,我喜欢。这与 DRF(Django REST Framework)也相关。所以,就像你的视图集一样,你可能已经使用了一段时间,但是当你在访问 API 端点时,使用的查询会自动提供。
所以,在这种情况下,你不需要构建它。它可以与所有这些东西很好地集成。我们之前使用过广告,然后……然后它很棒。
现在我猜大部分前端内容都是问题。
旧应用程序仍然存在,但它不再是主要部分。但是,基于 HTMX 的版本将只是一个简单的替换。所以,我转而使用 HTMX。
现在已经完成了,你说你以前在那里工作过,但你不再在那里工作了。
不再在那里工作了。所以我想……
它足够新,可以谈谈现在的情况,对吧?这项技术仍然被广泛使用吗?
我希望在离开之前,在构建过程中,组织中发生了一些奇怪的事情。所以,我希望一切仍然非常出色。但我已经……
一段时间没有参与了。让我们快速看看这段视频,这段视频是关于 Geno Kon 的谈话。从法国的 David Guillot 那里,我需要一个关于你如何使用 HTMX 来构建 SaaS 产品的示例。是的,他说的那个例子是一个很好的例子。
所以,当我没有看到它实时运行时,我看到了它运行后的结果。但它就像一个终极的 HTMX 演示。这个人真的展示了 HTMX 的强大功能。强烈推荐。
是的,这个人 David,他展示了我们的复杂 SaaS 产品,并向我们展示了所有功能。我觉得这将是一个很好的文章例子。
而且,在视频中,如果你想向你的团队展示,说“伙计们,我们应该考虑这样做”,我相信你很快就会得到一些人的回应,说“不,我们必须使用 React,因为它具有交互性,你与该部分交互,它会更改该部分。我们怎么能做到这一点?”这就像,完全有可能。
是的,我认为人们提出的主要论点是可扩展性。但对我来说,这个论点并没有多大意义。我认为他们可能担心的是可扩展性问题。
但我认为 HTMX 部分地解决了这个问题,它可以做一些事情,而这解决了这个问题。然后,它真的对团队来说更好吗?另一个问题是它是否只是另一种时尚,只是另一种潮流。
有时很难让人理解这一点。我认为我的文章将很好地解释为什么这是一个好主意,因为我必须向非技术利益相关者解释,说“我正在做出这个疯狂的决定,这是原因”。所以我认为我已经掌握了论点。
如果你需要确认,请阅读那篇文章。但我认为还要提到的是,我最终迁移到的完整堆栈。是的,我们谈到了 HTMX,我们谈到了 Django,我们谈到了 Alpine。现在,如果你将 React 前端与任何东西结合起来,你将以响应式方式测试前端,就像你将使用适合它的工具一样。所以,你需要考虑不同的测试方法吗?
或者我们是在谈论什么?
我非常喜欢 Playwright,所以你可以使用它,但我会说,我会将 Playwright 包含在内,它非常棒。它就像 Selenium,但内置了所有有用的测试功能。所以,你可以让它录制你的失败测试的视频,并获得在不同浏览器上运行测试的有用标志。
你还可以跟踪事情。它有一个有趣的调试器,你可以使用它,你可以在不同的平台上运行它。所以 Playwright 也是我们使用的一部分。
是的,Playwright 真的很好。我想到的一件事是关于测试,如果你有一个丰富的 JavaScript 前端,你必须使用 Playwright 或类似工具,它会完全渲染浏览器页面以与之交互,对吧?你也可以用 HTMX 做到这一点,但是对于许多 Web 框架,你可以在你的 Web 测试代码中说“创建我的服务器的测试实例”,对吧?然后让它执行这个请求,然后查看响应,而无需几乎相同的开销。因为所有这些事情都在服务器上发生,我想你可以在单元测试中编写 Web 测试,针对片段响应,对吧?
是的,所以你可以编写一些不同的东西。但是,由于许多交互都在 HTMX 中定义,因此单元测试可能无法涵盖如果修复此内容会发生什么,所以 Playwright 就会派上用场。
是的,你仍然需要它,但可能不需要像以前那样多使用 Playwright,这就是我的想法。是的,绝对。
我认为我一直在犯的一个错误是过度使用 Playwright,就像在所有事情上都使用它一样。然后你的测试会非常慢,就像你只需要测试视图中的某个函数一样。你不需要在整个应用程序上运行 Playwright。是的,Playwright 绝对值得推荐。
是的,是的,并且它与 Playwright 非常流畅地集成在一起,所以你实际上不需要……所以 Playwright 会启动一个浏览器,并指向应用程序的运行实例以测试内容。但是,使用 Django 和 Playwright,你可以使用 fixture 来启动应用程序的测试版本,就像在测试中运行服务一样。所以,测试集成非常流畅,是的,这非常方便。
是的,绝对。你知道,你写了很多关于这一点,你提到了这一点,但你有点略过了,他说“我是不是在为优化初级开发人员而疯狂?”另一方面,即使你是专家,也要优化简洁性,对吧?你并不仅仅因为你可以执行所有步骤和所有复杂步骤,就意味着你应该不断执行这些步骤,对吧?是的,绝对。我认为这里有优化简洁性的理由。
你……我完全同意。我的意思是,如果你可以像这样简化你的应用程序开发,然后让它变得简单,这样你就可以专注于解决问题,而不是编写代码。
而且,这会更容易。所以,是的,简洁性很棒。它更快,开发起来更容易,而且 HTMX 确实让你的代码更小。
然后,它不仅更简单,而且更简洁,而且代码量更少。因此,测试内容更少,错误更少。
而且,大部分前端交互都由另一个经过良好测试的库处理。你只需要做一些非常小的、易于理解的事情。所以,它非常强大且干净。所以,是的,我认为值得优化简洁性。我的意思是,它让初级开发人员和我自己都更有效率。
所以,我一直在努力保持事情的简洁性。如果你转到 HTMX,我看到这个部分,他们有一个关于 SaaS 的部分,它不是一个博客,但它有点像一个博客,它不是一个有顺序或分类的地方,但它很好。
另一方面,这里有一些例子,说明为什么人们没有选择它,对吧?关于复杂性的整个部分。非常糟糕,是的。但是,如果你……
你知道,他说“每一步都更少,更少地关注,就像初学者一样,哦,这就是我所做的。”你变得更好。你像所有这些复杂性、所有这些层,然后在最后得到一些东西。是的,它与后端类似,我走上了这条道路,你不需要……我不想将它描述为开始看起来像这个角色,我的意思是,但我想他仍然在谈论它,所以它在某个地方,是的。
是的,绝对不同。我认为这与……当我教人们编码时,当我教人们编码的基础知识时,我看到初级开发人员试图炫耀,说“看,我的代码有多酷”,我可以做所有这些复杂的事情,然后你让他们更像“绝地武士”。所以,不要浪费你的动作,就像你不会浪费时间一样,HTMX 帮你做了这些事情,它让你直接朝着目标前进,而不是必须……
是的,我知道你教了很多,也许……他说他为一家当地公司工作,这家公司从事航空航天工作。
在那里工作很酷,总共五年,这真的很长。而且它非常成功。所以,从 2020 年开始,基本上我们课程中通过的人最终都找到了好工作,就像 99% 的人一样。
而那些没有通过的人,实际上比例很小,只有 1%。有很多原因。但是,我在那里学习了很多,那是在线下。
但是,是的,我发布了……
我们实际上变得更好,因为我们对个人的监控更好,我们可以跟踪人们在看板上移动卡片。然后,你可以说“哦,这个组件,就像我作为教育者,会给我们很多关于我们正在做什么的反馈,因为如果一个人卡住了,你就像‘我解释了这个,很好’,然后他们会感谢你。
就像,我没有解释清楚,很好。所以,教学机制的反馈方式对学生来说真的很好。但是,如果我们作为教育者在某些方面做得不好,我们会知道,我们必须纠正它。
我认为这提升了我们的技能。所以,在那边学习了很多。现在,我正在尝试以不同的方式传播这些技能。
所以,我正在做很多事情。我想做的一件事是帮助教育工作者自己。所以我创建了一个名为“教育家协会”的东西,因为我一直想创建一个协会。
它有很多像“这是一个免费社区,来享受它”的人,关于教育的活动。现在,你可以互相谈论教育,作为一种支持结构,因为我认为教育工作者需要支持结构,这是一个分享学习和资源和机会的地方。
还有很多事情。所以,它仍然很新,但这只是其中一部分。我想提供教师培训等等。但我还在……
就像我们有初级开发人员。人们必须从某个地方开始。我们在线教学与线下教学不同。
所有这些。这很难,因为实际上没有很好的资源可以帮助教育工作者。如果你深入研究学习和教学的文献,它要么非常学术,所以有点难以理解。
而且,它不是以需要它的人的方式包装的。它以错误的方式包装。所以我最近遇到了 Code School,我问他们“你们是如何处理教师培训的?”他们说“我们外包给这些人”,他们向我展示了另一个组织,他们提供教师培训。我研究了他们的课程,他们课程的卖点之一是“我们的教师培训课程非常全面,可以用于面对面和在线培训”。这听起来可能不适合我们这里,但这就是人们所依赖的。这就是行业所能提供的基础。
所以,我认为教育领域存在一个很大的空白,我想填补它。是的,作为我正在做的事情的一部分,我正在提供技术培训,部分原因是你想练习你的技能,部分原因是你想为教育工作者创造机会,部分原因是我真的喜欢教这些东西。所以,有很多原因让我教这些东西。现在,我正在构建一些小型的、涵盖不同技能的研讨会,它们是独立的。
这些是更大的模块,将来会组合成更大的东西。但目前,我提供的第一个研讨会是关于 Django 和 HTMX 的。所以,这听起来很令人兴奋。所以,它谈到了我们刚刚谈到的堆栈。我们没有提到 Tailwind,但 Tailwind 也很好。这意味着我可以让前端看起来不错,只要……
你说你以前使用 Material UI 来让它看起来不错,在版本中使用了什么?
我真的很喜欢 Tailwind。是的,这个小研讨会的想法是我最近在 U.S. 举办了一个关于 Django 和 HTMX 的研讨会,这非常棒。我有很多参与者,这很棒,但我也遇到了一些问题,就像“伙计们,你们都太棒了”,这非常棒,进展顺利。
基本的想法是,我想展示如何使用这些工具构建一个应用程序,让大家能够构建自己的东西。研讨会的一部分实际上是使用这些工具构建你自己的东西。所以,对于那些职业生涯早期的人来说,他们可以从中学到一些不错的项目,构建出不错的作品集。人们构建了各种有趣的东西。所以,一个人构建了自己的个人项目管理系统,用于跟踪自己的项目,这真是太棒了。有人构建了一个音乐商店,另一个人构建了一个……是什么?一个巡演经理,以便他们不必处理太多事情,这真是太棒了。
是的,是的。
而且,它总是 Django,它创建了其他项目。而且,关于这个研讨会的另一个很棒的地方是,它是一个构建应用程序的研讨会。我正在教人们构建应用程序的所有组件。
就像互联网上的大多数应用程序一样,因为它是面向观众的。就像如果有人没听说过众包,创建、读取、更新、删除之类的,那大多数互联网上你需要做的事情。所以,如果你掌握了简单云应用程序的模式,那么你就可以用它来做一些非常困难的事情。
所以,是的,这说明研讨会规模很小。所以,我故意让事情保持非常小,因为我相信老师的力量。
我希望确保每个人都能得到关注,然后得到他们需要的支持。而且,因为来参加这类活动的人背景不同,所以有些人需要这里的帮助,有些人需要那里的帮助。所以,你需要保持良好的师生比例。所以,他们是由专家领导的,支持力度大,小组规模小,这是他们的好东西之一。
你们都链接到。这在节目中提到了布朗,人们想看看它,而且时间是固定的,但它是远程的,所以人们可以从你不需要是新人的地方参加。
所以,你不需要在非洲和美国东部时间,因为奇怪的是,大多数阅读我博客的人都在美国。
美国,比如,在南非,以及周围的变化。但我营销的目标是美国,部分原因是为了能够找到培训非洲人的方法。
而且,那边的资金不像世界其他地方那么多。所以,现在我能够让在教育领域做善事成为一种经济上可持续的事情。所以,这就是为什么美国,以及为什么价格是美元。是的,你们可以有Talk Python的折扣代码,我只是顺带一提。我想那是我说要让人们进去的时候。
我说过要让人们进去。
所以我会得到提示和离开,然后我还想给一些额外的10%用于一些事情。我想让我给他们的折扣代码的10%用于DSF。所以,另一个代码就在那里。
所以,这太棒了。我确实从DSF中受益匪浅,这真的很酷。所以,这是你的播客。额外的10%应该给DSF还是PSF或非洲的垃圾?
非洲法诺。
你说什么?是的,走吧。非洲法金。酷。
说到会议、演讲等等,金,几周后,在南非ICON上,我几周前做了一场非常棒的演讲,为教人们编程的人们提供了一些有力的力量。所以,这很好。
这个标题是我为演讲准备的。谢谢,金。是的。
所以,我在南非的派克做了演讲,我还做了美国乔恩的更长的版本,作为主题演讲。我非常高兴能做到这一点,这太酷了。但是,是的,只是谈论我如何思考教学,以及我如何思考教学,以及我们建立的机制。
所以,比如,大部分基于学习的工作原理是什么,以及你如何实际设计一个教育系统,让六个人取得成功,而不是沮丧或无聊?因为传统系统有很多奇怪的地方。是的,所以谈论这些。
但是,它还为个体教育工作者提供了许多经验教训。所以,我想我之前谈到过,作为教育系统中的教育工作者,我们收到了很多关于我们工作的质量的反馈,这给了我们空间来弄清楚很多关于如何改进事情的事情。所以,这有点像老师或未来的老师应该关注的80/20原则。所有这些都是有力的,因为很多人都教人,教新团队成员,还有很多志愿老师,这很好。我的意思是。
我认为做这种演讲、这种教学,就像为提升自身技能提供了一种非常廉价的途径吗?
是的,最后,有一个叫做“门徒效应”的东西,这是一个非常稳定的事情。所以,当人们说教学是学习的好方法时,他们不仅仅是在敷衍,这是真的。这真的非常有效。
而且,这背后有很多机制。就像我教学中简单的一点一样,是空间重复和回忆,这有助于你记住你的东西。另一个是人们会问你意想不到的奇怪问题。
所以,你从不同的角度看待自己的知识,并构建更好的思维框架,更好的思维框架,有些人擅长构建思维框架,有些人则不那么擅长。让一个人构建良好的思维框架的好方法是问他们关于他们所知的事情的奇怪问题,让他们从不同的角度看待事物。所以,你从你所教的人那里得到这一点。是的,这真的。
是一件美好的事情,是的,我确实真的巩固了你的知识,你可能只是稍微深入了一些这些想法。是的,这可能是一个很好的结束点。
让我们再给人们提供一个研究方向,那就是HTMX。我不知你是否研究过,但它有很多关于Python中HTMX工具和库的例子,以及其他许多语言。
所以,有一些HTMX的闪光工具,一个用于套接字。所以,也许这些看起来很酷,人们可以看看。但是,是的,我绝对想建议人们看看你的文章,现在他们可以带着这些想法去尝试。
是的,你知道,感谢你参加这个节目。很高兴和你谈话。也很高兴和你谈话。
这很有趣。我写了这个。这是另一个Talk Python to Me的节目。感谢我们的赞助商。请务必查看他们提供的服务,这真的有助于支持节目。
本期节目由Posit赞助,Posit连接来自Shiny Publisher的制造商,用于部署你正在使用Python流、Dash、Shiny、Bk、FastAPI、Flash、Coral报告、仪表板和API创建的所有数据项目。Posit连接支持所有这些。通过访问talkpython.fm/flashposit,免费试用Posit连接。
本期节目由Bluehost赞助。你需要一个网站吗?那就用Bluehost吧,几分钟内就能建立你的AI构建网站或新闻网站。
还有内置工具可以优化你的增长。不要等待,访问talkpython.fm/bluehost,开始提升你的Python技能。
我们拥有Talk Python上最大的Python视频课程目录。我们的内容涵盖从初学者到高级主题,例如内存和汇编。最棒的是,没有订阅,自己去training.talkpython.fm看看吧。
请订阅你最喜欢的播客应用,搜索Talk Python,我们应该排在最前面。你也可以找到iTunes feed(/itunes),Google Play feed(/play)和直接RSS feed(/rss)。
是的,我们现在大部分录制都是通过直播进行的。如果你想成为节目的一部分,让你的评论在节目中播出,请订阅我们的YouTube频道talkpython.fm/youtube。我是主持人Michael Kennedy。
非常感谢收听。我真的很感激。现在出去写一些Python代码吧。