Разработка информационной системы управления документацией (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 За простотой изложенного стоит большая практическая работа, многие особенности который были опущены с тем чтобы не утомлять слушателей Просмотр страницы Список ревизий Загрузка файла Редактирование группы