【发布时间】:2008-10-16 20:29:50
【问题描述】:
将现有 Drupal 站点移植到 Django 应用程序的最佳方式是什么? 我有大约 500 页(主要是书籍模块)和大约 50 篇博客文章。我没有使用任何 3rd 方模块。 我想保留当前的 URL(出于 SEO 目的)并将数据库迁移到 Django。我将创建一个简单的博客应用程序,所以迁移博客帖子应该没问题。使用 Django 提供 500 多个页面的最佳方式是什么?我想使用管理员来编辑/添加新页面。
【问题讨论】:
将现有 Drupal 站点移植到 Django 应用程序的最佳方式是什么? 我有大约 500 页(主要是书籍模块)和大约 50 篇博客文章。我没有使用任何 3rd 方模块。 我想保留当前的 URL(出于 SEO 目的)并将数据库迁移到 Django。我将创建一个简单的博客应用程序,所以迁移博客帖子应该没问题。使用 Django 提供 500 多个页面的最佳方式是什么?我想使用管理员来编辑/添加新页面。
【问题讨论】:
所有的 Django 开发都是相似的,你的将适合这种模式。
为您的书籍和博客文章定义 Django 模型。
使用 Django 的内置测试功能对该模型进行单元测试。
编写一些小实用程序来将旧数据加载到 Django 中。此时,您将意识到您的 Django 模型并不完美。好的。修理它。修复测试。重做负载。
为您的模型配置默认管理界面。此时,您将花时间调整管理界面。你会意识到你的数据模型是错误的。这是一件好事。修复你的模型。修复你的测试。修理你的负载。
现在您的数据是正确的,您可以从旧页面创建模板。
创建 URL 映射和视图函数以从数据模型中填充模板。
花时间来正确地建立数据模型。这真的很重要,因为如果您的数据模型是可靠的,那么其他一切都非常简单。
【讨论】:
也许可以编写与遗留数据库一起使用的 Django 模型(我过去曾这样做过;请参阅manage.py inspectdb 上的文档)。
但是,我会按照上面的建议,使用 Django 约定设计一个干净的数据库,然后迁移数据。我通常编写迁移脚本,通过 Django 写入新数据库并使用原始 Python DB API 读取旧数据库(虽然也可以将 Django 绑定到 multiple databases simultaneously)。
我还建议查看适用于 Django 的可用博客应用程序。如果Pinax 中包含的内容适合您的需要,请继续使用 Pinax 作为起点。
【讨论】:
S.Lott answer 多年后仍然有效,我尝试使用工具和格式完成分析。
目前已经有很多 Drupal 导出工具,但出于同样的要求,我选择了 Views Datasource,选择 JSON 作为格式。这个模块非常可靠,可用于 Drupal 的最新版本。 JSON 格式在解析和编码方面都非常快,而且易于阅读且对 Python 非常友好 (import json)。
使用视图数据源,您可以创建按节点 id (nid) 排序的节点视图,每页显示有限数量的元素,配置视图路径,向其添加过滤器标识符并将 nid 传递给它以读取所有元素直到你得到一个空的 JSON 响应。
在 Django 中导入时,您还可以使用多种工具,从 loaddata to load fixtures 开始。查看数据源导出的 JSON,但它的格式不符合 Django 预期的固定装置:您可以编写 custom admin command 来执行导入,您可以在其中完全控制导入流程。
您可以通过传递一个 nid=0 作为参数来启动您的命令,然后让该过程读取、导入然后从下一页获取数据,只需传递上一个 HTTP 请求中读取的最后一个 nid。您甚至可以限制对视图路径的访问,但您需要在导入端进行额外配置。
关于性能,仅举个例子,我在 8 核 / 8 GB Linux 虚拟机上通过 Django 1.8 自定义管理命令和 PostgreSQL 作为 DBMS 在不到 10 分钟的时间内解析和导入了 15.000 多个节点,记录成功和错误信息到每个节点的自定义模型中。
这些是这两个平台之间导入/导出的基础知识,有关详细信息,我描述了所有major steps for export from Drupal and then import to Django in this guide。
【讨论】: