【问题标题】:Django vs other Python web frameworks?Django 与其他 Python Web 框架?
【发布时间】:2010-10-16 16:12:01
【问题描述】:

我几乎尝试了所有现有的 Python Web 框架,但我花了很长时间才意识到没有灵丹妙药的框架,每个都有自己的优点和缺点。我从Snakelets 开始,并且非常享受能够在较低级别控制几乎所有内容而无需大惊小怪,但后来我发现TurboGears 并且从那以后我一直在使用它(1.x)。 Catwalk 和 Web 控制台等工具对我来说非常宝贵。

但是随着 TurboGears 2 的推出,它带来了 WSGI 支持,并且在阅读了 Django 和 WSGI 阵营之间的宗教辩论之后,我真的在“以正确的方式做事”之间左右为难 em>,例如,学习 WSGI,花费宝贵的时间编写 Django 和其他全栈框架中已经存在的功能,而不是使用 Django 或为我做所有事情的高级框架。我可以看到后者的缺点非常明显:

  1. 在这个过程中我没有学到任何东西
  2. 如果我需要做任何较低级别的事情,那会很痛苦
  3. 仅使用身份验证的基本站点所需的开销是疯狂的。 (海事组织)

所以,我想我的问题是,哪个是更好的选择,还是只是一个意见问题,如果 Django 以最小的麻烦实现了我想要的,我应该接受它并使用它(我想要身份验证和我的数据库的 CRUD 接口)?我尝试了 Werkzeug、Glashammer 和朋友,但 AuthKit 和 Repoze 吓到了我,以及设置基本身份验证所涉及的步骤数量。我查看了 Pylons,但文档似乎缺乏,当引用身份验证或 CRUD 接口等简单功能时,各种 wiki 页面和文档似乎相互矛盾,版本等有不同的 hack。


感谢 S. Lott 指出我不够清楚。我的问题是:从长远来看,以下哪一项是值得的,但在短期内并不痛苦(例如,某种中间立场,有人吗?) - 学习 WSGI,还是坚持使用“包含电池”的框架?如果是后者,我将不胜感激关于是否应该再试一次 Django、坚持使用 TurboGears 1.x 或冒险进入其他框架的建议。

另外,我尝试过 CherryPy,但似乎找不到一个足够好的 CRUD 应用程序,我可以立即投入使用。

【问题讨论】:

  • 你能澄清你的问题吗?在哪些选项中“哪个是更好的选择”? Django vs. TurboGears 1 vs. TurboGears 2?请澄清一下,以便我们知道您的真正要求以及您真正需要的帮助。

标签: python django wsgi web-frameworks turbogears


【解决方案1】:

你看过 CherryPy。它简约,但高效且简单。它的级别足够低,不会妨碍他们,但足够高以隐藏复杂性。如果我没记错的话,TurboGears 就是建立在它之上的。

使用 CherryPy,您可以选择一切。 (模板框架、ORM(如果需要)、后端等)

