61

我几乎尝试了所有存在的 Python Web 框架,我花了很长时间才意识到没有灵丹妙药的框架,每个都有自己的优点和缺点。我从Snakelets开始,并且非常享受能够毫不费力地在较低级别控制几乎所有东西,但后来我发现了TurboGears,并且从那时起我一直在使用它 (1.x)。像 Catwalk 和 web 控制台这样的工具对我来说是无价的。

但是随着 TurboGears 2 的推出,它带来了 WSGI 支持,并且在阅读了 Django 和 WSGI 阵营之间的宗教辩论之后,我真的在“以正确的方式做事”之间左右为难,例如,学习 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 应用程序,我可以立即投入使用。

4

13 回答 13

55

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

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

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

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

于 2009-03-31T22:25:31.977 回答
21

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

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

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

对 Django 的 HTTP 身份验证支持终于在几周前推出了,如果这就是你在 #3 中所指的。

于 2009-03-31T18:11:31.370 回答
16

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

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

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

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

凭借最好的Web 服务器ORM模板系统(选择你自己的),很容易理解为什么 TG 对于想要快速上手的人来说是有意义的,并且随着网站的增长仍然具有可扩展性。

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

于 2009-03-31T21:54:24.207 回答
11

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

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

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

要解决您的特定问题:

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

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

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

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

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

于 2009-03-31T22:07:15.843 回答
7

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

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

于 2009-03-31T17:46:40.823 回答
7

学习 WSGI

WSGI 非常简单。它基本上是一个看起来像的函数。

def application(environ, start_response) pass

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

返回值是网站的正文。

def application(environ, start_response): start_response("200 OK", []) return "..."

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

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

你使用哪个框架(CherryPy、Django、TurboGears 等)基本上是个人喜好。在每个框架中玩,看看你最喜欢哪个,然后使用它。有一个关于这个的 StackOverflow 问题(有一个很好的答案),“对直接 python 框架的建议"

于 2009-03-31T22:44:35.927 回答
2

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

于 2009-03-31T18:12:33.490 回答
2

我想说正确的答案取决于你真正想要和需要的东西,因为从长远来看,什么是值得的,取决于你从长远来看需要什么。如果您的目标是尽快部署应用程序,那么“更简单”的路线,即。Django,肯定是要走的路。一个经过充分测试和有据可查的系统的价值,正是您想要的不能被低估。

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

于 2009-04-01T09:36:46.483 回答
1

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

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

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

于 2009-03-31T19:04:16.643 回答
1

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

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

我使用过 CherryPy 和 TurboGears 并查看了许多其他框架,但没有一个像 Pylons 那样轻巧高效。查看Google 上的演示文稿

于 2009-05-29T14:09:47.780 回答
0

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

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

如果可能的话,我也会推荐 TurboGears 2。当它出现时,我认为它会比 1.0 好得多,因为它选择了默认值(genshi、pylons、SqlAlchemy)

于 2009-03-31T19:11:10.853 回答
0

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

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

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

  • 您想使用一些中间件或其他一些未作为标准堆栈的一部分提供的组件,例如。带有 TG 的 Authkit 或没有 ZODB 的 Grok
  • 你正在做一些整合。

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

于 2009-03-31T19:46:54.637 回答
-1

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

于 2015-11-12T01:36:31.150 回答