Wiki-системы

advertisement
Разработка информационной
системы управления документацией
(Wiki-системы)
программный проект
по курсу
«Базы данных»
Скворцов А.Н. гр. 4081/4
Рытенков А.С. гр. 4081/3
ФТК 2008
Формулировка задачи
Категория 1
Документ 2
Документ 3
Документ 1
2.3.
Документ 1
Документ 2
Ревизия 1
Ревизия 2
Ревизия 3
Ревизия 1
Ревизия 2
Ревизия 3
Ревизия 4
Ревизия 5
Категория 2
Документ 3
Ревизия 1
Ревизия 2
3.2.
2.2.
2.4.
1.2.
Тег 1
Тег 2
1.3.
2.5.
НЕУДОБНО
НЕРАЦИОНАЛЬНО
УДОБНО
Структурирование документов с помощью Wiki-системы
Формулировка задачи
• Хранение набора документов
• Предоставление документов
пользователям
• Структурирование информации
• Логическое связывание документов
• Редактирование, сохранение истории,
статистика
• Управление доступом к информации
• Доступ к документам через Web
интерфейс
Эти функции характерны для любой wiki-системы. Ярким примером
может служить всем известная Wikipedia.
Выбор инструментов
• Язык Java и фреймворк JSF для web-разработки
– IDE и фреймворк распространяются свободно
– JSF – широкораспространен
– - скорость разработки приложений на Java гораздо меньше, чем
на python
– - фреймворк JSF после первого взгляда показался сложным и
иногда интуитивно не понятным (наверное оч. субъективно)
– - документация к JSF могла бы быть и получше
• Язык python и фреймворк django
– Новая перспективная технология
– Интерпретатор python и фреймворк распространяются свободно
– решение на языке python скорее всего будет проигрывать по
производительности аналогичному решению на java
– фреймворк находится на стадии разработки, версия 1.0 еще не
выпущена, хотя есть стабильная версия 0.96
– наличие хорошей online-документации
– Высокая скорость разработки приложений на python/django
Python — мультипарадигменный язык программирования высокого уровня со
строгой, динамической типизацией и автоматическим управлением памятью.
Особенности Django
Template
view_page.html
create_page.html
edit_page.html
View
view_page
create_page
edit_page
Model
WikiPageTitle
WikiPageContent
DB
wiki_wikipagetitle
wiki_wikipagecontent
Структура web-приложения реализуемого с помощью фреймворка Django
Особенности Django
• Слой ORM
– Абстракция от конкретной СУБД
– Автоматическая трансляция объектов в набор
таблиц
– Частичная абстракция от схемы БД
• Подключаемая архитектура приложений.
Высокий коэффициент повторного
использования кода.
•
•
•
•
Полноценный API доступа к БД с поддержкой транзакций.
Расширяемая система шаблонов и тегов
Диспетчер URL на регулярных выражениях
Встроенный административный интерфейс
Django - это свободный программный каркас для создания веб-приложений, названый
в честь джазового гитариста Джанго Рейнхардта.
Реализация основных функций
• Хранение
• Отображение
документов
• Версионность
• Список версий
• Оптимистичная
блокировка при
редактировании
• Отчет об истории
изменений
страницы
Основные функции простой wiki-системы можно реализовать всего на
двух таблицах. Если постараться, то можно объединить их и в одну
Система структурирования документов
• Тегирование документов
• Получение списка страниц
помеченных тегом
• Иерархическая система категорий
(на основе тегов)
• Облако тегов
Тег - ключевое слово для категоризации чего-либо. Иными словами, это
метка, которой помечается один или несколько документов
Приложения к страницам
• Привязка файлов к wikiстраницам
• Хранение файлов в базе
• Кодировка base64
• Форма загрузки файлов
Приложения к документам могут быть разделены на два класса: бинарные
файлы и картинки. Картинки используются для оформления страниц,
бинарные файлы доступны только для скачивания.
Подсистема управления доступом
• Разделение прав доступа к объектам системы
• Индивидуальное и групповое предоставление
прав
• Иерархическая система управления правами
(возможность организации вложенных групп)
• Использование стандартных методов управления
django.contrib.auth
• Реализация интерфейса управления
иерархической системой прав
• Реализация системы свободной регистрации
Основными правами являются право просмотра, создания и
редактирования объекта, например документа.
Количество прав в системе не может быть изменено динамически
Подсистема управления доступом
Упрощенная схема сущностей и связей обеспечивающих работу системы прав
Решенные задачи
•
•
•
•
•
•
•
•
•
•
•
•
Просмотр/Редактирование страниц
Просмотр списка страниц
Вики-разметка (mediawiki и markdown)
Загрузка файлов и картинок
Оптимистичная блокировка страниц на редактирование
Меню
Теги для страниц
Просмотр облака тегов
Категории для страниц на основе тегов
Комментарии
Просмотр изменений (diff)/редактирование конфликтов
Список ревизий и возможность просмотра конкретной
ревизии
Функция просмотра изменений реализована на основе стандартной
библиотеки difflib
Решенные задачи
•
•
•
•
•
•
•
•
Привязка файлов к wiki-страницам, хранение файлов в
базе
Доступ к основной функциональности через механизм
xml-rpc
Преобразовать страницу просмотра ревизий в подробный
html-отчет об истории изменений страницы, написать xmlrpc метод для получения xml версии этого отчета
Авторизация, разграничение прав
регистрация пользователей
вход/выход
администрирование (назначение прав и групп)
Модификация системы авторизации, реализация
иерархических групп
При использовании xml-rpc, работа с базой MySQL идет напрямую, не
используя механизм ORM слоя фреймворка
Заключение
• Разработано ядро полноценной wiki-системы
допускающее добавление функций
• В качестве основных инструментов использовался
язык Python и фреймворк Django.
• Реализована подсистема тегирования и
категорирования для структурирования информации
• Реализована подсистема управления правами
доступа
• Реализован механизм доступа к данным через xmlrpc
• Реализован прототип простой подсистемы аудита
• Наличие возможности простого перехода на другую
СУБД из числа поддерживаемых Django
За простотой изложенного стоит большая практическая работа, многие
особенности который были опущены с тем чтобы не утомлять слушателей
Просмотр страницы
Список ревизий
Загрузка файла
Редактирование группы
Download