2

我正在开展一个项目,该项目将用于图片和文本程序的 50mb python 分级间隔召回评级系统转换为基于网站的应用程序。(然后围绕它设计一个网站)它需要连接到数据库来经常存储用户信息,所以它需要在服务器端运行对吗?假设我什么都不知道,完成这个的最佳结构是什么?似乎有很多不同的选择,我感到迷茫。

我一直在使用 CGI 为原始 python 代码创建 Web UI。这甚至可以实施吗?

金字塔 / uWSGI / 塔 / 烧瓶怎么样

还是姜戈?(尽管我被告知不要在这个项目中使用它)

4

5 回答 5

7

好吧,可能很难给你一个好的建议,因为你的项目描述很模糊——到底什么是“50mb python 图片和文本程序的分级间隔召回评级系统”?:) - 但我会尝试概述您列出的选项之间的区别:

Django是一种集成解决方案——它包括模板系统、ORM、表单框架等等。

由于这些东西都紧密联系在一起,Django 提供了一些细节,例如内置管理界面、可插拔应用程序等。这将使传统网站的启动开发更容易,因为您不需要构建这些自己的事情。例如,要使用 Django 构建博客站点,您需要定义一个数据库模型、几个路由和几个视图,仅此而已 - 您可以使用内置管理界面添加和编辑博客条目并使用可插拔的认证模块。

但当然是有代价的——为了确保所有这些部分协同工作,Django 在某种程度上要求你使用 Django 提供的技术——即,你必须使用 Django ORM 定义你的模型并使用 Django 模板编写模板。您可以将不同的位交换为其他东西,但可以理解的是,它们不能很好地与框架的其余部分一起使用——即,您可以使用另一个 ORM,例如 SQLAlchemy,来访问数据库,但这样的模型不适用于 Django 的管理界面。

在某种程度上,Django 还期望数据库表的特定结构(即,它期望能够基于 Python 代码中定义的模型创建这些表),这将使现有数据库的工作变得更加困难。另外,我的理解是它希望您拥有一个 SQL 数据库。

因此,在我看来,Django 是构建“典型”Django 网站(它是为新闻网站构建的)的一个非常好的选择,它可以利用现有的可插入应用程序和其他 Django 功能。

另一方面, Pyramid不需要您使用任何特定的技术来访问数据库 - 事实上,它根本不需要您拥有数据库 - 您可以构建一个应用程序来处理存储在文件系统上的数据,在对象数据库,例如 ZODB 或一些分布式 NoSQL 存储。甚至可能是一些 XML 文件和一堆图像......你的想象力就是你的极限

使用 SQL 数据库时,它并不期望数据库具有一定的结构。还有,SQLAlchemy,推荐的 Pyramid 的 ORM,被认为比 Django ORM 更加灵活和强大

它不需要您使用任何特定的模板库或表单库,因此您可以选择最适合您需求的任何内容。

Pyramid 甚至不需要您使用路由映射,这是大多数 Web 框架的基石功能 - 除了路由映射 Pyramid 还支持 URL 遍历,这可能是处理分层数据结构的一种非常强大的方式。

虽然不要求您使用任何特定技术,但 Pyramid 确实为典型用例提供了一些合理的模板。

这种灵活性的代价是可能更难找到现有的“应用程序”,这些“应用程序”可以插入到您非常自定义的 Pyramid 网站中而无需任何更改 - 尽管 Pyramid 中出色的 WSGI 支持利用了这一点。

Pylons在前段时间与 repoze.bfg 合并后,现在称为 Pyramid。

uWSGI更多的是为 Pyramid 应用程序(或其他符合 WSGI 的应用程序)提供服务的应用程序/协议

烧瓶- 从未使用过它,也许其他人会给你一些概述。

所以,简而言之,Django 和 Pyramid 之间的选择归结为“我可以在我的网站上使用多少 Django 的内置功能”这个问题——因为如果你不打算使用 Django 的自动管理或大量使用第三方可插拔应用程序 - Pyramid 中的其他一切都更好:)

于 2012-05-02T07:49:07.877 回答
1

如果应用程序需要与已经存在的数据库通信,那么 django 不会给你带来太多价值 IMO。因为除非 db 架构符合 django 的预期(自动递增 int 主键等),否则管理界面不适用于该部分,因此任何其他假定预期架构的 web 框架也是如此。

那么,sqlalchemy 是你最好的选择。它有一个 orm 层,但您不必使用它,仅使用查询接口就可以物有所值。

因此,就 webframeworks 而言,这将其范围缩小到任何可以使用 sqlalchemy 的东西。由于上述原因,除了 Django、Zope 和可能的 web2py 之外,其他的都不是。尽管对于 Zope 来说,它的价值在某种程度上源于它得到 zodb 的支持。但是 zodb 根本不会帮助您处理现有的数据库和数据。

因此,在剩下的 Web 框架中,我将使用的选择标准是其将请求路由到视图的能力。以及它与您的 url 生成策略的匹配程度。IMO,金字塔在这方面非常灵活。但你可能不需要那个。您可以使用烧瓶或瓶子来解决问题。甚至是直网布。

另一个不太重要的标准是模板引擎/语言,大多数框架将支持更流行的,例如 jinja2 等...

我个人的选择是金字塔,因为它在请求路由部门从超级简单到超级多毛都可以很好地扩展。但同样,根据您希望您的网址如何工作,您可能不需要它。

于 2012-05-02T13:05:23.860 回答
1

有人告诉我 pylons 非常好(较新的金字塔),但我个人使用 Django,对此我很满意。甚至不要尝试使用 CGI,因为这与我犯的错误相同 - 后来我发现更改所有 html 是一件很痛苦的事情。

于 2012-05-02T05:35:55.240 回答
0

Django 有一个命令 (./manage.py inspectdb) 可以帮助您制作当前数据库的初始模型。如果您决定重新设计数据库,这仍然可以更轻松地将数据移动到新模式中。就个人而言,我喜欢 Django,但其他的可能非常适合您的应用程序。

要与服务器进行通信,您可能会使用 AJAX。

于 2012-05-02T06:10:13.490 回答
0

I've found Django too heavyweight for my needs.
I've had good success with CherryPy, a minimalist Web Framework

于 2012-05-02T06:30:43.273 回答