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