欢迎您在谷歌群组上提出相同的问题。那里有超过500个用户,其中一些是为其客户构建项目的开发公司。
我印象中大多数人使用PostgreSQL(我也是这样做的),还有一些人使用Google App Engine。实际上,web2py是唯一允许您编写一次代码并且相同的代码将运行在GAE、SQLite、MySQL、PostgreSQL、Oracle、MSSQL和FireBird上(受GAE强制限制)的框架。
您可以在此处找到用于GAE的Reddish(reddit clone)应用程序和源代码here
在这里,您可以找到一些生产应用程序的链接,其中一些正在运行在GAE上。
@Armin:
Django或Pylons没有问题。它们都是很好的框架。在开发web2py之前,我曾经使用过它们。以下是web2py可以做到而它们无法做到的几件事情。例如:
web2py 在许多方面都做得更好(使用更一致的 API)且更快(例如处理模板和生成 SQL)。web2py 也非常紧凑(所有模块都适合于 265K 字节),因此比那些竞争项目更容易维护。
您只需要学习 Python 和 81 个新函数/类(其中 50 个具有与相应 HTML 标记,BR
,DIV
,SPAN
等相同的名称和属性,19 个验证器,IS_IN_SET
,IS_INT_IN_RANGE
等)。
无论如何,最重要的问题是 web2py 比 Django,Pylons,PHP 和 Rails 更容易。
您还将注意到,web2py 托管在 Google Code 和 Launchpad 上,没有未解决的问题。所有过去的问题都在不到 24 小时内得到解决。
您还可以在 Google 邮件列表上检查,所有线程(今天有 10056 条消息)最终都会得到我或其他开发人员的答复,在 24 小时内。
您可以在 Amazon 上找到一本关于 web2py 的书。
Armin,我知道您是 Jinja 的开发人员。我喜欢 Jinja,但有不同的设计哲学。 Django 和 Jinja 都定义了自己的模板语言(而且 Jinja 特别好的文档),但我更喜欢在模板中使用纯 Python,这样我的用户根本不需要学习模板语言。我非常清楚每种方法的利弊。让用户决定他们喜欢什么。没有必要互相批评。
@Andre:db.table.field 是指字段对象。'table.field' 是字段名称。您始终可以在需要字段名称时传递字段对象,因为 str(db.table.field)是'table.field'。唯一需要使用字符串而不是对象的情况是当您需要按名称引用尚未定义的字段时...也许我们应该把这个讨论移到正确的地方。;-)
我希望您能尝试一下web2py,无论您是否喜欢,我都很想听听您的意见。
我正在使用web2py来开发一个小型网站应用程序。它正在运行 Mechanical Turk 项目上的 HITs,并给我提供了一个控制和可视化它们的界面。我最初使用了 Google App Engine,但后来厌倦了不能直接访问数据库和每次上传代码都需要等待很久的小烦恼,于是转移到了使用本地服务器带有 postgres 的环境。GAE 为了使一些扩展变得更容易,而使大多数事情变得更加困难......除非你真的需要它们的扩展帮助,否则最好远离。
我非常喜欢 web2py。与 Django 和 Ruby on Rails 相比,它要简单得多,学习起来更容易。一切都很简单,可以快速完成工作。Massimo 无处不在解决你的问题(即使在这个板块上哈哈)。
我大约6个月前开始使用web2py。我选择它,是因为我想从PHP转到Python,采用更面向对象的方法,因为Python的语言特性。
web2py的一站式开发非常棒,让入门变得非常快速。
作为以前symfony用户,我很快就开始怀念那些不依赖于表结构的组件和表单。
仅仅是一个简单的注册表单,我没找到一种DRY的方法。对我来说真正棘手的是表单验证。我忘记了详情,但最终我只能在表单本身进行表单验证,因为其他方法都行不通。
另外,这种大量重复字符的大写命名概念也不是我的菜。
dba.users.name.requires=IS_NOT_EMPTY()
dba.users.email.requires=[IS_EMAIL(), IS_NOT_IN_DB(dba,'users.email')]
dba.dogs.owner_id.requires=IS_IN_DB(dba,'users.id','users.name')
dba.dogs.name.requires=IS_NOT_EMPTY()
dba.dogs.type.requires=IS_IN_SET(['small','medium','large'])
dba.purchases.buyer_id.requires=IS_IN_DB(dba,'users.id','users.name')
dba.purchases.product_id.requires=IS_IN_DB(dba,'products.id','products.name')
dba.purchases.quantity.requires=IS_INT_IN_RANGE(0,10)
有时候名字需要加引号,有时不需要……如果我看一下已经用web2py做的例子或网站,我真的没有看到从使用php到现在的很大进步。
我建议你:看看web2py是否适合你。这会很好,因为社区和特别是massimo(创始人)非常乐于助人和友善。
此外,与Django相比,您可以更快速地开始使用,部署更容易,并且如果您更改数据库模型,则减少了麻烦。
正如Massimo在上面提到的,tenthrow团队使用web2py开发tenthrow.com
我们大部分的开发工作是在2009年完成的。我们使用了cherokee,web2py,postgresql和amazon s3来搭建我们的技术栈。在此之前,我们已经使用多种框架和后端进行了许多Python Web实现。毫不夸张地说,如果没有web2py,我们简直无法如此快速轻松地完成tenthrow。这是Web开发领域中最好的秘密。
我一直在评估Web框架。我用Perl和PHP编写了自己的(不是开源)框架。然而,PHP内置有缺陷,整个基础设施仍然相当差,但我不想回到Perl,所以我查看了Python和Python Web框架,如Django、Turbogears、Pylon和web2py。如果您想选择一个不是自己的代码堆栈,有很多事情要考虑,并且您经常会因为仍然没有“正确的方法”来编程而烦恼。然而,web2py是我目前最喜欢的,因为作者尽管是一个“真正的程序员”,但保持易用性!只需查看web2py网站上的比较 - 我想知道像Django或Turbogears这样的Python框架为什么不得不在他们的代码中引入这种冗余和复杂的语法 - web2py表明,实际上可以保持语法简洁和易懂!
@Armin:您能否具体说明您的批评意见?您在哪里看到web2py “绕过Python语义”?我无法理解您的意思。我必须承认,我现在对Python不是很深入,但我认为web2py代码没有问题 - 实际上,我认为它非常出色,是今天最好的框架之一。
我用web2py进行学术研究。大约一年前,我在pythonanywhere上发布了一本数字德语语法课本。
该资源需要验证,并且看起来像一个小型的LMS,具有角色、活动和成绩。这是我第一次尝试这种方式。由于PHP对我来说太难了,只有web2py能提供一个清晰处理数据库的方法。使用Python,我可以轻松解决我的问题,例如文本分析和下载报告。至于数据库,SQLite完全足够。
我的学生喜欢设计和功能的方式。所以我对结果非常满意,将开发其他有趣的应用程序给我的大学。
我认为web2py非常适合应用语言学家和L2教师,他们不像程序员那样有计算机科学的经验。这是我的谦虚意见。