Django与其他Python Web框架?
我几乎尝试过每一个存在的Python Web框架,花了很长时间才意识到没有一个银弹子框架,每个框架都有自己的优点和缺点。 我从Snakelets开始,衷心享受能够控制几乎所有的低层次的事情,但是之后我发现了TurboGears ,从那以后我一直使用它(1.x)。 Catwalk和Web控制台等工具对我来说是非常宝贵的。
但是随着TurboGears 2出现在WSGI的支持下,在阅读Django和WSGI阵营之间的宗教辩论之后,我真的在“做正确的方式” ,例如学习WSGI,花费宝贵的时间编写function已经存在于Django和其他全栈框架中,而不是使用Django或者一些高级框架来为我做所有事情。 后面我看到的缺点是非常明显的:
- 我在这个过程中没有学到任何东西
- 如果我需要做更低层次的事情,那将是一件痛苦的事情
- 只是使用身份validation的基本站点所需的开销是疯狂的。 (IMO)
所以,我想我的问题是,这是更好的select,还是只是一个意见的问题,我应该吸了它,并使用Django,如果它达到我想要的最小的大惊小怪(我想authentication和CRUD接口我的数据库)? 我尝试过Werkzeug,Glashammer和朋友,但是AuthKit和Repoze吓跑了我,以及设置基本身份validation的步骤数。 我看了一下Pylons,但文档看起来很缺乏,当引用诸如身份validation或CRUD界面之类的简单function时,各种维基页面和文档似乎相互矛盾,对版本等进行了不同的修改。
感谢S. Lott指出我并不清楚。 我的问题是:从长远来看,下列哪一项是值得的,但在短期内不是痛苦的(例如,某种中间立场,任何人?) – 学习WSGI,还是坚持一个“电池供电”的框架? 如果是后者,那么我想知道是否应该再次尝试Django,坚持使用TurboGears 1.x,还是冒险进入其他框架。
此外,我已经尝试过CherryPy,但似乎无法find一个足够好的CRUD应用程序,我可以立即使用和使用。
我build议再看看TG2。 我认为人们没有注意到自上个版本以来已经取得的一些进展。 除了日益增长的WSGI实用程序堆栈之外,还有不lessTG2特定的项目需要考虑。 这里有几个亮点:
TurboGearspipe理系统 – 您的数据库的CRUD接口可以使用声明性configuration类完全自定义。 它也与Dojo集成在一起,为您提供无限可滚动的表格。 服务器端validation也是自动的。 pipe理界面使用RESTful URL和HTTP动词,这意味着使用行业标准可以很容易地通过编程方式进行连接。
CrudRestController / RestController – TurboGears提供了一种结构化的方式来处理您的控制器中的服务。 通过扩展我们的RestController,使您能够使用标准化的HTTP动词。 将Sprox与CrudRestController结合在一起,你可以用完全可自定义的自动生成表单把你的应用程序放在你的应用程序的任何地方。 TurboGears现在支持MIMEtypes作为URL中的文件扩展名,所以你可以让你的控制器渲染.json和.xml与它使用相同的接口来渲染HTML(从控制器返回一个字典)
如果你点击链接,你将会看到我们有一套用狮身人面像构build的新文档,比过去的文档更广泛。
有了最好的Web服务器 , ORM和模板系统 (select你自己的),很容易明白为什么TG对于想要快速发展的人来说是有意义的,而且随着他们的网站的增长仍然具有可扩展性。
TurboGears经常被看作是试图击中一个移动的目标,但是我们对于发布是一致的,这意味着你不必担心为了得到你需要的最新function而工作。 outlook未来:更多的TurboGears扩展将允许您的应用程序通过简单的命令来增加function。
Django和WSGI难民营之间的宗教辩论
看起来好像对WSGI和Django是什么有些困惑。 说Django和WSGI竞争有点像说C和SQL是竞争的:你在比较苹果和橘子。
Django是一个框架,WSGI是服务器如何与框架进行交互的协议(由Django支持)。 最重要的是,学习直接使用WSGI有点像学习程序集。 这是一个很好的学习经验,但这不是你应该为生产代码做的事情(也不是这个意图)。
无论如何,我的build议是自己解决。 大多数框架都有“在一个小时内进行维基/博客/投票”的练习。 花一点时间与每一个,找出你最喜欢哪一个。 毕竟,如果你不愿意尝试,你怎么能在不同的框架之间做出决定?
我会说你对使用Django或类似的全栈框架的“不学习任何东西”过于悲观,并低估了文档和大型社区的价值。 即使使用Django,学习曲线仍然相当可观。 如果它没有做到你想做的一切,那就不像框架代码是不可能的。
一些个人的经验:我花了数年时间,在Twisted / Nevow,TurboGears和其他一些Pythonnetworking框架上忙忙碌碌。 我从来没有完成任何事情,因为框架代码永远是未完成的,并被重写在我的下面,文档通常是不存在或错误的,唯一可行的支持是通过IRC(我经常得到很好的build议,但如果我也问我许多问题)。
相比之下,在过去几年中,我用Django去掉了一些网站。 不像我以前的经验,他们实际上是部署和运行。 Django的开发过程可能会很缓慢和谨慎,但是它会导致更less的琢磨和弃用,而且文档实际上是有帮助的。
Django的HTTPauthentication支持终于在几周前进行了,如果这就是你在#3中提到的。
你的问题似乎是“值得学习WSGI,自己做一切事情”,或者使用“为你做所有事情的全栈框架”。
我会说这是一个错误的二分法,还有一个明显的第三条道路。 TurboGears 2试图提供一个从“为你做所有事情”风格框架到对WSGI中间件的理解的平滑path,并且能够定制框架的几乎每个方面以适应你的应用程序的需求。
我们可能在每个级别的每个地方都不会成功,但是特别是如果你已经有了一些TurboGears 1的经验,我认为TG2的学习曲线一开始就会非常非常容易,而且你将有能力在你需要它。
解决您的特定问题:
- 我们提供了一个与TG1相同的授权系统。
- 我们提供了一个开箱即用的“django admin”,就像名为tgext.admin的界面一样,它可以很好地与dojo一起使用,使得像界面这样的花式电子表格成为默认设置。
我还想解决一些其他的select,并谈一些有关的好处。
-
CherryPy的。 我认为CherryPy是一个伟大的networking服务器和一个很好的简约的networking框架。 它不是基于WSGI内部的,但是具有良好的WSGI支持,尽pipe它不会为您提供“完整堆栈”体验。 但是对于需要快速定制的设置,并不适合Django或TurboGears提供的默认设置,这是一个很好的解决scheme。
-
Django的。 我认为Django是一个非常好的,集成的系统,用于开发网站。 如果你的应用程序和工作风格符合标准的设置,那就太棒了。 但是,如果您需要调整数据库的使用,请更换模板语言,使用不同的用户授权模型,或者以其他方式做不同的事情,那么您很可能会发现自己正在与框架作斗争。
-
像CherryPy的塔架塔架是一个极好的简约的networking框架。 与CherryPy不同,它是通过整个系统启用的WSGI,并提供了一些理想的默认值,如SQLAlchemy和Mako,可以帮助您扩展。 新的官方文档质量比旧版维基文档好得多,这些文档就是你看上去的。
你看看CherryPy了吗? 这是简约,但高效和简单。 它不够低,不足以阻碍复杂性。 如果我还记得,TurboGears就是build立在它上面的。
与CherryPy,你有很多的select。 (模板框架,如果需要ORM,后端等)
了解WSGI
WSGI是荒谬的简单..它基本上是一个函数,看起来像..
def application(environ, start_response) pass
在收到HTTP请求时调用该函数。 environ
包含各种数据(如请求URI等), start_response
是一个可调用的函数,用于设置标题。
返回的值是网站的主体。
def application(environ,start_response):start_response(“200 OK”,[])return“…”
这就是所有这一切,真的..这不是一个框架,但更多的networking框架使用的协议。
对于创build网站,使用WSGI 不是 “正确的方式” – 使用现有的框架是..但是,如果您正在编写一个Python Web框架,那么使用WSGI绝对是正确的方法。
你使用的是哪个框架(CherryPy,Django,TurboGears等)基本上是个人喜好。在每一个环境中玩耍,看看你最喜欢哪一个,然后使用它。有一个StackOverflow问题(有一个很好的答案), “对于直接Python框架的build议“
你检查了web2py吗? 在最近评估了很多Python Web框架之后,我决定采用这个框架。 如果还没有,请查看Google App Engine。
我会说正确的答案取决于你真正想要和需要什么,因为从长远来看,什么是值得的取决于你长期需要什么。 如果你的目标是尽快部署应用程序,那么“简单”的路线,即。 Django,肯定是要走的路。 一个经过充分testing和文件logging的系统的价值正是你想要的,不能低估。
另一方面,如果您有时间学习各种可能适用于其他领域的新事物,并希望有最广泛的定制范围,那么像Turbogears这样的产品就更好了。 Turbogears为您提供了最大的灵活性,但您将不得不花费大量的时间阅读外部文档,例如Repoze,SQLAlchemy和Genshi,以获得有用的信息。 在某些情况下,TG2文档故意不如TG1文档详细,因为认为外部文档比以前更好。 这种事情是障碍还是投资取决于你自己的要求。
Django绝对值得学习,而且听起来像适合你的目的。 它自带的pipe理界面很容易启动和运行,并且使用authentication。
至于“任何更低的水平”,如果你的意思是SQL,完全可以推到您的查询与额外的关键字的SQL。 在风格上,你总是尽量避免这种情况。
至于“不学什么”……真正的问题是,你的偏好主要是学习更低一级还是更高一级的问题,这个问题在这里几乎不能回答你。
塔对我来说似乎是一个很好的工具:
- 一个真正的Web框架(CherryPy只是一个Web服务器),
- 小代码基础 – 重用其他项目,
- 牢记于心,基于Paste,
- 允许您马上编写应用程序,并在必要时触摸低级别的位,
我使用了CherryPy和TurboGears,并且看到了许多其他的框架,但是没有一个像Pylons那样轻巧而富有成效。 在Google上查看演示文稿 。
我是一个TurboGears的粉丝,这正是为什么:控制和做事之间的一个很好的权衡与正确与轻松。
当然,你必须自己决定。 也许你宁愿less学,也许更多。 也许我喜欢知识/控制(例如数据库)的领域,你可以不在乎。 不要误解。 我没有把任何框架描述为一定是硬性的或错误的。 这只是我的主观判断。
如果可能的话,我也会推荐TurboGears 2。 当它出现时,我认为它会比默认select的要好得多(genshi,pylons,SqlAlchemy)
我会build议TurboGears 2.他们已经做了很好的整合Python世界最好的工作。
WSGI:假设您正在TG2或其他框架中开发适度复杂的项目/业务解决scheme。 即使这些框架支持WSGI,这是否意味着使用这些框架的人必须学习WSGI? 在大多数情况下,答案是否定的。我的意思是毫无疑问有这个知识。
WSGI的知识可能是更有用的情况下
- 你想要使用一些中间件或其他一些不作为标准堆栈的一部分提供的组件。 Authkit与TG或Grok没有ZODB 。
- 你正在做一些整合。
CherryPy是好的,但想到在事务结束时处理数据库提交/回滚,暴露json,在这种情况下validationTG,Django像框架一样为你做。
Web2py是这里的秘密。 不要错过检查。