从Django 0.96升级到1.0的最佳方法是什么?

时间:2008-09-24 17:19:39

标签: python django

我应该尝试实际升级我现有的应用程序,还是只是从头开始重写它,保存哪些部分(模板等)?

5 个答案:

答案 0 :(得分:6)

虽然这取决于你正在做什么,但大多数应用程序应该只能升级然后修复所有破坏的东西。根据我的经验,升级后我必须解决的主要问题是

  1. 使用模型更改某些时髦的东西,例如以下外键的语法。

  2. 一小组模板更改,最明显的是自动转义。

  3. 任何取决于Django内部结构的具体结构。这不应该是一个问题,除非你正在做一些事情,比如动态修改Django内部,以一种对项目必要/方便的方式改变他们的行为。

  4. 总而言之,除非你做了很多非常奇怪和/或复杂的事情,否则简单升级应该相对轻松,只需要做一些改动。

答案 1 :(得分:3)

升级。对我来说非常简单:将__str__()更改为__unicode__(),编写基本admin.py,然后完成。只需开始在1.0上运行您的应用,测试它,当您遇到错误时,请使用backwards-incompatible changes上的文档来了解如何解决问题。

答案 2 :(得分:2)

只需升级您的应用。从0.96到1.0的转换是巨大的,但就向后不兼容的变化而言,我怀疑你的应用程序甚至有10%。

我在Django 1.0之前就在主干上,所以我对我的过渡是随着时间的推移,但即便如此,我必须改变的唯一主要事情是newforms,newforms-admin, str ()到 unicode ()和maxlength到max_length

其他大多数更改都是新功能或后端重写,或者正在构建基本网站的人甚至没有接近。

答案 3 :(得分:1)

只有最简单的网站才能轻松升级。

如果您的网站恰好是非ASCII 世界的一部分,那么期待真正的痛苦(阅读:美国和英国以外的任何地方)。 Django中最痛苦的变化是在内部从字节串切换到unicode对象 - 现在你必须找到你使用字节串的所有地方并将其改为unicode。最糟糕的情况是模板渲染,你永远不会知道你忘记改变一个变量,直到你得到UnicodeError。

其他值得注意的事情:操纵者( oldforms )已经消失,除了用表格( newforms )重写所有部分之外别无他法。

如果这是你的情况并且你的项目大于2-3个应用程序,我会非常不愿意升级,直到真的有必要。

答案 4 :(得分:1)

我们在一个多步骤的过程中升级,我对此非常满意。问题中的应用程序大约是100.000 LoC并运行几个核心业务功能,与遗留系统接口很多。我们这样工作:

  1. 更新到django 0.97-post unicode 合并。修复所有unicode问题
  2. 将应用程序重构为 可重复使用的应用程序,添加测试。这让我们失望了 主要申请/项目
  3. 中的40.000 LoC
  4. 升级到django 0.97-post autoexcape merge。修复在3中创建的可重用应用程序中的自动转义。然后在mian应用程序中修复剩余的自动转义问题。
  5. 升级到1.0。剩下的就是修复管理员的东西。
  6. 整个过程花费了大约6个月的时间,我们在服务器上运行遗留生产分支,同时将另一个分支移植到1.0。在这样做的同时,我们还在为生产分支添加功能。

    最终的合并比预期的要简单得多,并且需要大约一个星期才能完成4个编码器的合并,审查,测试和修复。然后我们推出了大约一个星期的时间,被先前出乎意料的错误所困扰。

    总而言之,我对结果非常满意。我们现在有更好的代码库用于进一步开发。