Разработка информационной системы управления документацией (Wiki-системы) программный проект по курсу «Базы данных» Скворцов А.Н. гр. 4081/4 Рытенков А.С. гр. 4081/3 ФТК 2008
Формулировка задачи Структурирование документов с помощью 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 Структура web-приложения реализуемого с помощью фреймворка Django
Особенности Django Django - это свободный программный каркас для создания веб-приложений, названый в честь джазового гитариста Джанго Рейнхардта. Слой ORM –Абстракция от конкретной СУБД –Автоматическая трансляция объектов в набор таблиц –Частичная абстракция от схемы БД Подключаемая архитектура приложений. Высокий коэффициент повторного использования кода. Полноценный API доступа к БД с поддержкой транзакций. Расширяемая система шаблонов и тегов Диспетчер URL на регулярных выражениях Встроенный административный интерфейс
Реализация основных функций Основные функции простой wiki-системы можно реализовать всего на двух таблицах. Если постараться, то можно объединить их и в одну Хранение Отображение документов Версионность Список версий Оптимистичная блокировка при редактировании Отчет об истории изменений страницы
Система структурирования документов Тег - ключевое слово для категоризации чего-либо. Иными словами, это метка, которой помечается один или несколько документов Тегирование документов Получение списка страниц помеченных тегом Иерархическая система категорий (на основе тегов) Облако тегов
Приложения к страницам Приложения к документам могут быть разделены на два класса: бинарные файлы и картинки. Картинки используются для оформления страниц, бинарные файлы доступны только для скачивания. Привязка файлов к wiki- страницам Хранение файлов в базе Кодировка base64 Форма загрузки файлов
Подсистема управления доступом Основными правами являются право просмотра, создания и редактирования объекта, например документа. Количество прав в системе не может быть изменено динамически Разделение прав доступа к объектам системы Индивидуальное и групповое предоставление прав Иерархическая система управления правами (возможность организации вложенных групп) Использование стандартных методов управления django.contrib.auth Реализация интерфейса управления иерархической системой прав Реализация системы свободной регистрации
Подсистема управления доступом Упрощенная схема сущностей и связей обеспечивающих работу системы прав
Решенные задачи Функция просмотра изменений реализована на основе стандартной библиотеки difflib Просмотр/Редактирование страниц Просмотр списка страниц Вики-разметка (mediawiki и markdown) Загрузка файлов и картинок Оптимистичная блокировка страниц на редактирование Меню Теги для страниц Просмотр облака тегов Категории для страниц на основе тегов Комментарии Просмотр изменений (diff)/редактирование конфликтов Список ревизий и возможность просмотра конкретной ревизии
Решенные задачи При использовании xml-rpc, работа с базой MySQL идет напрямую, не используя механизм ORM слоя фреймворка Привязка файлов к wiki-страницам, хранение файлов в базе Доступ к основной функциональности через механизм xml-rpc Преобразовать страницу просмотра ревизий в подробный html-отчет об истории изменений страницы, написать xml- rpc метод для получения xml версии этого отчета Авторизация, разграничение прав регистрация пользователей вход/выход администрирование (назначение прав и групп) Модификация системы авторизации, реализация иерархических групп
Заключение Разработано ядро полноценной wiki-системы допускающее добавление функций В качестве основных инструментов использовался язык Python и фреймворк Django. Реализована подсистема тегирования и категорирования для структурирования информации Реализована подсистема управления правами доступа Реализован механизм доступа к данным через xml- rpc Реализован прототип простой подсистемы аудита Наличие возможности простого перехода на другую СУБД из числа поддерживаемых Django За простотой изложенного стоит большая практическая работа, многие особенности который были опущены с тем чтобы не утомлять слушателей
Просмотр страницы
Список ревизий
Загрузка файла
Редактирование группы