【讨论】:

    【解决方案2】:

    我想说您对使用 Django 或类似的全栈框架“不学习任何东西”有点过于悲观,并且低估了文档和大型社区的价值。即使使用 Django,仍然有相当长的学习曲线;如果它不能做你想做的一切,那也不是框架代码是不可穿透的。

    一些个人经验:我花了数年时间,断断续续地玩弄 Twisted/Nevow、TurboGears 和其他一些 Python Web 框架。我从来没有完成任何事情,因为框架代码永远未完成并且在我下面被重写,文档通常不存在或错误,唯一可行的支持是通过 IRC(我经常得到很好的建议,但如果我也问的话,我觉得我在强加很多问题)。

    相比之下,在过去的几年里,我用 Django 淘汰了一些网站。与我之前的经验不同,它们实际上已部署并正在运行。 Django 开发过程可能缓慢而谨慎,但它导致的比特腐烂和弃用要少得多,并且文档实际上很有帮助。

    几周前对 Django finally went in 的 HTTP 身份验证支持,如果这就是您在 #3 中所指的内容。

    【讨论】:

    • 您如何比较 repoze.bfg 在文档、支持、最后润色等方面?
    【解决方案3】:

    你检查过 web2py 吗?在最近评估了许多 Python Web 框架后,我决定采用这个。如果您还没有,也请查看 Google App Engine。

    【讨论】:

      【解决方案4】:

      Django 绝对值得学习,而且听起来很适合您的目的。它附带的管理界面易于启动和运行,并且确实使用身份验证。

      至于“任何较低级别”,如果您的意思是 sql,则完全可以使用 extra 关键字将 sql 推入您的查询中。从风格上讲,您总是尽量避免这种情况。

      至于“什么都不学”……真正的问题是你的偏好是主要学习低层次的东西还是高层次的东西,这几乎不是这里任何人都可以为你回答的问题。

      【讨论】:

        【解决方案5】:

        我是 TurboGears 的粉丝,这正是原因:控制和做事正确与简单之间的一个很好的权衡。

        当然,您必须自己决定。也许你更愿意学得更少,也许更多。也许我喜欢知识/控制的领域(例如数据库),你不会关心的。并且不要误会。我没有将任何框架描述为必然是困难或错误的。这只是我的主观判断。

        如果可能的话,我还会推荐 TurboGears 2。当它问世时,我认为它在选择的默认值(genshi、pylons、SqlAlchemy)方面会比 1.0 好得多

        【讨论】:

          【解决方案6】:

          我建议使用 TurboGears 2。他们在集成 Python 世界的精华方面做得非常出色。

          WSGI:假设您正在 TG2 或其他一些框架中开发中等复杂的项目/业务解决方案,比如 Grok。即使这些框架支持 WSGI,这是否意味着使用这些框架的人必须学习 WSGI?在大多数情况下,答案是否定的。我的意思是毫无疑问拥有这些知识是件好事。

          WSGI 知识可能在以下情况下更有用

          • 您想使用一些中间件或其他一些未作为标准堆栈的一部分提供的组件,例如。带有 TG 或 Grok without ZODB 的 Authkit。
          • 您正在进行一些集成。

          CherryPy 很好,但请考虑在事务结束时处理数据库提交/回滚、公开 json、在这种情况下进行验证 TG、Django 之类的框架为您完成所有工作。

          【讨论】:

          • CherryPy 更 Pythonic,如果你遵循 zen(python.org/dev/peps/pep-0020) 的规则:显式优于隐式。简单优于复杂。我不喜欢在幕后发生的魔术,比如提交和回滚。
          【解决方案7】:

          我建议再看看 TG2。我认为人们没有注意到自上一个版本以来取得的一些进步。除了不断增长的 WSGI 实用程序堆栈之外,还有很多 TG2 特定的项目需要考虑。以下是几个亮点:

          TurboGears Administration System - 数据库的这个 CRUD 接口可以使用声明性配置类完全自定义。它还与 Dojo 集成,为您提供无限可滚动的表格。服务器端验证也是自动化的。管理界面使用 RESTful url 和 HTTP 动词,这意味着使用行业标准以编程方式连接很容易。

          CrudRestController/RestController - TurboGears 提供了一种结构化的方式来处理控制器中的服务。只需扩展我们的 RestController,您就可以使用标准化的 HTTP 动词。将Sprox 与 CrudRestController 结合使用,您可以使用完全可自定义的自动生成表单将 crud 放在应用程序的任何位置。 TurboGears 现在支持将 mime 类型作为 url 中的文件扩展名,因此您可以让控制器渲染 .json 和 .xml,并使用与渲染 html 相同的接口(从控制器返回字典)

          如果您单击这些链接,您会看到我们有一组使用 sphinx 构建的新文档,它比过去的文档更广泛。

          有了最好的 web serverORMtemplate system(s)(选择你自己的),很容易理解为什么 TG 对那些想要快速上手但仍然拥有随着网站的增长,可扩展性。

          TurboGears 通常被视为试图击中一个移动的目标,但我们在发布方面保持一致,这意味着您不必担心在后备箱中工作以获得所需的最新功能。面向未来:更多 TurboGears 扩展,可让您的应用通过简单的粘贴命令来扩展功能。

          【讨论】:

          • 从技术上讲,我对 Turbogears 没有任何问题。但我发现社区精英对新手的帮助不如 Rails / Django / web2py。
          【解决方案8】:

          您的问题似乎是“是否值得学习 WSGI 并自己做所有事情”或使用“为您做所有事情的全栈框架”。

          我会说这是一种错误的二分法,显然还有第三种方式。 TurboGears 2 试图提供一条从“为你做所有事情”风格的框架到理解 WSGI 中间件的平滑路径,以及自定义框架的几乎每个方面以满足应用程序需求的能力。

          我们可能不会在每个级别的每个地方都取得成功,但特别是如果你已经有一些 TurboGears 1 的经验,我认为 TG2 的学习曲线一开始会非常非常容易,你将有能力去在你需要的时候更深入。

          解决您的特定问题:

          • 我们提供了一个开箱即用的授权系统,与您在 TG1 中使用的系统相匹配。
          • 我们提供了一个类似“django admin”的开箱即用界面,称为 tgext.admin,它与 dojo 配合使用非常好,可以将精美的电子表格界面作为默认界面。

          我还想谈谈现有的几个其他选项,并谈谈其好处。

          • CherryPy. 我认为 CherryPy 是一个很棒的网络服务器和一个不错的简约网络框架。它内部不是基于 WSGI,但具有良好的 WSGI 支持,尽管它不会为您提供“全栈”体验。但是对于既需要快速又不特别适合 Django 或 TurboGears 提供的默认设置的自定义设置,这是一个很好的解决方案。

          • Django. 我认为 Django 是一个非常好的、紧密集成的网站开发系统。如果您的应用程序和工作风格非常适合它的标准设置,那就太棒了。但是,如果您需要调整数据库使用、替换模板语言、使用不同的用户授权模型或以其他方式做不同的事情,您很可能会发现自己在与框架作斗争。

          • Pylons 像 CherryPy 这样的 Pylon 是一个极简主义的网络框架。与 CherryPy 不同的是,它在整个系统中启用了 WSGI,并提供了一些健全的默认值,例如 SQLAlchemy 和 Mako,可以帮助您很好地扩展。新的官方文档比旧的 wiki 文档质量好得多,这就是您所看到的。

          【讨论】:

            【解决方案9】:

            Django 和 WSGI 阵营之间的宗教争论

            您似乎对什么是 WSGI 和 Django 有点困惑。说 Django 和 WSGI 竞争有点像说 C 和 SQL 竞争:你在比较苹果和橘子。

            Django 是一个框架,WSGI 是一个协议(由 Django 支持),用于服务器如何与框架交互。最重要的是,直接学习使用 WSGI 有点像学习汇编。这是一次很棒的学习经历,但对于生产代码来说,这并不是你应该做的事情(也不是打算这样做的)。

            无论如何,我的建议是自己弄清楚。大多数框架都有“在一小时内制作一个 wiki/blog/poll”类型的练习。花一点时间与每一个,找出你最喜欢哪一个。毕竟,如果你不愿意尝试不同的框架,你怎么能在它们之间做出选择呢?

            【讨论】:

              【解决方案10】:

              学习 WSGI

              WSGI 简单得离谱..它基本上是一个看起来像..的函数..

              def application(environ, start_response) pass
              

              收到 HTTP 请求时调用该函数。 environ 包含各种数据(如请求 URI 等),start_response 是一个可调用函数,用于设置标头。

              返回值是网站的正文。

              def 应用程序(环境,start_response): start_response("200 OK", []) 返回“...”

              这就是它的全部内容,真的.. 它不是一个框架,而是一个供网络框架使用的协议..

              对于创建网站,使用 WSGI不是“正确的方式” - 使用现有的框架是.. 但是,如果您正在编写 Python 网络框架,那么使用 WSGI 绝对是正确的方式。 .

              你使用哪个框架(CherryPy、Django、TurboGears 等)基本上是个人喜好。在每个框架中玩,看看你最喜欢哪个,然后使用它。有一个 StackOverflow 问题(有一个很好的答案)关于这个,"Recommendation for straight-forward python frameworks"

              【讨论】:

                【解决方案11】:

                我想说正确的答案取决于您真正想要和需要的东西,因为从长远来看,什么是值得的取决于您从长远来看需要什么。如果您的目标是尽快部署应用程序,那么“更简单”的路线,即。 Django,肯定是要走的路。一个经过充分测试和记录良好的系统的价值,正是您想要的,这一点不容小觑。

                另一方面,如果您有时间学习可能适用于其他领域的各种新事物,并希望拥有最广泛的定制范围,那么 Turbogears 之类的东西会更胜一筹。 Turbogears 为您提供了最大的灵活性,但您必须花费大量时间阅读外部文档,如 Repoze、SQLAlchemy 和 Genshi 以完成任何有用的事情。在某些情况下,TG2 文档故意不如 TG1 文档详细,因为人们认为外部文档比以前更好。这种事情是障碍还是投资,取决于你自己的要求。

                【讨论】:

                  【解决方案12】:

                  Pylons 对我来说似乎是一个很棒的工具:

                  • 真正的 Web 框架(CherryPy 只是一个 Web 服务器),
                  • 小型代码库 - 重用其他项目,
                  • 完全考虑到 WSGI 编写,基于 Paste,
                  • 允许您立即对应用程序进行编码,并在必要时触摸低级位,

                  我使用过 CherryPy 和 TurboGears 并查看了许多其他框架,但没有一个框架像 Pylons 那样轻巧高效。检查presentation at Google

                  【讨论】:

                    【解决方案13】:

                    Web2py 是这里的秘诀。不要错过检查它。

                    【讨论】:

                      猜你喜欢
                      • 1970-01-01
                      • 1970-01-01
                      • 2011-02-11
                      • 2011-06-09
                      • 2019-05-18
                      • 2010-10-28
                      • 2013-03-10
                      • 2014-05-17
                      • 2010-11-27
                      相关资源
                      最近更新 更多