Python/GAE 社交网络/CMS?

4 投票
1 回答
1935 浏览
提问于 2025-04-16 03:55

经过一番研究,我整理出了一些我认为可以用来搭建一个基于Python的社交网络/内容管理系统的最佳方法,但对这些组件如何组合在一起还有些疑问。

在我询问具体组件之前,这里是我想要构建的网站的一些关键功能:

  • 一个现代化、几乎像桌面应用程序一样的界面
  • 未来能够托管一个高级的HTML5子应用(例如:http://www.lucidchart.com
  • 在功能和用户负载上都具备高扩展性
  • 用户能够为每个项目或组设置密码保护和权限管理
  • 典型的社交网络功能
  • 未来能够构建一个简化的移动版本

这是我考虑使用的工具列表:

Google App Engine
Python
Django
Pinax
Pyjamas
wxPython

以下是我的一些问题:

  1. Google App Engine——这个选择是为了简化问题,因为许多组件似乎都已经到位。
    问题:选择这个会不会限制我的选项?比如:数据存储不是关系型的?我应该等到商业版支持SQL再开始吗?

  2. Python——我一开始考虑过“drupal”,但最终决定不依赖那些可能明天就不存在的模块,加上它的模板系统有很多限制,这让我觉得不太合适。学习它的API在其他地方也没什么用,而Python看起来就像一把瑞士军刀,几乎可以用来做任何事情。
    问题:GAE要求使用v.2.5.2,但python.org推荐2.5.5。我应该安装哪个版本?

  3. Django——v.0.96已经内置在GAE中。看起来你可以升级它。
    问题:有没有理由不升级到最新版本?有没有办法解决缺乏HTML5支持的问题?

  4. Pinax(http://pinaxproject.com)是建立在Django之上的,似乎提供了大多数社交网络所需的功能。
    问题:不使用它的理由是什么?有没有替代方案?

  5. Pyjamas和wxPython——这一部分有点让人困惑。这两个的基本想法是能够构建一个图形用户界面。我之前考虑过Silverlight和Flash,但在选择GAE/Python之前,看到一些HTML5应用的工作版本让我相信,最新的浏览器已经能很好地支持HTML5,所以我选择了HTML5/JavaScript的路线。
    问题:我该如何扩展/补充Python/Django来构建一个应用风格的HTML5界面?Pyjamas和wxPython是正确的选择吗?还是我应该完全改变我的想法?

如果能回答这些问题中的任何一个,我将非常感激。如果有些内容不太明白,请原谅我的无知。我的最后一次网页编程经历是在5-6年前做了一个相当规模的LAMP网站。在桌面编程方面,我的经验主要是一些高级脚本语言,我一直在学习以完成非常具体的任务 :)

1 个回答

3

作为一个已经把Django网站部署到GAE(Google App Engine)的人,我可以告诉你,可能达不到理想的解决方案。因为在GAE上使用Django时,ORM(对象关系映射)并不能正常工作,这让Django的一些最佳特性无法发挥。一个比较好的折中方案是使用Django-nonrel来恢复这些功能。

不过,这样做也会带来一些问题:由于Django应用程序使用了大量的文件和内存,当应用程序闲置时,你的代码会很快从内存中卸载。这意味着,访问者在第一次查看页面时,可能会遇到大约6秒的延迟,因为GAE需要解压缩已压缩的模块。一旦你的网站开始忙碌,这就不是问题了,但在你的网站还不太知名的时候,这会让人觉得性能有问题。 :-(

其次,我曾在一家开发定制CMS(内容管理系统)的公司工作,可以告诉你,前80%的工作相对简单,尤其是使用现代框架时。然而,剩下的部分可能会比较棘手。例如,用户角色和自定义内容类型就是两个比较难的方面。因此,强烈建议你借助已有的优秀框架,找到一个几乎完美满足你需求的CMS或CMS框架,然后再进行一些扩展。

那么,针对你的问题,我来回答一下:

  1. 是的,你的选择会受到限制,但这可能没关系。大多数开发者对关系型数据库模型更熟悉,而不是nosql模型。因此,更多的开源软件都是基于关系型模型构建的。此外,GAE是一个封闭源代码的平台,这也让开源开发者望而却步。App Engine Oil是一个可能适合你的CMS框架,并且针对App Engine进行了优化。你还可以看看web2py,它也支持GAE。

  2. 我发现自己在使用Python时非常高效。我以前写很多PHP,现在觉得它很丑。话说回来,想想你需要写的代码总行数。如果你能让Drupal与高质量的现成模块配合使用,你可能只需要写十分之一的代码。顺便提一下,使用Drupal的窍门是尽量只使用高质量的模块。查看模块的历史,确保不要使用开发版本。尝试联系作者,看看他们的意见。我不是说你一定要用Drupal,但用它建立一个可靠的网站是可能的(例如,白宫官网)。

  3. 你正面临经典的GAE/Django问题。如果你使用0.96版本,性能很好,但会错过很多1.0+版本的优秀特性,并且无法使用ORM及其所有好处。如果你使用更新版本的Django,就会遇到上面提到的性能和内存问题。

  4. 我正打算为我的公司研究pinax。我对它只做了很简单的了解。我不知道它是否对非关系型数据库后端有良好的支持。你可能需要看看django-nonrel。不过要知道,你将要投资于相对未经验证的解决方案。使用Pinax的Django用户比例很小,使用它在非关系型后端的比例更小。因此,你将处于你在第二点中提到的高度实验性场景。

  5. 我没有个人经验。我研究过pyjamas几次。不过我喜欢写HTML、CSS和JS。我喜欢掌控一切。我喜欢渐进增强,并且知道如果用户没有完整的功能,他们会看到什么。此外,我认为任何不明确考虑移动客户端的新应用程序都是在自找麻烦。多达15%的互联网用户仅通过智能手机上网。他们使用pyjamas时会得到什么样的体验呢?

  6. 你没有提到这一点,但我在选择平台时考虑的一个因素是供应商锁定和可移植性。如果你为GAE开发了解决方案,发现无法实现你的需求,你能否将其迁移到其他地方?需要多少工作量?如果你在GAE上进行了大量编码或对其架构做出了承诺,你就会被束缚在这里,或者需要重写代码才能迁移。使用Django或Web2py可以帮助缓解这个问题。

总的来说,Python GAE的一个大好处是你能非常高效地工作,立刻看到结果,在你的网站还小的时候可以免费托管,并且具有出色的可扩展性。这些都不是小事,价值很大。

撰写回答