我应该尝试实际升级我现有的应用程序,还是只是从头开始重写它,我可以保存哪些部分(模板等)?
5 回答
尽管这取决于您在做什么,但大多数应用程序应该能够升级然后修复所有损坏的东西。根据我的经验,升级后我必须修复的主要问题是
使用模型更改了一些时髦的东西,例如跟随外键的语法。
一小部分模板更改,最显着的是自动转义。
任何取决于 Django 内部结构的具体结构。这不应该是一个问题,除非你正在做一些事情,比如动态修改 Django 内部,以对你的项目来说必要/方便的方式改变它们的行为。
总而言之,除非您正在做很多非常奇怪和/或复杂的事情,否则简单的升级应该相对轻松,并且只需要进行一些更改。
升级。对我来说这很简单:更改__str__()
为__unicode__()
,编写 basic admin.py
,然后完成。只需开始在 1.0 上运行您的应用程序,对其进行测试,当您遇到错误时,请使用有关向后不兼容更改的文档来查看如何解决该问题。
只需升级您的应用程序。从 0.96 到 1.0 的转变是巨大的,但就向后不兼容的变化而言,我怀疑你的应用程序甚至有 10%。
我在 Django 1.0 之前就在主干上,所以我的过渡是随着时间的推移,但即便如此,我必须改变的唯一主要事情是 newforms、newforms-admin、str () 到unicode () 和 maxlength 到 max_length
大多数其他更改是新功能或后端重写或构建基本网站的人甚至无法接近的东西。
只有最简单的站点才易于升级。
如果您的网站碰巧位于世界上的非 ASCII部分(阅读:美国和英国以外的任何地方),那么您会感到非常痛苦。Django 中最痛苦的变化是在内部从字节串转换为 unicode 对象——现在您必须找到所有使用字节串的地方并将其更改为 unicode。最坏的情况是模板渲染,你永远不会知道你忘记改变一个变量,直到你得到 UnicodeError。
其他值得注意的事情:操纵器(oldforms )已经消失,除了用表单( newforms )重写所有部分之外别无他法。
如果这是您的情况,并且您的项目大于 2-3 个应用程序,那么在真正必要之前,我将不愿意升级。
我们在一个多步骤过程中进行了升级,对此我感到非常满意。Question 中的应用程序大约有 100.000 LoC,并运行多个核心业务功能,并与遗留系统有很多接口。我们是这样工作的:
- 更新到 django 0.97-post unicode 合并。修复所有 unicode 问题
- 将应用程序重构为可重用的应用程序,添加测试。这在主应用程序/项目中留下了 40.000 LoC
- 升级到 django 0.97-post autoexcape 合并。修复3中创建的可重用应用中的自动转义。然后修复mian应用程序中剩余的自动转义问题。
- 升级到 1.0。剩下的主要是修复管理的东西。
整个过程花了大约 6 个月的时间,我们在服务器上运行旧版生产分支,同时将另一个分支移植到 1.0。在这样做的同时,我们还向生产分支添加功能。
最终的合并比预期的要少得多,4 名编码人员合并、审查、测试和修复花了大约一周的时间。然后我们推出了,大约一周的时间被以前意想不到的错误所困扰。
总而言之,我对结果很满意。我们现在有一个更好的代码库以供进一步开发。