当前位置:  开发笔记 > 编程语言 > 正文

Django vs其他Python Web框架?

如何解决《Djangovs其他PythonWeb框架?》经验,为你挑选了6个好方法。

我已经尝试了所有存在的Python Web框架,我花了很长时间才意识到没有一个银弹框架,每个框架都有自己的优点和缺点.我开始使用Snakelets并且非常高兴能够在较低的水平上控制几乎所有东西而不用大惊小怪,但后来我发现了TurboGears并且我一直在使用它(1.x).像Catwalk和Web控制台这样的工具对我来说非常宝贵.

但是随着TurboGears 2的出现带来了WSGI的支持,在阅读了Django和WSGI阵营之间的宗教辩论之后,我真的在"以正确的方式做到"之间徘徊,例如,学习WSGI,花费宝贵的时间来编写功能已经存在于Django和其他全栈框架中,而不是使用Django或一些为我做任何事情的高级框架.我能看到的后者的缺点非常明显:

    我在这个过程中没有学到任何东西

    如果我需要做任何更低级别的事情,那将是一种痛苦

    仅使用身份验证的基本站点所需的开销是疯狂的.(IMO)

所以,我想我的问题是,这是更好的选择,还是仅仅是一个意见问题,如果它以最小的麻烦实现我想要的东西(我希望身份验证和CRUD接口,我应该使用Django)我的数据库)?我尝试过Werkzeug,Glashammer和朋友,但AuthKit和Repoze让我害怕,以及设置基本身份验证所涉及的步骤数量.我查看了Pylons,但文档似乎缺乏,并且在引用诸如身份验证或CRUD界面之类的简单功能时,各种wiki页面和文档似乎相互矛盾,对于版本等具有不同的hacks.


感谢S. Lott指出我不够清楚.我的问题是:从长远来看,下列哪一项是值得的,但在短期内并不痛苦(例如某种中间地带,任何人?) - 学习WSGI,或坚持使用"电池包含"框架?如果是后者,我会赞赏一个关于我是否应该再给Django一次尝试,坚持使用TurboGears 1.x,或冒险进入其他框架的建议.

此外,我尝试过CherryPy,但似乎找不到足够好的CRUD应用程序,我可以立即使用它.



1> Jason Baker..:

Django和WSGI难民营之间的宗教辩论

看起来好像你对WSGI是什么以及Django是什么感到困惑.说Django和WSGI竞争有点像说C和SQL竞争:你在比较苹果和橘子.

Django是一个框架,WSGI是一个协议(由Django支持),用于服务器如何与框架交互.最重要的是,学习直接使用WSGI有点像学习装配.这是一次很棒的学习经历,但是你不应该为生产代码做些什么(也不应该这样).

无论如何,我的建议是为自己弄清楚.大多数框架都有一个"在一小时内制作一个wiki/blog/poll"类型的练习.花一点时间与每一个,找出你最喜欢哪一个.毕竟,如果你不愿意尝试,你如何在不同的框架之间做出决定?


如此清楚地解决django/wsgi误解的+1

2> Nicholas Ril..:

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

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

相比之下,在过去的几年里,我用Django击败了一些网站.与我之前的经验不同,它们实际上已经部署并运行.Django开发过程可能会很慢而且小心,但它会导致更少的bitrot和弃用,以及实际上有用的文档.

几周前,Django的HTTP身份验证支持终于进入了,如果这就是你在#3中所指的那样.



3> 小智..:

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

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

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

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

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

TurboGears通常被视为试图击中一个移动目标,但我们对发布一致,这意味着您不必担心在主干外工作以获得所需的最新功能.展望未来:更多的TurboGears扩展将允许您的应用程序通过轻松的贴纸命令来增强功能.



4> Mark Ramm..:

您的问题似乎是"是否值得学习WSGI并自己做所有事情",或者使用"为您完成所有事情的完整堆栈框架".

我会说这是一种错误的二分法,而且有一种明显的第三种方式.TurboGears 2试图提供从"为您做的一切"风格框架到理解WSGI中间件的平滑路径,并能够自定义框架的几乎每个方面以满足您的应用程序需求.

我们可能不会在每个级别的每个地方都取得成功,但特别是如果你已经获得了一些TurboGears 1的经验,我认为TG2学习曲线起初非常非常容易,你可以在你需要它.

解决您的特定问题:

我们提供开箱即用的授权系统,与您在TG1上使用的系统相匹配.

我们提供了一个开箱即用的"django admin"之类的界面,名为tgext.admin,它与dojo配合使用,可以像界面一样制作一个奇特的电子表格.

我还想谈谈其他几个选项,并谈谈好处.

CherryPy的. 我认为CherryPy是一个伟大的网络服务器和一个很好的简约网络框架.它不是基于内部的WSGI,而是具有良好的WSGI支持,尽管它不会为您提供"完整堆栈"体验.但对于需要快速且不太适合Django或TurboGears提供的默认设置的自定义设置,这是一个很好的解决方案.

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

像CherryPy这样的Pylons Pylons是一个很棒的简约网络框架.与CherryPy不同,它通过整个系统启用WSGI,并提供一些理智的默认值,如SQLAlchemy和Mako,可以帮助您很好地扩展.新的官方文档比旧的wiki文档质量要好得多,这些文档似乎是你看过的.



5> Martin..:

你看过CherryPy吗?它简约而有效且简单.它的水平足够低,不能让它们进入它们,但足够高以隐藏复杂性.如果我记得很清楚,TurboGears就是建立在它上面的.

使用CherryPy,您可以选择所有内容.(模板框架,ORM,如果需要,后端等)



6> dbr..:

学习WSGI

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

def application(environ, start_response) pass

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

返回的值是网站的正文.

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

这就是它的全部内容,真的......它不是一个框架,而是一个用于Web框架的协议.

对于创建站点,使用WSGI 不是 "正确的方法" - 使用现有的框架是..但是,如果您正在编写Python Web框架,那么使用WSGI绝对是正确的方式..

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

推荐阅读
mobiledu2402852357
这个屌丝很懒,什么也没留下!
DevBox开发工具箱 | 专业的在线开发工具网站    京公网安备 11010802040832号  |  京ICP备19059560号-6
Copyright © 1998 - 2020 DevBox.CN. All Rights Reserved devBox.cn 开发工具箱 版权所有