като личен проект се опитвам да напиша wiki с помощта на django. Аз съм начинаещ, когато става въпрос за уеб разработка. На (ранна) точка съм, когато трябва да реша как да съхранявам wiki сайтовете. Имам предвид три подхода и бих искал да знам вашето предложение.
Плоски файлове
Обмислих подход с плосък файл със система за контрол на версиите като git или mercurial. Първо, бих искал да разгледам няколко примерни уикита като http://hatta.sheep.art.pl/. Второ, vcs вероятно ще се справи с конфликтите при редактиране и запазването на хронологията на редактирането, така че няма да се налага да преоткривам колелото. И трето, вероятно бих могъл лесно да клонирам wiki хранилището, така че аз (или други) да мога да имам офлайн копие на wiki.
От друга страна, доколкото знам, не мога да използвам django модели с плоски файлове. След това, ако искам да добавя полета към уики сайт, като категория, ще трябва по някакъв начин да запазя препратка към този плосък файл, за да свържа полетата в базата данни с плоския файл. Освен това, не знам дали е добра идея всички уики сайтове да са в едно хранилище. Предполагам, че е по-естествено да има нещо като хранилище за уики сайт, респ. файл. Не на последно място, не съм сигурен, но мисля, че използването на плоски файлове би ограничило възможностите ми за внедряване, защото уеб хостовете може би не позволяват създаване на файлове (мисля например за Google App Engine)
Съхраняване в база данни
Като съхранявам уики сайтовете в базата данни, мога да използвам django модели и да свързвам произволни полета с уики сайта. Вероятно също така ще имам по-лесен живот с внедряването на wiki. Но не бих получил vcs функции като история и разрешаване на конфликти сами по себе си. Потърсих django-extensions, които да ми помогнат, и намерих django-reversion. Въпреки това не разбирам напълно дали отговаря на нуждите ми. Проследява ли промените в модела, като например ако променя файла на модела django, или проследява съдържанието на моделите (което би отговаряло на нуждите ми). Плюс това, не виждам дали връщането на django би ми помогнало с конфликти при редактиране.
Съхраняване на vcs хранилище в поле на база данни
Това би било моето идеално решение. Той би комбинирал предимствата на двата предишни подхода без недостатъците. Това е; Бих имал vcs функции, но бих запазил уики сайтовете в база данни. Проблемът е: нямам представа колко е възможно това. Просто си представям запазване на wiki сайт/източник заедно с git/mercurial хранилище в поле на база данни. И все пак някак си се съмнявам, че полетата на базата данни работят по този начин.
Така че съм отворен за всякакви други подходи, но това е, което измислих. Освен това, ако се интересувате, можете да намерите скапания ранен тест, върху който работя тук http://github.com/eugenkiss/instantwiki-test