作为个人项目我试图在django的帮助下编写一个wiki。在Web开发方面,我是初学者。我处于(早期)我需要决定如何存储维基站点的地方。我有三种方法,想知道你的建议。
我考虑使用像git或mercurial这样的版本控制系统的平面文件方法。首先,我会看一些示例wiki,如http://hatta.sheep.art.pl/。其次,vcs可能会处理编辑冲突并保留编辑历史记录,因此我不必重新发明轮子。第三,我可能很容易克隆wiki存储库,所以我(或其他人)可以拥有wiki的离线副本。
另一方面,据我所知,我不能将django模型与平面文件一起使用。然后,如果我想将字段添加到wiki站点(如类别),我需要以某种方式保留对该平面文件的引用,以便将数据库中的字段与平面文件相关联。此外,我不知道将所有wiki站点放在一个存储库中是否是一个好主意。我想像每个维基站点都有类似的存储库更自然。文件。最后但并非最不重要的是,我不确定,但我认为使用平面文件会限制我的部署功能,因为Web主机可能不允许创建文件(我想是,例如,Google App Engine)
通过将wiki站点存储在数据库中,我可以使用django模型并将任意字段与wiki站点相关联。我可能也会更轻松地部署wiki。但我不会得到像历史和冲突解决本身的vcs功能。我搜索了django-extensions来帮助我,我找到了django-reversion。但是,我不完全明白它是否符合我的需要。它是否跟踪模型更改,例如,如果我更改django模型文件,或者它是否跟踪模型的内容(这符合我的需要)。另外,我不知道django reversion是否会帮助我编辑冲突。
这将是我理想的解决方案。它将结合两种先前方法的优点而没有缺点。那是;我会有vcs功能,但我会将维基站点保存在数据库中。问题是:我不知道这有多可行。我想象一下将wiki站点/源与git / mercurial存储库一起保存在数据库字段中。然而,我在某种程度上怀疑数据库字段的工作原理。
所以,我对任何其他方法持开放态度,但这就是我提出的方法。另外,如果你有兴趣,你可以找到我在这里工作的糟糕的早期测试http://github.com/eugenkiss/instantwiki-test
答案 0 :(得分:2)
在您的选择中,您没有考虑过是否希望能够搜索您的wiki。如果这是一个考虑因素,那么在具有全文搜索的数据库中使用每个页面的“实时”副本将是非常有益的。出于这个原因,我个人每次都会将页面存储在数据库中 - 否则你必须在某处创建自己的索引。
就版本记录而言,您只需要以可索引格式存储实时副本。当更改的页面写回数据库时,您可以在“页面”模型中自动创建历史记录项。如果需要,您可以通过压缩数据来减少早期页面修订的存储开销。
如果您期望进行大量的更改日志记录,可能需要在此处阅读此答案:
答案 1 :(得分:0)
创建一个wiki既有趣又有益,但已经有很多预建的wiki软件包。我建议维基百科List of wiki software。特别是MoinMoin和Trac都很好。最后,John Sutherland使用Django创建了wiki。