SaaS Pegasus is a Django boilerplate or starter kit that provides a pre-configured Django application with essential features like user authentication, billing, and front-end setup. It allows developers to skip the initial setup and focus on building their app's business logic. It uses Django Cookie Cutter to generate a customized code base tailored to the user's needs.
PostgreSQL is recommended for Django applications because it is the most widely used and supported database in the Django community. It is robust, reliable, and integrates seamlessly with Django, making it the default choice for 9 out of 10 Django developers.
Django AllAuth is used in SaaS Pegasus to enhance Django's built-in authentication system. It provides additional features like social logins (Google, GitHub, etc.), password reset, and email confirmation. Pegasus customizes AllAuth to offer a polished, out-of-the-box experience, reducing the need for manual configuration.
Docker is recommended for Django development because it provides consistency and portability across different environments. It simplifies setup by ensuring that all dependencies and versions are consistent, regardless of the operating system. This is especially useful for beginners who want to avoid the complexities of managing virtual environments and dependencies.
Bootstrap is a mature, widely-used CSS framework that is easy to learn and has a large community. It is often considered 'boring tech' due to its stability. Tailwind, on the other hand, is newer and focuses on utility-first CSS, where each class represents a specific CSS property. Tailwind is more flexible and portable, allowing for easier integration of pre-made components. DaisyUI, used in SaaS Pegasus, bridges the gap between Tailwind and Bootstrap by providing pre-designed components.
HTMX is a better choice for Django projects that do not require complex client-side state management. It is ideal for CRUD applications or projects with minimal interactivity. React, on the other hand, is better suited for applications with rich, dynamic user interfaces like Gmail or Figma. For simpler projects, pure Django templates may even suffice.
SaaS Pegasus supports multiple deployment platforms like Heroku, Render, and Fly.io, which handle the DevOps burden for developers. It provides pre-configured Docker setups and deployment scripts, allowing developers to deploy their applications with minimal effort. This is particularly useful for developers who are new to web development or want to avoid managing server infrastructure.
The rockets in SaaS Pegasus branding originate from its original code name, 'Rocket Pony.' While the name evolved to Pegasus, the rockets remained as a nod to the project's origins. They symbolize speed and innovation, aligning with the project's goal of helping developers quickly launch SaaS applications.
我正在使用 Django 启动一个 SaaS 项目,一开始就有很多决定要做。为了帮助我做出这些决定,我邀请了 Cory Zue。Cory 是 SaaS Pegasus 的创建者,并且拥有丰富的 Django 经验。讨论的一些主题包括:构建 Django 应用程序;SaaS Pegasus;placecard.me;哪些样板项目是 Django cookiecutter;Cookiecutter;使用哪个数据库,可能是 PostgreSQL;身份验证选择,可能是 Allauth;Docker,用于开发的 Docker,用于部署的 Docker;部署目标/托管服务。Render、Heroku、Fly.io 等 PaaS 选项;前端框架。Bootstrap、Tailwind、DaisyUI、TailwindUI;HTMX 与 React 与直接使用 Django 模板;Rockets;Font Awesome;当然还有 SaaS Pegasus。学习 pytest;pytest 是 Python 的首要测试框架。使用 Hello, pytest! 快速学习基础知识;然后,你可以在 The Complete pytest Course 中成为 pytest 专家。这两个课程都在 courses.pythontest.com。</context> <raw_text>0 今天在 Python 测试中,我邀请了 Cory Zue 来参加节目,我感到非常兴奋,实际上我非常激动,因为 Cory 是 Django 方面的专家,并且做过一个名为 SaaS Pegasus 的项目,我希望 SaaS Pegasus 能帮助我启动一个 SaaS 项目,所以我们将讨论一些 Django 方面的内容。
欢迎来到 Test & Code。本期节目由 HelloPyTest(学习 PyTest 的最快方法)和 PythonTest 社区赞助播出。更多信息请访问 courses.pythontest.com。Corey,感谢你参加节目。是的,当然。我也希望它能帮助你启动一个项目。我不会把自己描述成专家,尤其与你之前的嘉宾相比,但我使用 Django 很长时间了。多久了?你使用 Django 多久了?
哦,天哪。我的意思是,在 1.0 之前,我得查一下日历,但可能在 12 到 15 年之间。
好的,我刚查了一下,Django 只有 18 岁。所以我认为这算很长时间了。是的,是的。但我从未向 Django 本身提交过代码,我想。我是 Django 的高级用户。我喜欢 Django 框架。我知道如何使用它的大部分功能。
我不了解内部机制,我想。我想你比我谦虚得多,因为我是 PyTest 的高级用户,但我绝对认为自己是专家。是的。你写了一本关于它的书,不是吗?我认为这足以证明你的实力。好的,但你拥有为数不多的……你称 Pegasus 为什么?是的,有很多……
是的,有很多名称。我认为常见的名称是样板或入门套件。但本质上,它是一个产品,你可以用它来启动一个 Django 代码库,其中内置了许多其他内容。所以不仅仅是你的 Django 标准应用程序,而是一个已经设置好并准备好在其之上构建应用程序的 Django 应用程序。好的。
我知道我们想让……我只是……让我们先谈谈这个。所以这是一个你拥有的项目……这是一个……这是你的全职工作还是你的副业?这是全职工作。现在基本上是我的全职工作。所以我经营着一系列独立项目,我想这么说。大约六七年前,我开始在业余时间做这个。
Pegasus 是我的第三次尝试,也是发展到足以让我全职工作的项目。我还有另外两个小型 Django 项目。你的其他项目还在运行吗?
是的。我做的第一个项目是……当我谈到它时,我总是有点不好意思,但它是一个婚礼座位卡生成器。基本上,你上传一个 CSV 文件,它会为你生成一个 PDF 文件,该文件经过格式化,以便你可以打印它,剪切它,制作婚礼或活动等场合的座位卡。这是一个非常简单的应用程序,但实际上……
是的,它实际上赚了相当可观的钱,也是我涉足这种独立产品领域的一次尝试。我认为这很棒。我认为小型项目……我的目标就是小型、专注的项目。是的。我只是一个软件人员。我应该能够编写一些软件来帮助一些人。对吧?百分之百正确。
并从中赚钱。是的。你的座位卡生成器还在运行吗?它还在赚钱吗?是的。它叫做 placecard.me,因为我得到了 .me 域名。所以它是 placecard.me。是的,它确实赚钱。每月大概一千美元,这很好。很好。
还不错。它完全自动运行,这非常好。偶尔我会收到某人的电子邮件,说:“哦,我可以在这个东西中添加餐点吗?为什么这个表情符号不起作用?”等等。但或多或少,我从来不需要碰它。它只是在后台运行。所以这是一个甜蜜的体验,哦,你可以在睡觉时被动地赚钱。这真的很酷。然后我被吸引住了,决定弄清楚如何全职做这件事。
所以我的想法是,我可以通过写书来赚些外快。这实际上需要很多工作。是的。无论如何。好的。而且它主要是一种预先加载的方式,我想,对吧?我对书籍的理解是,在书籍发布时会发生大量的营销推广活动,然后是长尾效应。对吗?是的。
是的。对于技术书籍来说,存在长尾效应,并且在最后会有一个陡峭的下降。嗯,嗯,我认为……我不知道。嗯,我认为……我认为 Pytest 书做得相当不错,但它仍然……
前几次收入支票进来时,我想:“哦,太好了,这将非常棒。如果这种情况持续下去……”它并没有持续太久。是的。至少对我来说没有。它一直很稳定,而且足够稳定,所以我将继续保持下去。这就是为什么我重写了它,我重写它的目的是确保它不会很快过时,然后我就可以继续保持下去,而且它做得相当不错。但是,
这并不意味着我可以辞掉我的日常工作。好的,那是第一个。第二个是什么?第二个,让我们看看。所以我做了一堆应用程序,这些应用程序只是为了满足我自己的需求,其中大部分甚至都没有盈利方式。其中一个就像这个……
另一个有点傻的应用程序,我与朋友们进行了一些群聊,我想查看其分析数据,比如我很好奇谁发送的消息最多,所有这些东西,所以我构建了这个,再次是一个非常简单的 Django 应用程序,向你展示一些这些数据,并将其发送给我的朋友们,他们觉得很有趣,我们对此哈哈大笑,然后我想,也许其他人也会对此感兴趣,所以我把它发布在……
Reddit 和其他一些随机的地方。然后,少量的人开始使用它。我需要摄取大量数据。然后我想,好吧,如果你要摄取 50 万条消息,那么我可能应该向你收取一些费用。所以我只是添加了一个每年 10 美元的东西。
然后,所以这个也自己运行,我从来都不用考虑它,但它赚不了多少钱。每月大概赚 100 美元左右。然后在做了这些事情之后,然后从用户帐户复制粘贴代码,设置我的前端构建管道等等,我想,哦,
我一直在重复做这件事。也许这里有一个产品可以帮助其他人像我一样启动所有这些 Django 应用程序。这就是 SaaS Pegasus 的诞生。我应该说,这不是一个新颖的想法。其他框架已经存在这些样板。有一个非常流行的……
Laravel,还有一些是 Rails,我寻找 Django,但没有任何好的。我想,这里肯定有一个机会。是的,我从我信任的 Django 社区的人那里听说过,它很受尊敬,甚至受到一些 Django 人员的尊敬。这很好。是的,我绝对是第一个,
显然,在我看来,它仍然是最好的,也许好得多。再次记住,我对它非常有偏见。
但是我有……你在那里有一个火箭,所以就是这样。我有点喜欢火箭,所以……火箭很好,尤其当它们连接到产品上时,我想。但我的意思是,有一件事是真的,那就是我全职从事 Pegasus 工作近三年了。因此,仅仅通过投入的努力,我认为它可能是……
投入最多……我的意思是,工作并不总是质量的衡量标准,但它至少与质量有一定的相关性,所以 Pegasus 投入了很多,并且它也有一个非常好的用户社区,我们有一个 Slack 频道,大约有……接近 100 人在里面讨论构建他们的应用程序,讨论构建他们的创业公司,并给我很多反馈,然后我可以将其整合到产品中,所以……
这是一个很好的循环。所以你得到……当我注册……我认为我去年注册了……
我没有……我认为我已经尝试过几次了,但是我……意识到我认为我首先需要更多 Django 经验……但是……我已经做了一些教程,所以我现在准备再次开始了。但是……对于那些不知道它是什么的人来说……所以如果我……我注册了……
注册了 SaaS Pegasus。然后我经历了一些关于我想在应用程序中添加什么以及不同功能的小问卷……然后,然后它会……它会为我准备一些东西,然后我下载它。然后……
那是我的启动应用程序。然后我可以将其放入 GitHub 或其他地方以进行版本控制,对吧?是的,完全正确。事实上,从上个月开始,你也可以跳过下载步骤。你可以直接从 Pegasus 将你的项目推送到 GitHub。哦,真的吗?好的。这是我最近添加的一个很酷的功能。
但这是完全正确的。在幕后,我猜想很多熟悉 Django 的听众可能也熟悉 Django Cookie Cutter,这是一个允许你做这种事情的库。Django Cookie Cutter 是一个基于另一个名为 Cookie Cutter 的库构建的 Django 工具。
Cookie Cutter 基本上是为 Django Cookie Cutter 和 Pegasus 提供支持的工具。它基本上是一个框架和语言,允许你根据配置文件添加、删除和修改代码。所以在幕后,当你更改 Pegasus 中的所有这些内容时,添加功能,选择你想要使用的 CSS 框架以及所有这些内容时,
它将使用 Cookie Cutter 为你的项目生成一个完全定制的代码库,以便你获得所有你想要的东西,但你不会获得所有额外的功能。你不必管理带有设置的配置或任何类似的东西。你开始使用的代码库是专门为你的项目设计的,对我来说,这是构建 Pegasus 的一个重要要求,因为我看到了一些其他东西……
你知道,你安装了这个东西,但你做的第一件事就是修改设置文件中的 50 个变量,然后你的代码库中大量的代码永远不会被调用,因为它们在……在这个旨在适应所有这些不同用例的项目中。而如果你使用这种 Cookie Cutter 方法,你最终就不会得到所有这些额外的代码,你只会得到你真正需要的东西。我喜欢这个。我……这……这听起来很棒,因为我不想要……首先,我……
我将要阅读所有代码。如果我阅读所有不需要的代码,那有点令人沮丧。是的。我的意思是,删除代码是我在项目中最喜欢做的事情。所以相反的意思是,拥有所有这些额外的代码是项目可能拥有的最糟糕的事情。
好吧,我的意思是,或者最好的,如果你喜欢删除的话。是的,如果你想让你的项目前 10 个小时都在删除代码,那么我想你可以这样做。你认为一个熟悉 Django 的人需要多长时间才能在运行 Pegasus 后获得他们的第一个测试版本?
好吧,这是一个非常棘手的问题,因为 Pegasus 提供的是所有脚手架。它将提供你的前端,它将提供你的构建基础设施,它将提供你的 CI,它将为你提供部署方面的大量帮助。但你仍然必须编写用户帐户、计费等内容。但你仍然必须编写你自己的应用程序的业务逻辑。这就是几乎所有……
工作来自的地方,所以如果你……如果你的应用程序具有非常简单的业务逻辑,那么……假设你花了 5 个小时来编写它,然后……所以如果你在 Pegasus 之上这样做,那么我猜你可以在……之后在生产环境中运行它,也许再过 3 个小时。这听起来很棒,好的,所以让我感兴趣的一件事是……
计费部分,因为我不想弄错。嗯,所以我想,好吧,我需要找到一些可以帮助我处理计费部分和用户帐户的东西,因为我也不想弄错。嗯,而且……其余的,也许我甚至不在乎它一开始是否真的那么漂亮……因为……因为我可以……
我不知道,可以向它添加一些 CSS 或其他东西。也许我可以雇人帮忙,但是……但是让订阅……只是用户流程出错……我不知道该如何解决。而且还有教程,我必须……我已经……我已经和一些 Django 人员谈过,我知道从……从零到工作的网站制作教程很难,但是,
拜托。就像……就像……就像……就像入门教程一样,它会让你进入……一个完整的投票应用程序。这有助于理解 Django 的一些内部机制,但是……它也没有……它还没有用户身份验证。没有……
它没有真正讨论部署或任何其他内容。我想,我……我仍然在那里。它仍然处于现在画其余猫头鹰阶段。对。所以,
我很高兴。所以让我们……我不知道该如何过渡,但是让我们……一些让我困惑的事情……在你录制之前,你说让我们谈谈一些不仅仅是 Pegasus 特有的内容,而是一般在 Django 应用程序中存在的内容。我完全同意。所以首先,我想到的是,我将不得不决定很多事情。所以我不知道。我不知道我首先需要决定什么。你有什么想法吗?嗯,
我的意思是,现在人们讨论的一些最大的决定。很多都是前端。有一些决定在 Django 社区中已经达成了相当大的共识。所以数据库,9 个开发者中有 10 个会告诉你使用 Postgres。
身份验证——我的意思是,Django 内置了身份验证系统。然后大多数 SaaS 产品会在其之上添加 Django allauth,这是一个库,它在 Django 身份验证系统之上提供了许多功能。所以社交登录,你可以使用 Google、GitHub 和 Facebook 等登录,以及密码重置、电子邮件确认以及其他一些类似的东西。
这些是一些我认为每个应用程序都需要的东西,但在 Django 世界中已经决定了,或者至少在这个领域有一个非常强大的领导者。前端可能是争论最多的地方。那么 Pegasus 使用 allauth 吗?是的。所以 Pegasus 比较依赖于一小部分库……
我选择要放入 Pegasus 的库的标准只是——它们基本上必须是 Django 中排名前五的库之一,然后我就会使用它们。所以是的,所以 Pegasus 在幕后使用 AllAuth。AllAuth 非常好。它带有大量功能。但是你必须自己设置很多东西。模板看起来不太好。电子邮件看起来也不太好。所以 Pegasus 在 AllAuth 之上会配置它、自定义它并提供……
一种更接近我所认为的成品、完善的体验,这样你就不必摆弄 AllAuth 中的所有内容并为自己的应用程序自定义它。因为所有这些开源库的设计都是为了可定制并且满足所有这些不同的用例。所以开箱即用,它有点类似于我刚才谈到的 Cookie Cutter。但它们的设计是为了支持所有这些东西。
但它们并没有像,哦,这是好的默认配置,就这样使用它,我认为 Pegasus 试图做的事情之一就是为你配置这些东西,很好地设置它们,并为你提供开箱即用就能正常工作的东西,这样你就不必与之纠缠。然后如果你想从那里自定义它,你仍然可以。但你不会在旅途中走得太远,我想。
因为很多东西,尤其是第一个项目,我不知道有哪些选择。我想我一开始并不关心。我只想要一个好的。有人为我选择一个好的。是的。那么 Docker 呢?是的。我的意思是,Docker 很有趣。
所以我成长于……我在 Django 中进行开发。就像我说的,我已经做了很长时间了。所以当我学习 Django、当我习惯于编码时,Docker 还不存在。所以我认为我个人并不经常使用它,因为我知道如何做 Docker 为你简化的一些复杂的事情。
也就是说,我认为我建议大多数人使用 Docker,原因有几个。但最重要的原因是可移植性和一致性。Docker 真正擅长的事情——我不知道你是否知道这一点,我只是在告诉你一些你已经知道的事情——但它是——你基本上有一个文件,该文件可以以一种非常一致的方式构建……
可以在 Windows 上运行,可以在 Mac 和 Linux 上运行,你可以将其提供给平台即服务公司,例如 Heroku 等,他们可以为你运行它。因此,它提供了一种非常一致的运行东西的方式。这在开发中非常有用,因为,你知道,每个人都有不同的 Python 版本,每个人都有不同的操作系统,每个人都有……
每个人的环境都略有不同。Docker 只需解决所有这些问题,并说,好的,如果你使用此文件,你将获得此版本的 Python 和此版本的等等,它将运行……你可以非常确定,如果它在此环境中运行,它几乎总是会在任何其他环境中运行。所以,再次,如果你以前从未做过 Web 开发,并且你只想……你不想摆弄库和虚拟环境,以及……
我的意思是,我知道你可以在虚拟环境中自如地操作,但你基本上只需运行……像 Docker compose up 或任何东西,它将启动一个数据库,它将启动……一个缓存,它将启动你的 Web 应用程序,然后你就可以开始了,你不必安装 Docker 之外的任何东西。我认为在开发体验、启动和运行方面,这就是它的价值所在,然后在生产环境中,可移植性也很有用。
因为你可以确保你拥有非常一致的……那么在部署过程中,如果我选择 Docker,我是否要部署 Docker 镜像?好吧,在 Pegasus 中,部署和开发是分开的。因此,你可以选择是否要为开发启用 Docker。然后你也可以选择是否要使用 Docker 或自己进行部署。它是……我的意思是,大多数……
托管公司或平台即服务 PaaS 公司会在后台使用 Docker。然后主要问题只是……在你的提供内容和运行的底层 Docker 容器之间存在多少层抽象。好的。所以……
好的,所以具体来说,对于 Pegasus 来说,有一个“使用 Docker”复选框,它是否在……哦,它就在那里,如果我读得更好……它是我是否在本地开发中使用它。好的,是的,我可能不应该把它放在帮助文本中,而应该把它放在标签中,这样会更清楚一些,它很清楚,只是我没有读……
是的。用户不阅读,对吧?我现在应该知道了。我想你可能是对的。也许如果它说“使用 Docker 进行开发”,也许。但无论如何,没关系。我会说……
我喜欢开发的方式,如果你精通 Python 但这是你第一次涉足 Web 开发,我可能会建议你这样做,你也可以使用 Docker 来运行你的服务,例如你的数据库和你的缓存。然后你仍然可以在本机虚拟环境中运行你的 Django 代码。这实际上是我进行所有开发的方式。我认为这是两全其美的方法,因为你不必摆弄……
数据库等。然后你仍然可以使用你的 Python 环境中的所有本机工具。好的,如果我想这样做,我是否要点击“使用 Docker 进行开发”按钮?在 Pegasus 中,我认为不是。
好的。然后我有一个 Docker Compose 文件在我的 GitHub 上,我可以与你分享。这将运行 Postgres 和 Redis。然后你可以使用你的 Django 应用程序来访问它们。
那么你为每个人部署 Docker 镜像吗?或者这取决于我选择的部署目标?是的,这取决于你选择的部署目标。但它们大多是基于 Docker 的。它们大致分为两到三类。一个是平台即服务,例如 Heroku 或 Render 或 Fly.io。
这些通常只需要一个 Docker 配置文件或其他生成 Docker 配置文件的抽象,例如 proc 文件或其他东西。但它们基本上都在为你的应用程序运行 Docker 容器,然后它们将提供托管数据库和托管 Redis 等等。然后另一个选项是自己动手。
然后在这个世界中,你更多的是在你控制的服务器上安装。在这个世界中,你仍然可以为所有内容运行 Docker 容器。你也可以与托管数据库混合使用。如果你愿意,你也可以只在虚拟环境中运行 Python、Nginx、Gunicorn。这大约是五到七年前每个人都在使用的经典堆栈。
它仍然运行良好。所以我的大多数项目仍然以这种方式设置,因为它们比较旧。但这并不是运行 Django 应用程序的糟糕方式。好吧,那么你对人们有什么偏好,你目前支持的东西?好吧,所以我建议……我试图根据个人情况调整我的建议。
所以对于你来说,如果你刚接触 Web 开发,并且你不想做很多系统管理员类型的工作,那么我会选择 Render、Heroku 或 Fly.io 之一。它们都非常相似。根据你的应用程序最终需要的资源数量的细节,它们的定价会有所不同。但它们都相对……
点击式,配置一些东西,有一个 CLI 和一个仪表板控制台,你可以在其中管理东西。它们大多会为你消除 DevOps 的负担。它们只是……自己处理。好的。如果我遇到一个问题,它真的需要拥有我所能获得的最佳正常运行时间,那又如何呢?那重要吗?
我不认为会。我记得你给我发过电子邮件,说你听说 Fly 有一些正常运行时间问题。我的一个应用程序托管在 Fly 上,自从该应用程序上线以来的九个月左右,我不记得有任何问题。它们都应该很可靠。这将是一个很大的……我的意思是,这些都是……
亿万亿美元的公司。我不知道其中一些公司有多大,但它们就像……你知道,它们是大型公司,我认为其他大型公司依赖它们来提供基础设施。所以如果它们有任何规律地出现故障,那将不是一个好兆头。好的,假设我选择其中一个,然后决定稍后做其他事情。这是……这是……我必须现在完全决定吗?这是我可以改变主意的事情吗?
是的,你可以改变主意。一件事情……我的意思是,对于 Django 来说,有一小类数据是持久性的。最明显的是你的数据库。另一类是媒体文件,这基本上是指如果用户将文件上传到你的应用程序,这些文件将存储在某个地方,通常是 S3 或类似的东西。但切换的过程基本上……
这取决于你的数据库在哪里,但最坏的情况需要备份你的数据库,迁移到其他地方,然后在其他地方重新启动你的应用程序。你可以做到最小停机时间,但如果你愿意忍受一两个小时的停机时间,那么你可以很容易地做到这一点,而不需要太多工作。好的。
嗯,我想,所以我想再过几个问题,这次是主题。其中一个是,好吧,让我们直接进入。我有一些相关的,我是一个非常切线式的思考者。听起来不错。但是所有这些不同的平台,如果我有一个,
如果我自己尝试,我必须学习其中一个。你的列表上有六七个。这对你来说是困难的部分吗?还是你很容易弄清楚不同平台的所有后勤工作?你在说部署平台吗?是的。对你个人来说,有这么多选择很痛苦吗?好坏参半。所以,
就像我说的,大多数这些东西你都可以用配置文件来设置。所以当我添加支持时,我想,好吧,我这个月要处理部署。而且我要,我要弄清楚前五大平台是什么,然后我要支持它们。每一个都需要,你知道的,比如一天的时间来排除故障并弄清楚如何让它工作。所以添加它们相对容易。我没有
当时充分考虑的是,我将永远在所有这些平台上拥有客户,所有这些平台都将发生变化,你知道事情,事情是,你知道,API 更新,文档和支持文档以及支持等等,所以现在它很难,比如有人会在某个平台上遇到一些问题,然后如果我没有,如果我碰巧没有在那里运行的环境,那么我必须去
提醒自己,我必须遵循我自己的文档,在这个平台上启动一个新的虚拟项目,看看我是否可以重现问题,找出如何解决它,并发布修复程序。所以它比我一开始预期的要花费更长的时间来进行支持工作
比我一开始预期的要长,这对于Pegasus中的许多事情来说都是正确的。你以为我现在会吸取教训。但我不断地添加一些东西,希望它们不会有这些漫长的支持过程,然后其中一些最终会拥有它们。好的。
好的,我还想谈谈的另外几个主题是框架和前端的东西,所以,呃,CSS 框架的选择之一,现在有些人会有他们强烈的意见,但我没有,所以你有Bootstrap,带有Material的Bootstrap,Boom Palma Palma Palma,我不知道Palma和
还有Tailwind。我认为世界上可能还有更多选择,但你选择了这些。但是对于任何Django项目,也必须弄清楚这一点,对吧?那么你如何选择呢?是的,我的意思是,简短的答案可能是,就像许多技术一样,第一次尝试是如果你知道其中一个,就使用那个。
这是一个我非常喜欢的规则。如果你不知道任何一个,我会将重点放在Bootstrap和Tailwind上作为你的选择。Bootstrap就像CSS的Django,我会这么说。它存在了很长时间。它拥有令人难以置信的社区。那里有大量的支持和资源等等。很多人知道它。很容易找到开发人员。
而且它可能有点过时,你知道,有时可能会有点慢。你可以称之为无聊的技术或类似的东西。然后是Tailwind,你知道,在这个比喻中,它可能更像React或其他什么。就像它是当今非常流行的新事物,每个人都想使用它,每个人都想学习它。而且围绕它也正在发展一个巨大的生态系统。
所以它有点像——是的,它几乎就像你是否想要坚持使用一些无聊而稳定的东西,或者你是否想要处于这种工具的尖端。就技术差异而言,我不知道——如果你熟悉其中任何一个,Tailwind的全部内容是——它是——他们称之为?
我忘了他们怎么称呼它。但基本上,Tailwind就像,每个CSS属性都应该是一个类。你不应该有任何类——比如,Tailwind就像,你永远不应该为卡片或——
一个按钮。相反,你应该有20个类,它们表示文本颜色为红色,边距为2个rem,填充这么多,阴影这么多。所以从字面上看,Tailwind中的按钮通常会有这些——
我并没有夸大其词,也许像20个类名一样,这听起来很疯狂,而且对于开始开发的人来说通常非常刺耳。它在一定程度上被一个名为Daisy UI的库所缓解,Pegasus使用它。Daisy UI就像Tailwind和Bootstrap之间的桥梁。所以Daisy UI实际上会提供一个按钮类、一个主按钮和一个错误按钮等等。在幕后,它
它只是将其映射到你想要使用的20个Tailwind类。但是Tailwind世界的一个好处是它非常便携。唯一的样式单位是HTML和类。如果一个产品使用Tailwind,那么它看起来完全一样。而当你使用Bootstrap时,当人们想要定制Bootstrap时,他们会开始
修改变量并添加他们自己的类等等。然后我不知道我是否解释得很好,但由此带来的好处是,如果有人为Tailwind制作了一个组件,你可以将HTML复制粘贴到你的项目中,比如你的Django模板中,它看起来就会完全像那个组件。你永远不必处理CSS之类的东西。这意味着Tailwind现在有一个很好的模板库生态系统。
在那里你可以访问一些网站,你可以搜索你想要的几乎所有东西,导航栏、卡片等等,然后获取这些大型HTML文件,并将它们粘贴到你的Django项目中,它们就开始工作了。所以这是一种非常好的方法,可以快速构建外观漂亮的东西。我还没有一个项目变得足够长久,以至于知道这种开发风格最终是否会成为维护问题。
虽然它运行得还不错。你是一个CSS人员吗?你知道如何摆弄它吗?或者你依赖这些框架为你完成大部分工作吗?我肯定非常依赖这些框架。我想说的是,我可能比一般的后端开发人员更擅长前端。但我比一般的前端开发人员更不擅长前端。
所以我可以让事情看起来还可以,并学习工具等等,但这只是表面知识。好的。所以你所做的,再次,如果我要阅读文档,小东西说如果你在选择方面遇到麻烦,请参阅文档,然后你有一个文档页面来讨论它。
所以实际上你的东西指向,它不是说明。如果我只是阅读它们或者更好,但我很好奇这个文档页面与我刚才所说的内容是否一致。好吧,所以其中一个原因是,我
我不知道这个Daisy UI,但我与某人交谈过,我不知道,大约一年前或类似的事情,他们有一个副项目,他们使用付费的Tailwind UI来,只是为了直观地设计一些东西,我想。我认为有一个,我不知道,有一个付费的付费服务,你可以获得设计东西的帮助。我不知道它是否值得,但是是的,
六个月前,所以我使用了它。我用它来,比如Pegasus的主页和定价页面是从那个Tailwind UI中提取的。六个月前,它绝对值得。现在已经有足够的开源东西了,你可能可以不用它。但老实说,它并不贵。而且它是Tailwind的创建者制作的。他们付出了很多努力来制作它。
在每个屏幕尺寸上都完美无瑕等等,所以没关系,是的,我仍然会推荐它,并且它与Pegasus兼容,是的,HTML版本是他们里面有一些东西有点像React专用,这对于集成到Pegasus中来说有点更多权限,好的,但是,呃,最初的版本包括所有HTML模板,这些都是
你可以直接将它们放入Django模板中,它们就可以开箱即用。好的,最后一个主题是——这并不是真正的最后一个主题,但就目前而言——HTMX与React。是的。再说一次,这取决于。是的。
我会的。但是对于,让我们像,让我们假设,让我们假设我不在乎。我应该选择什么?好吧,你的应用程序是什么?告诉我更多关于你正在构建的应用程序的信息。好的,我想要一些,但我想从中赚钱。所以人们必须付钱给我并登录等等。但基本上,它将是一种列表形式。它是另一个服务的界面,后端服务正在执行所有繁重的工作或日常工作。它本质上是一个注册列表。
嗯,所以人们可能会在应用程序之外注册,也可能在应用程序中注册。我可能会有用户能够查看事件,有点像聚会之类的东西,但没有那么激烈,嗯,注册某些东西。然后在活动之前,活动组织者需要能够查看注册人员的姓名列表。就是这样。嗯,是的。所以就是这样。我会,我会绝对使用HMX。好的。嗯,
我这么说只是因为React真正擅长的是,如果你正在构建一些非常复杂的东西,需要大量的客户端状态。如果你正在构建Figma或类似的东西或Gmail,你将想要使用React,以便你可以提供这种丰富的用户体验。你正在构建的东西听起来更像是一个CRUD应用程序,带有一些
带有一些调整和花里胡哨的东西以及一个漂亮的后端或后端上的漂亮集成。但是对于那个,是的。我的意思是,你甚至可能不需要HTMX,老实说。你可能只需要用纯Django模板完成整个事情。那也完全没问题。好吧,没有不是一个选项。我不能在你的——是的,好吧,所以Pegasus里面有一些东西,我想让用户体验更像是一个单页应用程序。
例如,当你与团队合作并在邀请页面上时,你想邀请五个不同的人加入你的团队。我不希望每次你这样做时都进行完整的页面重新加载。所以Pegasus中有一些小部分需要单页应用程序之类的东西。在这些小部分上,它使用React或HTMX。但是你不需要为——使用这些技术。
而且你可以,你可以编写它们,它们会在后台。如果你使用Pegasus中使用这些的部分,但是否则你希望能够忽略它们,并且永远不会考虑它们。所以,我认为,
呃,来总结一下这段对话。嗯,然后让我去工作和学习一些东西,产生更多的问题,然后回来,也许像与你联系几次,在我让这件事启动的过程中。嗯,听起来很有趣吗?
是的,听起来很棒。太棒了。酷。所以对于想要联系你的人来说,好吧,SAS Pegasus是,我们将留下一个链接,但它是s-a-a-s-pegasus.com。是的。所以非常简单明了。还有一个好的火箭。
而且,你知道,我,如果人们不知道,他们怎么会听这个播客而不了解,但是我的书上有火箭。所以,嗯,无论如何,我不知道。所以我很尴尬。不,没关系。他们,他们,第一个,他们,我得到的第一个comps出来了或comp。我不知道这个词是否正确。他们,呃,书封面的粗略版本,嗯,
向我展示了,我可以选择艺术作品,但大多数选择都是蛇,我想我,我有点厌倦了Python与Python的蛇类关联,我知道它在那里,但是我们可以使用复古火箭吗?所以我得到了一把复古火箭,所以Django非官方吉祥物是,它是一匹小马或独角兽,或者它是一匹他们称之为小马的独角兽或类似的东西。但在我有SAS Pegasus这个名字之前,Pegasus的原始代号是Rocket Pony,这就是为什么到处都是火箭。然后我想,好吧,Rocket Pony是——我认为我试图画或找到火箭上小马的图片,这根本不可能。我不记得我是如何最终得到——我认为我当时想,哦,飞马。好的,Pegasus。但这就是火箭仍然
徘徊的原因。哦,对了。而且没有飞马的图画。是的。我试图在网上找到它们,然后我试图让AI来制作它们。你知道,我应该再试一次,因为AI现在已经好多了。现在有不错的AI飞马。但在此之前,他们就像,每次我试图让AI生成飞马的图片时,它看起来都像是来自古罗马。即使我试图提示它,它也有这种非常像,
神话般的古希腊插图质量,这与我试图创造的品牌并不相符,哦,好吧,我的意思是你的网站很漂亮,我喜欢那些小标志和它们的小图标等等,呃,用户模拟小东西就像那个神秘的家伙,它非常可爱,那里有一些很好的图标,所以大部分都很棒,太棒了
是的。呃,所以,呃,有了,呃,小促销,就像整个事情有点像促销,但是还有更多,嗯,你有文档,你有用户指南,你有视频,嗯,呃,在你结束之前你还想宣传你的项目吗?不,我觉得,是的,我觉得整个事情都是一个巨大的宣传。所以感谢你给我机会来这里,呃,
而且,你知道,它正在帮助我,但我对此一点也不感到难过,因为我认为,呃,呃,这个适合的空间是我,我认为它很棒。我知道,我肯定它适合很多空间,但我认为有很多像我一样的人,他们说,嘿,我是一个软件人员。我认识社区中的一些人,我想帮助他们完成一个项目。而且
我还想从中赚点外快,但我可以帮忙。但我不是全职的网络开发人员,所以我需要一些帮助。像这样的东西可以帮助我从……我已经知道如何编码了。我只是不知道如何做一个抛光的网络应用程序。我很高兴有这样的东西。所以感谢你把这个放在一起。
是的,我希望它能成功。我很想知道你会把它带到哪里去。是的,好吧。非常感谢。我们下次再聊。好的。非常感谢。
感谢您的收听,并感谢所有通过购买课程支持该节目的所有人,包括Hello PyTest(学习PyTest的最快方法)和完整的PyTest课程(如果你真的想成为PyTest专家)。两者都可以在courses.pythontest.com上找到,你也可以在那里加入Python测试社区。现在就到这里。现在去测试一些东西吧。