我正在开展一个项目,该项目将图片和文本程序的50mb python Graduated interval召回评级系统转换为基于网站的应用程序。 (然后围绕它设计一个网站)它需要连接到数据库以经常存储用户信息,因此需要在服务器端运行正确吗?假设我什么都不知道,完成这个的最佳结构是什么?似乎有很多不同的选择,我感到迷茫。
我一直在使用CGI为原始python代码创建Web UI。这甚至可以实现吗?
怎么样? 金字塔/ uWSGI / pylon / flask
还是Django? (虽然我被告知要禁止这个项目)
答案 0 :(得分:7)
嗯,可能很难给你一个好的建议,因为你的项目描述很模糊 - 世界上什么是“50mb python毕业间隔召回评级系统的图片和文本程序”??? :) - 但我会尝试概述您列出的选项之间的区别:
Django 是一种集成解决方案 - 它包括模板系统,ORM,表单框架等等。
由于这些东西都紧密相连,Django提供了一些细节,如内置管理界面,可插拔应用程序等。这将使您可以更轻松地开始开发传统网站,因为您不需要自己建造这些东西。例如,要使用Django构建博客站点,您需要定义数据库模型,几个路由和几个视图,就是这样 - 您可以使用内置管理界面添加和编辑博客条目并使用身份验证进行身份验证可插拔认证模块。
但是当然要付出代价 - 确保所有这些位合作,Django在某种程度上要求您使用Django提供的技术 - 即,您必须使用Django ORM定义模型并使用Django模板编写模板。你可以交换不同的位用于其他东西,但是可以理解的是它们不适用于框架的其余部分 - 即你可以使用另一个ORM,例如SQLAlchemy来访问数据库,但这样的模型赢了“使用Django的管理界面。
在某种程度上,Django还期望数据库表的特定结构(即它希望能够基于Python代码中定义的模型创建这些表),这将使得使用现有数据库变得更加困难。另外,我理解它期望你有一个SQL数据库。
因此,在我看来,Django是构建“典型”Django网站(它是为新闻网站构建)的一个非常好的选择,它可以利用现有的可插拔应用程序和其他Django功能。
另一方面,金字塔不要求您使用任何特定技术进行数据库访问 - 事实上,它根本不需要您拥有数据库 - 您可以构建应用程序它适用于存储在文件系统上的数据,在ZODB等对象数据库或某些分布式NoSQL存储中。甚至可能是一些XML文件和一堆图像...你的想象力是你的极限
使用SQL数据库时,它不希望数据库具有某种结构。此外,SQLAlchemy,推荐的Pyramid的ORM,被认为比Django ORM更灵活,更强大
它不要求您使用任何特定的模板库或表单库,因此您可以选择最适合您需求的任何内容。
Pyramid甚至不要求你使用路由映射是大多数web框架的基石功能 - 除了路由映射Pyramid支持URL遍历,这可以是一种非常强大的方式来处理分层数据结构。
虽然不要求您使用任何特定技术,但Pyramid确实为典型用例提供了一些理智的模板。
这种灵活性的成本可能更难以找到现有的“应用程序”,可以插入您的自定义Pyramid网站而不做任何更改 - 尽管Pyramid中的优秀WSGI支持可以利用它。
在项目与repoze.bfg合并之前,Pylons 现在称为金字塔。
uWSGI 更多是为Pyramid应用程序(或其他符合WSGI标准的应用程序)提供服务的应用程序/协议
烧瓶 - 从未使用它,也许其他人会给你一些概述。
因此,简而言之,Django和Pyramid之间的选择归结为“我可以在我的网站上使用多少Django的内置功能” - 因为如果你不打算使用Django的自动功能管理员或大量使用第三方可插拔应用程序 - 其他一切在金字塔中更好:)
答案 1 :(得分:1)
我被告知塔架非常好(更新的金字塔),但我个人使用Django而且我对它非常满意。甚至不尝试使用CGI,因为这是我犯的同样的错误 - 后来我发现改变所有的html是一个痛苦的屁股。
答案 2 :(得分:1)
如果应用程序需要与已经存在的数据库通信,那么django将不会为你买多少价值IMO。因为除非db模式遵循django期望的内容(自动增加int主键等等),否则管理界面将不适用于该部分,对于假定预期模式的任何其他web框架也是如此。
那么,sqlalchemy是你最好的选择。它有一个orm层,但你不必使用它,只需使用查询接口就可以获得很多好处。
就webframeworks而言,将其缩小到任何可以使用sqlalchemy的东西。由于上面提到的原因,除了Django,Zope和web2py之外什么都不是。虽然对于Zope来说,它的价值在某种程度上源于它得到了zodb的支持。但zodb根本无法帮助您使用现有的数据库和数据。
因此,除了Web框架的剩余部分之外,我将使用选择标准的是它将请求路由到视图的能力。它与您的网址生成策略的匹配程度如何? IMO,金字塔在这个领域非常灵活。但你可能不需要那样。您可以使用烧瓶或瓶子。甚至是直接的webob。
另一个稍微不那么重要的标准是模板引擎/语言,大多数框架将支持更受欢迎的标准,例如jinja2等......
我个人的选择是金字塔,因为它在请求路由部门中从超级容易到超级毛发很好地扩展。但同样,根据您希望您的网址如何工作,您可能不需要这样做。
答案 3 :(得分:0)
Django有一个命令(./manage.py inspectdb),可以帮助您创建当前数据库的初始模型。如果您决定重新设计数据库,这仍然可以更轻松地将数据移动到新架构中。就个人而言,我喜欢Django,但其他人可能非常适合您的应用程序。
要与服务器通信,您可以使用AJAX。
答案 4 :(得分:0)
我发现Django对我的需求太重了 我CherryPy, a minimalist Web Framework
取得了不错的成绩