type
status
date
slug
summary
tags
category
icon
password
作为一名长期使用
Django的开发人员,我注意到FastAPI在Python社区中越来越受欢迎,这是有充分理由的。FastAPI具有易用、性能、简洁的语法、通过Pydantic实现的Python类型提示集成、原生Inbox支持以及许多可能会让Django爱好者羡慕的其他功能。
然而,这并不意味着我们应该立即抛弃Django转而使用FastAPI。以下是我个人认为的十个原因:🖥️ 1. 无聊的技术胜过花哨的技术
虽然
FastAPI拥有许多引人注目的功能,但随着工作年限的增长,我越来越重视项目的可靠性。Django在众多的Python Web框架中可以称得上是稳定性之王,多年来突破性的变化和回退情况微乎其微。每次更新都经过严格的测试,框架几乎没有外部依赖关系,从而避免了重大陷阱。
Django经受住了时间的考验。这是一种可靠的技术,而且简单有效。🛢️ 2. 丰富的第三方资源
多年的版本迭代中,
Django积累了丰富的第三方资源,其中许多仍然随着Django而更新(尤其是对于后端开发)并且维护得很好。Stack OverFlow上的答案在多年后依然有效,ChatGPT也根据其广泛的内容提供相关建议。当我遇到一个问题时,很多时候都能找到一个可用的包来解决它,或者至少有一篇详细介绍解决方案的博客文章。
🤑 3. 灵活性高,支持全栈或后端
尽管
Django具有全栈功能,但纯粹使用Django作为后端框架是也是可行的。这让我们可以用更少的成本做更多的事情。不可否认,由于针对性课程的稀缺,从头开始学习Django,只专注于后台开发可能会具有挑战性。然而,即使对于单页面应用程序,选择使用
Django创建基本前端对于简单的、非面向客户端的CRUD应用程序来说也是有利的。💽 4. ORM偏好
使用
Django的ORM工作了多年后,切换到SQLAlchemy或任何其他ORM总是感觉不自然。这并不是对SQLAlchemy易用性的质疑,而是承认自己适应不同ORM语法的困难。虽然
FastAPI提供了ORM替代方案,但经验告诉我,选择不太常见的解决方案会带来一系列挑战,包括文档缺失和匮乏的技术支持。🚀 5. 异步特性的用处有限
FastAPI 具有原生 ASGI 服务器支持的优势,Django目前也支持使用异步特性,但在某些情况下,我仍觉得 Django 异步功能并非必要。在使用 JavaScript 的 Promise 和 async/await 后,我意识到这些功能往往会使事情变得复杂,因为大多数业务场景下都不需要它们。对于真正的异步任务,像Celery这样的工具就足够了,对于 websocket,可以使用Django-channel等解决方案。
🏗️ 6. 易创建不等于易维护
这种批评并不是针对
FastAPI,而是针对那些用“hello world”示例过度简化其介绍的框架。启动项目的难易程度并不等于其随着时间的推移的可管理性或可扩展性。虽然在FastAPI的介绍中,创建一个API项目非常容易且快速,但当你真正使用FastAPI编写产品级项目时就会发现,项目的配置和维护将会越来越复杂和混乱。Django 的初始设置可能看起来很复杂,但随着项目的扩展,它的结构和约定可以指导开发人员,使得初始开销是值得的。🏆 7. 约定的价值
Django的约定提供了避免常见陷阱和理解最佳架构实践的路线图。虽然有时存在限制,但这些约定有助于开发人员之间更轻松地协作和决策。框架构建者比我聪明,99% 的时候,他们所执行的内容会帮助我避免陷阱,同时也会教会我一个好的架构是什么样子的。⚡ 8. 性能并不是一切
尽管
Django可能不是性能最好的框架,尤其是与 FastAPI 相比,但我发现开发技能对性能问题的影响比所用技术的固有功能更大。此外,并不是每个项目都需要极高的性能水平,对于那些需要极高性能水平的项目来说,Python也可能不是首选。🛣️ 9. 对项目可持续性的担忧
FastAPI目前为止,其主要的更新和维护基本都依赖于原作者一人,项目可持续性着实令人担忧。我在刚开始使用Vue.js的时候也有同样的担心,但好在越来越多的人参到项目的维护中了。希望能有更多的优秀开发者参与到FastAPI的维护和更新中。⚒️ 10. 简单项目考虑全栈框架
作为一名熟悉
TypeScript 的伪全栈开发人员,我发现使用NextJs这样的全栈 TypeScript 框架,再加上Prisma这样的 ORM,对于具有简单后端需求的项目更具吸引力。这种方法通过前端和后端的统一语言简化了项目管理。Django提供的全栈开发能力是FastAPI无法比拟的.
- 作者:Jamessen
- 链接:/about/article/djangovsfastapi
- 声明:本文采用 CC BY-NC-SA 4.0 许可协议,转载请注明出处。