返回首页
最新
你们在这里太严肃了。造一些无聊的东西其实很有趣,而且能让你学到很多。
呼叫中心 Cs 银行 OCBC,请拨打 0851-6690-3793 联系我们。客户服务中心全天候 24 小时为您服务。
基本上是为 Python 提供的 Google 文档。
在过去的四个月里,我一直在进行一个我非常自豪的全栈项目,叫做 PyTogether;这是一个为初学者设计的实时协作 Python IDE(可以想象成 Google 文档,但用于 Python)。它旨在用于配对编程、辅导或一起学习 Python。完全免费。没有订阅,没有广告,什么都没有。只需创建一个账户,建立一个小组,开始一个项目。它具有适当的代码检查、用于记笔记或教学的实时绘图、语音聊天、极其直观的用户界面、自动保存和实时光标。目前没有任何限制(除了代码大小以防止恶意负载)。
为什么要在 Replit 或 VS Code Live Share 已经存在的情况下构建这个呢?
因为我的目标是简单性(和教育)。我想要一个轻量级的工具,适合那些只想编写和分享简单 Python 脚本(单独或与他人一起)的初学者,而不需要下载、付费墙或额外的干扰。它也没有内置 AI/助手,这实际上是许多教师和学习者所偏好的。而且它是免费的,哈哈。
技术栈(前端):React + TailwindCSS,CodeMirror 用于代码检查,Y.js 用于实时同步和实时光标,Skulpt 用于在浏览器中执行 Python(出于安全考虑 - 我最初想用 Docker 容器,但那样在规模上会消耗太多内存。Skulpt 的库有限,因此不幸的是像 pygame 这样的导入将无法使用)。我不太喜欢前端或 UI 设计,所以我依赖 AI 来帮助设计,但所有的逻辑/代码都是我自己的。通过 Vercel 部署。
技术栈(后端):Django(channels、auth、celery/redis 支持使其非常适合),通过 Supabase 的 PostgreSQL,JWT + OAuth 认证,Redis 用于通道层 + 缓存,完全 Docker 化 + 部署在 VPS 上(8GB RAM,$7/月的优惠)。
数据模型:用户 <-> 小组 -> 项目 -> 代码,用户可以加入多个小组,小组可以有多个项目,每个项目属于一个小组,并且有一个代码文件(为了简单起见,保持简单,尽管我可能会稍后添加文件系统)。
在构建这个项目时,我遇到了很多问题,尤其是与后端相关的问题。我最大的问题是如何创建一个可靠且智能的自动保存系统。我不能让它在每次用户按键时保存,因为显而易见,这会在规模上使数据库不堪重负。因此,我想出了一个我非常自豪的解决方案;我使用 Redis 来缓存活动项目,然后每分钟使用 Celery 循环遍历这些活动项目,并将代码持久化到数据库。我通过跟踪每个项目的用户数量来实现这一点,每当有人加入或离开时,如果某个项目的用户数量降到 0,就将其从 Redis 中移除(同时保存代码)。Redis 非常快速,因此在每次按键时保存代码根本不是问题。我实际上是用一石四鸟,因为我重用了已经集成到我的通道层中的 Redis 来跟踪活动项目,并缓存代码,这样当新用户进入项目时,就可以从 Redis 中获取代码,而不是访问数据库。我甚至可以将 Redis 作为 Celery 的消息代理(没有使用 RabbitMQ,因为我想节省存储,而不是将整个新服务 Docker 化)。这在规模上也能很好地工作,因为 Celery 会将大量代码的自动保存任务卸载到后端。当有人离开项目时,代码也会保存。后来我遇到的另一个问题是,如果人们尝试发送大量文本,所以我将限制设定为 1 MB(会对此进行调整)。
在 VPS 上部署是另一个挑战。我花了大约 8 小时来处理 Nginx、Certbot、Docker 和 GitHub Actions,以使一切正常运行。这很令人沮丧,但我学到了很多东西。
如果你感兴趣,或者想亲自查看这个项目,源代码在这里。欢迎贡献:<a href="https://github.com/SJRiz/pytogether" rel="nofollow">https://github.com/SJRiz/pytogether</a>。
我仍在学习,因此任何反馈都将非常棒(以及贡献)!