从django切换到哪个框架值得

从django切换到哪个框架值得,django,frameworks,Django,Frameworks,我使用的最后一个框架是Django。我喜欢这方面的很多东西,比如: 项目结构很简单-没有太多的目录和文件 管理界面 伟大的文献 XML导出导入 表单对象的概念:定义表单后,可以在一行中显示表单,甚至可以从数据库行(从orm定义)生成表单。[于2009年12月30日添加] i18n[于2009年12月31日添加] 但也有一些局限性: 截至2009年12月,无模型验证 模板系统只有在不需要自定义模板标记的情况下才有效 将设计与逻辑分开的想法似乎很好,但令人沮丧的是,我无法对视图中的数字进行求

我使用的最后一个框架是Django。我喜欢这方面的很多东西,比如:

  • 项目结构很简单-没有太多的目录和文件
  • 管理界面
  • 伟大的文献
  • XML导出导入
  • 表单对象的概念:定义表单后,可以在一行中显示表单,甚至可以从数据库行(从orm定义)生成表单。[于2009年12月30日添加]
  • i18n[于2009年12月31日添加]
但也有一些局限性:

  • 截至2009年12月,无模型验证
  • 模板系统只有在不需要自定义模板标记的情况下才有效
    • 将设计与逻辑分开的想法似乎很好,但令人沮丧的是,我无法对视图中的数字进行求和[2009年12月30日编辑]
    • 模板语言对设计器不友好
    • 自定义模板标记中ex的堆栈跟踪是无用的(如果与python 2.6一起使用)。它有一个补丁,但是它将在1.2版本中进入django
  • django的orm(连接到遗留系统)
    • 无法处理blob字段
    • 无法处理多列pk字段
是否还有另一个web框架具有django的优点,并且没有列出的限制?还是有可能在django解决一些问题

ps:我会根据答案更新列表。我相信还有更多方面需要讨论


我可以自由使用任何其他语言的框架,只要我可以在linux服务器上安装这些东西

试试看。尽管有时您需要编写更多的代码行,但您可以更轻松地进行自定义

您提到的限制在Rails中并不存在


我已经使用它很多年了,可以做任何我想做的事。

没有试图为Django辩护(这不是我的工作!:-))只是想给你一些关于限制的建议

截至2009年12月,无模型验证

你这到底是什么意思?验证在表单级别可用。。。您可以随时重写
save()
方法来实现所需的任何逻辑并停止save操作。。。你能举个例子吗

模板系统只有在不需要自定义模板标记的情况下才有效 将设计从逻辑中分离出来的想法似乎很好,但令人沮丧的是,我无法在视图中对2个数字求和

也就是说,你没有嫁给Django的模板系统。例如,您可以使用

模板语言对设计器不友好

嗯。。。为什么?与我共事的大多数设计师在使用比Django更复杂的模板语言方面没有问题。。。你能举一个你认为不友好的例子吗?也许有工作要做

自定义模板标记中ex的堆栈跟踪是无用的(如果与python 2.6一起使用)。它有一个补丁,但是它将在1.2版本中进入django

我没有遇到过您讨论的堆栈跟踪问题。在Django 1.2面世之前,您始终可以安装补丁。看来你有一个解决方案

django的orm(连接到遗留系统) 无法处理blob字段

如果你需要在数据库中存储文件,也许你应该看看“数据库存储”

无法处理多列pk字段

这与多个数据库支持一起,是真正需要改进的领域——我同意

我想您不能对具有多列pk需求的模型使用模型(仅使用纯SQL)(是的,这会杀死管理员,但这是可行的)。坦率地说,我的模型中没有这个问题,因为我更喜欢代理主键——如果一个遗留模型在我的路上,我会向它添加一个代理主键——所有遗留代码都应该继续工作,Django会很高兴的。但是我完全可以控制数据库表,这可能不是您的情况

多列主键

Multidb是

1.2版本是。当然,日期不是用石头写的


考虑到我在其他框架方面的经验,我更愿意解决我的问题并坚持使用Django。

虽然您可以在一定程度上交换您不喜欢的Django部分,但其他框架比Django更容易做到这一点

假设您想继续使用Python,下一个最好的选择是挂架。您有SQLAlchemy+Formencode进行验证;Mako/Jinja/Genshi都提供了Django模板更灵活的替代方案

另一个选择是使用一个“反框架”或用于WSGI处理、数据映射等的库工具包来实现自己的功能。我最喜欢的技巧是Werkzeug+SQLAlchemy+Jinja2,但真正适合您的需要和编程风格


值得注意的是,即使对于一些琐碎的项目,挂架和更多DIY框架也需要比Django更好地理解Python。这并不是一件坏事:但是我建议Python新手首先使用Django,因为它比其他替代品有更好的文档和更少的粗糙边缘。一旦你更加自信了,那么一定要环顾四周,因为正如你所发现的,Django并不总是完成这项工作的最佳工具。

我仍然使用Django的原因,尽管还有大量其他粗糙的地方,是因为该框架最基本、最核心的功能,即请求/响应调度系统。杀手级功能是
urlresolvers.reverse()
函数。这意味着,无论何时需要计算链接,都可以稳健地进行计算,而不必担心框架中其他地方所做的任何更改都不会破坏任何计算链接。尽管其他语言的框架可能有类似的功能,但似乎没有什么功能可以与之相比