Информационная система для учёта электронных подписей
Содержание
Введение
1. Анализ требований к системе
1.1 Анализ предметной области
.2 Use case-диаграмма
2. Обзор средств разработки
3. Оценка трудоёмкости и сроков разработки проекта с
использованием языка python по методикам cetin и cocomo-ii
3.1 Расчёт по методике COCOMO-II
.2 Расчёт по методике CETIN
4. Проектирование информационной системы
5. Разработка приложения с использованием django
5.1 Создание приложения Django
.2 Создание моделей
.3 Создание представлений
.4 Создание шаблонов
6. Тестирование приложения
Заключение
Список использованных источников
Приложения
Введение
В большинстве информационных систем используется электронная подпись.
Электронная подпись (ЭП) - это последовательность символов, полученная в
результате криптографического преобразования определенного объема информации по
математическому алгоритму с использованием ключей, каждый символ которой имеет
неизменяемое соотношение с данным объемом информации.
Электронная подпись выполняет следующие функции:
- Идентифицирует автора;
- Позволяет определить неизменность документа с момента
подписания;
- Защищает документ от подделки.
В России используется три вида электронной подписи:
- Простая;
- Неквалифицированная;
- Квалифицированная.
На сегодняшний день самые распространенные сферы использования
электронной подписи:
- Электронный документооборот. В этой сфере ЭП используется в
качестве средства визирования документов;
- Электронная отчетность. ЭП придает отчетности юридическую
значимость;
- Работа на Портале госуслуг. [7]
В связи с широким распространением электронных подписей а также большим
количеством бумажной работы при выдаче стал актуальным вопрос автоматизации их
учета. Целью выпускной квалификационной работы является создание информационной
системы, позволяющей ускорить и упростить ведение документации при выдаче
электронных подписей. На текущий момент учет электронных подписей ведется без
использования средств автоматизации. В связи с этим было принято решение о
необходимости разработки информационной системы. Система должна обеспечивать
возможность внесения сведений о приобретении сертификатов на электронные
подписи для сотрудников предприятия.
python информационный приложение django
1. Анализ требований к системе
.1 Анализ
предметной области
Процедура получения электронной подписи происходит в следующем порядке:
. Организация направляет заявку в удостоверяющий центр. В заявке
содержится список работников, которым необходимо выдать электронные подписи, а
также данные об этих работниках;
. Заключается контракт между удостоверяющим центром и
организацией;
. Удостоверяющий центр выдает сертификаты работникам. Сертификат
электронной подписи представляет собой документ, который подтверждает
принадлежность электронной подписи её владельцу;
. Факт выдачи ЭП работнику регистрируется в журнале (реестре).
Реестр содержит следующие обязательные сведения о сертификатах ключей
проверки электронных подписей уполномоченных сотрудников Администрации города
Вологды, наделенных правом электронной подписи от имени Администрации города
Вологды включающие:
. Фамилию, имя и отчество сотрудника;
. Название органа Администрации города Вологды, сотрудник которого
наделен правом ЭП;
. Реквизиты постановления Администрации города Вологды, в
соответствии с которым сотрудник наделен правом электронной подписи;
. Название удостоверяющего центра, в котором проводилась выдача
сертификата ключа проверки электронной подписи сотруднику;
. Дату выдачи сертификата ключа проверки электронной подписи;
. Дату начала и окончания срока действия сертификата ключа
проверки электронной подписи;
. Носитель ключевой информации (Токен), на который производилась
запись ключа электронной подписи, с указанием серийного номера носителя;
. Отметку о получении Уполномоченным сотрудником сертификата ключа
проверки электронной подписи;
. Дату досрочного прекращения действия сертификата ключа проверки
электронной подписи;
. Отметку об уничтожении ключа электронной подписи. [8]
1.2 Use case-диаграмма
Выделим двух акторов системы:
. Лицо, ответственное за закупочную деятельность
. Лицо, ответственное за ведение реестра
Use case диаграмма
представлена на рисунке 1.1
Рисунок 1.1 - use case-диаграмма системы
2. Обзор
средств разработки
В качестве средств разработки заказчиком были рекомендованы Python, Django, PostgreSQL. Выбор обусловлен необходимостью интеграции разрабатываемой системы в
уже существующую на предприятии.
Рассмотрим плюсы Django,
отличающие его от других Content Management Frameworks.
Первое и, пожалуй, самое главное отличие - язык программирования, на
котором выполнена CMF. В данном случае
это Python. Этот язык программирования появился относительно недавно (в 1990
году), но это нисколько не помешало ему стать одним из самых популярных и
востребованных на сегодняшний день. Python использует Yandex и даже такой
гигант, как Google. Причин для этого несколько.
Во-первых, на выбор в пользу Python влияет лицензия, которая
регламентирует использование и распространение этого языка. Она позволяет
использовать модули, написанные на Python, в коммерческих приложениях.
Второе, чем привлекает Python - простота разработки. Исследования
показывают, что написание программ на данном языке отнимает в четыре раза
меньше времени, чем написание аналогичных программ на других языках
программирования.
Третье достоинство этого языка программирования - совместимость с
большинством существующих платформ.[2]выступает языком программирования для
нескольких Фреймворков (Фреймворк - программное обеспечение, облегчающее
разработку и объединение разных компонентов большого программного проекта).
Одним из них и является Django.
Кроме уже отмеченного удобного языка программирования, этот Фреймворк
обладает ещё целым рядом преимуществ.
Одним из них является бесплатность. Для начинающего разработчика это
немаловажно.
Второй плюс заключается в том, что Django располагает программными
интерфейсами (API) для доступа к базам данных, что, естественно, значительно
облегчает разработку web-проектов.
Третьим достоинством по счёту, но не по значимости является то, что
архитектура Django согласно модели «MVC: Model-View-Controller» разделяет
приложение на три составляющих:
1. Model - это программный модуль в составе приложения, который является своего
рода посредником между базой данных и модулями проекта.
Модель выполняет следующие функции:
- Описывает структуру базы данных в терминологии используемого
языка программирования;
- Представляет данные, считанные из базы данных, в терминологии
используемого языка программирования;
- Реализует механизмы выборки, сортировки и фильтрации данных,
содержащихся в базе данных;
- Реализует механизмы редактирования, удаления и добавления
данных в базу;
- Проверяет корректность введенных данных (соответствие типов,
длины строки и т.д.) [1]
2. View - часть, которая определяет какие данные получать и как их отображать,
обрабатывается представлениями и шаблонами.
3. Controller - часть, которая выбирает представление в зависимости от
пользовательского ввода, обрабатывается самой средой разработки, следуя
созданной вами схемой URL, и
вызывает соответствующую функцию Python
для указанного URL. [4]
Рисунок 2.1 - архитектура приложения Django
Также Django имеет удобный интерфейс администратора, благодаря которому
можно интуитивно управлять разработанным web-приложенем и его содержимым. Действия по управлению
контентом может совершать даже человек, не знакомый близко с программированием.
Кроме всего перечисленного, фреймворк поддерживает большое количество
языков, что позволяет создавать web-приложения
для аудитории разных стран мира.
Все перечисленные преимущества в конце концов выливаются в одно
неоспоримое достоинство: разработка и поддержка web-приложений, написанных на языке Python и
использованием Django, происходит гораздо проще и быстрее, чем на других
платформах.
Благодаря этому создание web-приложений,
написанных на языке Python с использованием Django, и их поддержка, становится
гораздо проще и осуществляется быстрее, чем разработка аналогичных проектов на
других платформах.является олицетворением языка, который он использует:
интуитивно понятный, позволяющий быстро и качественно создать код, более
распространён в глобальной сети (используется в том числе Google). Плюс ко
всему в комплекте с Django идёт очень хорошая и подробная документация, в
которой можно найти ответ на любой интересующий вопрос. [3]- свободная
объектно-реляционная система управления базами данных. Сильными сторонами
PostgreSQL считаются:
высокопроизводительные и надёжные механизмы транзакций и репликации;
расширяемая система встроенных языков программирования;
наследование;
легкая расширяемость.
3. Оценка трудоёмкости и сроков разработки проекта с
использованием языка Python по методикам CETIN и COCOMO-II
.1 Расчёт
по методике COCOMO-II
Примем наиболее вероятное количество строк на одну невыровненную ФТ для
языка Python за 60.
Размер проекта:
*34=2040 строк
Факторы масштаба
В методике используются пять факторов масштаба SFi, которые определяются
следующими характеристиками проекта:
.PREC - прецедентность, наличие у разработчика опыта аналогичных
разработок
.FLEX - гибкость процесса разработки продукта
.RESL - архитектура и разрешение рисков
.TEAM - сработанность команды
.PMAT - зрелость процессов
Значения фактора масштаба в зависимости от оценки его уровня, приведены в
Таблице 1
Таблица 1 - факторы масштаба
Фактор масштаба
|
Оценка уровня фактора
|
|
Very Low
|
Low
|
Nominal
|
High
|
Very High
|
Extra High
|
PREC
|
6.20
|
4.96
|
3.72
|
2.48
|
1.24
|
0.00
|
FLEX
|
5.07
|
4.05
|
3.04
|
2.03
|
1.01
|
0.00
|
RESL
|
7.07
|
5.65
|
4.24
|
2.83
|
1.41
|
0.00
|
TEAM
|
5.48
|
4.38
|
3.29
|
2.19
|
1.10
|
0.00
|
PMAT
|
7.80
|
6.24
|
4.68
|
3.12
|
1.56
|
0.00
|
SF=6.2+1.01+4.24+2.19+1.56=15.2 - факторы масштаба
E=0.91+0.01*15.2=0.14 - Множители трудоемкости
.PERS - квалификация персонала
.RCPX - надежность и сложность продукта
.RUSE - разработка для повторного использования
.PDIF - сложность платформы разработки
.PREX - опыт персонала
.FCIL - оборудование
.SCED - сжатие расписания
Таблица 2 - Множители трудоемкости
|
Оценка уровня множителя трудоемкости
|
|
Extra Low
|
Very Low
|
Low
|
Nominal
|
High
|
Very High
|
Extra High
|
PERS
|
2.12
|
1.62
|
1.26
|
1.00
|
0.83
|
0.63
|
0.5
|
RCPX
|
0.49
|
0.60
|
0.83
|
1.00
|
1.33
|
1.91
|
2.72
|
RUSE
|
n/a
|
n/a
|
0.95
|
1.00
|
1.07
|
1.15
|
1.24
|
PDIF
|
n/a
|
n/a
|
0.87
|
1.00
|
1.29
|
1.81
|
2.61
|
PREX
|
1.59
|
1.33
|
1.22
|
1.00
|
0.87
|
0.74
|
0.62
|
FCIL
|
1.43
|
1.30
|
1.10
|
1.0
|
0.87
|
0.73
|
0.62
|
SCED
|
n/a
|
1.43
|
1.14
|
1.00
|
1.00
|
1.00
|
n/a
|
Уравнения СОСОМО II для оценки номинальных значений трудоемкости имеют
следующий вид:
где •SIZE - размер продукта в KSLOC или в количестве функциональных точек
без включения поправочных коэффициентов (UFP), определенном по методике 1FPUG,
с последующим преобразованием в количество строк кода.
•EMi - (effort multiplier) множители трудоемкости
•SFj - (scale factor) факторы масштаба
•n=7 - для предварительной оценки
•n=17 - для детальной оценки
Калибровочные переменные А, В, С и D в модели СОСОМО II принимают
следующие значения:
А = 2.94,
В = 0.91,
С= 3.67, = 0.28.
Множитель трудоемкости рассчитываются по формуле:
Em =
1.26*0.6*0.95*0.87*1.59*1.3*1 = 1.29
Номинальное значение трудоемкости:
PM = 2,94*20.14*1.29
= 4.18 чел/мес
Время реализации проекта:
= 3,67*4,180,28+0,2*0,01*15,2 =3,67*1,55 = 5,7 мес
3.2 Расчёт
по методике CETIN
этап. Оценка функционального размера разрабатываемой ИС
количество вариантов использования - C;
количество типов объектов - E;
количество свойств типов объектов - Т;
количество взаимодействий между типами объектов - I;
количество типов узлов - N.
SIZE={C, E, T, I ,N}
Исходные данные:
Количество акторов системы = 3
Количество вариантов использования (Case) - C = 5
Количество типов объектов (бизнес объектов) (Entity) - Е = 16
Количество свойств типов объектов (Tool) - Т = 50;
Количество взаимодействий между типами объектов (Interaction) - I = 64;
Количество типов узлов (Node) - N = 1.
Функциональный размер:
{5,16,50,64,1}
этап. Оценка базовой трудоемкости разработки ППО
Sj=1/165·[C*Sj(C)+E*Sj(E)+T*Sj(T)+I*Sj(I)+N*Sj(N)],
где: Sj - трудоемкость процесса разработки с номером j в
[человеко-месяц];
j - номер процесса разработки (значения от 1 до 6);
Sj(C) - норматив трудоемкости реализации одного варианта использования в
процессе разработки с номером j=1,2,…,6, {[человеко-час]/[вариант
использования]};=1/165·[5*32,12+16*28,33+50*0+64*14,15+1*0] = 1/165 х
[32.12+28.33+0+14.15+0] = 9.2=1/165·[5*58,03+16*28,04+50*0+64*20,32+1*0] =
= 1/165 х [58.03+28.04+0+20.32+0] =
12.35921=1/165·[5*45,42+16*61,75+50*31,35+64*37,52+1*24,02] =
= 1/165 х [227,42+988+1567,5+2401,28+24,04] =
31.56=1/165·[5*31,57+16*81,51+50*50,72+64*36,11+1*0] =
= 1/165 х [157.85+1304.16+2536+2311.04]=
38.24=1/165·[5*88,96+16*0+50*0+64*0+1*0] = 1/165 х [444.8+ 0 + 0 + 0 + 0] =
2.7=1/165·[5*8,69+16*0+50*0+64*0+1*23,74] = 1/165 х [43.45+ 0 + 0 + 0 + 23.74]
= 0.4б = 94.47
Режим эксплуатации ИС К1=1,05 обработка данных в режиме реального времени
Масштаб ИС К2=1 средние ИС (от 11 до 100 пользователей с длительным ЖЦ с
возможностью роста до крупных систем)
Стабильность ИС К3=1 дискретное внесение изменений
Защита от несанкционированного доступа К4=1 средняя
Защита программ и данных (на уровне операционной системы, на уровне
сетевого программного обеспечения, на уровне СУБД) К5 = 1 средняя
Контрольный след операций К6=1,08 выборочное отслеживание
Отказоустойчивость К7=1 средняя
Восстанавливаемость К8= 1 средняя
Длительность обработки (время отклика) К9=1
Исходный язык разработки ИС К10=1 объектно-ориентированный (Си++ или
эквивалентный)
Класс пользователя К11=1,07 средний
Требования к центральному обрабатывающему устройству (процессору) К12= 1
средняя
Требования к оперативной (основной) памяти К13=1,04 малая
Требования к внешней памяти К14=1,01 малая
Требования к локальной вычислительной сети К15 = 1,02 средние требования
Критичность ИС К16=1 организационная безопасность
Готовность К17 = 1,11 заказное (методика заказчика специфическая)
Представление данных К18=1 реляционный
этап. Определение значений поправочных коэффициентов
КП1=К11·К16·К17 = 1,07*1*1,11 = 1,19
КП2=К1·К2·К4·К5·К6·К7·К8·К9·К16·К17·К18=1,05*1*1*1*1,08*1*1*1*1,11*1=1,26
КП3=К1·К2·К4·К5·К6·К7·К8·К9·К11·К12·К13·К14·К15·К16·К17·К18 =
1,05*1,08*1,07*1,04*1,01*1,02*1,11=1,44
КП4 = К1*К2*К4*К5*К6*К7*К8*К9*К10*К12*К13*К14*К15*К16*
*К17*К18=1,05*1*1*1*1,08*1*1*1*1,04*1,01*1,02*1,11 = 1,35
КП5=К1*К2*К4*К5*К6*К7*К8*К9*К10*К11*К12*К13*К14*К15*К16*К17*К18 = 1,44
КП6 = К1*К2*К11*К16*К18=1,05*1,07*1 = 1,12
Sj(E) - норматив трудоемкости реализации одного типа объектов в процессе
разработки с номером j=1,2,...,6. {[человеко-час]/[тип объектов]};
Sj(T) - норматив трудоемкости реализации одного свойства типа объекта в
процессе разработки с номером j=1,2,...,6. {[человеко-час]/[свойство типа
объектов]};
Sj(I) - норматив трудоемкости реализации одного взаимодействия между
типами объектов в процессе разработки с номером j=1,2,...,6.
{[человеко-час]/[взаимодействие между типами объектов]};
Sj(N) - норматив трудоемкости реализации одного типа узла в процессе
разработки с номером j=1,2,...,6. {[человеко-час]/[узел]};
165 - количество человеко-часов в одном человеко-месяце
этап. Расчет трудоемкости с учетом поправочных коэффициентов
S1= 9.2х1,19 = 10.95= 12.4х1,26 = 15.62= 31.56х1,44 = 45.4= 38.24х1,35 = 51.62= 2.7х1,44 = 3.89= 0.4х1,12 = 0.45= 127.98
5 этап. Оценка срока разработки ППО
срок разработки 4-14 мес., средний 8 мес.
С учетом расчета трудоемкости был построен детальный график разработки
продукта (диаграмма Ганта). Диаграмма представлена в приложении.
4. Проектирование информационной системы
База данных будет состоять из следующих таблиц:
1 Department - содержит список отделов
- ID - автоинкременное поле, первичный ключ;
- Name_dep - название отдела;
- Organization - организация, к которой относится
отдел.
2 Worker - содержит информацию о работниках
- ID - автоинкременное поле, первичный ключ;
- FIO - ФИО работника;
- Short_position - краткое название должности;
- Position - должность;
- Ser_pass - серия паспорта;
- Num_pass - номер паспорта;
- Cod_podr -
код подразделения, где выдан паспорт;
- Name_podr - название подразделения;
- SNILS - номер страхового свидетельства;
- Id_dep - внешний ключ
к таблице Department.
3 Sertificate - содержит информацию о выданных сертификатах;
- ID - автоинкременное поле, первичный ключ;
- Id_worker - внешний
ключ к таблице Worker;
- Start_date -
дата начала действия сертификата;
- End_date -
дата окончания действия сертификата;
- Serial_number - номер сертификата.
4 MPA - содержит информацию о муниципальных правовых актах, наделяющих
сотрудника правами на получение электронной подписи;
- ID - автоинкременное поле, первичный ключ;
- Name_MPA -
название муниципального правового акта;
- Type_MPA -
тип муниципального правового акта;
- Date_MPA -
дата утверждения муниципального правового акта;
- Num_MPA -
номер муниципального правового акта;
5 OID - объектный идентификатор ключа
- ID - автоинкременное поле, первичный ключ;
- Name_OID -
название объектного идентификатора;
- Comment - примечание.
6 SertificateCategory - содержит информацию о категориях сертификатов
- ID - автоинкременное поле, первичный ключ;
- Name_category - название категории.
7 Token-содержит информацию о выданных носителях электронных подписей
- ID - автоинкременное поле, первичный ключ;
- Type - тип носителя;
- Reg_num -
регистрационный номер носителя.
8 VerificationCenter - содержит информацию об удостоверяющих центрах
- ID - автоинкременное поле, первичный ключ;
- Name - название;
- Comment - примечание.
9 ContractType - содержит типы контрактов (таблица-справочник)
- ID - автоинкременное поле, первичный ключ;
- Name - тип контракта.
Contract - содержит информацию о контрактах
- ID - автоинкременное поле, первичный ключ;
- Reg_num - регистрационный номер;
- Start_date -
дата начала контракта;
- End_date -
дата окончания контракта;
- Comment - примечание.
ContractLine - содержит информацию о стоимости конракта и
количестве выданных сертификатов (таблица-справочник)
- ID - автоинкременное поле, первичный ключ;
- Price - стоимость;
- Количество подписей в контракте.
Application - заявка в удостоверяющий центр на выдачу
сертификатов
- ID_center;
- ID_category.
SertificateDelivery - журнал выдачи сертификатов
- ID - автоинкременное поле, первичный ключ;
- Start_date - дата выдачи;
- Early_stop_date - дата досрочного прекращения
действия сертификата;
- Destruction_date - отметка об уничтожении (дата)
Физическая схема базы данных представлена на рисунке 4.1.
Рисунок 4.1 - физическая схема базы данных
5. Разработка
приложения с использованием Django
.1
Создание приложения Django
Для того чтобы создать приложение Django, необходимо запустить командную строку и выполнить
следующую команду:
Django-admin.py startproject <имя проекта>
После выполнения этой команды автоматически сгенерируются все основные
модули проекта.
Запуск отладочного веб-сервера производится командой
Manage.py runserver
Для останова отладочного веб-сервера необходимо нажать комбинацию клавиш
«CTRL» + «Break»
5.2 Настройка проекта Django
Созданный проект содержит в себе модуль Settings.py. Для настройки проекта необходимо внести сведения об
используемой базе данных в этот модуль. По умолчанию модуль содержит настройки
для SQLite[1]. Так как в текущем проекте будет
использоваться PostgreSQL, в Settings.py внесем настройки, представленные на рисунке 5.1
Рисунок 5.1 - настойки базы данных
Для настройки локализации необходимо указать язык и временную зону:
LANGUAGE_CODE = 'RU-ru'_ZONE = 'UTC'
5.3
Создание моделей
В автоматически созданном модуле Models.py
необходимо описать классы для каждой сущности схемы базы данных. На рисунке 5.2
показана структура модели на примере класса «Работник»
Рисунок 5.2 - модель «Работник»
Полный листинг модуля Models.py представлен в приложении
5.4
Создание представлений
Представления необходимы для обработки данных, содержащихся в моделях.
Представление - это функция Python. Эта функция принимает параметр - объект класса HttpRequest:
- GET - список параметров, полученных по методу GET;
- POST - список параметров, полученных по методу POST;
- REQUEST - список параметров, полученных по методам GET и POST;
- Method - содержит строку «GET» или «POST»
в зависимости от метода
- Path - строка, хранящая интернет-адрес страницы
На рисунке 5.3 показано представление, которое обрабатывает данные модели
«Работник»
Рисунок 5.3 - представление для обработки данных модели «Работник»
5.5
Создание шаблонов
Для настройки отображения формы «Работник» в Django используются шаблоны, которые представляют собой
обычный html-код со специализированными командами
шаблонизатора. Пример шаблона «Работник» представлен на рисунке 5.4.
Рисунок 5.4 - шаблон для отображения формы «Работник»
Структура приложения представлена на рисунке 5.5
Рисунок 5.5 - структура приложения Django
Автоматический интерфейс администратора является частью библиотеки кода,
называемой django.contrib - часть кода Django, включающего различные полезные
дополнения к ядру Django.
Для того чтобы подключить к проекту интерфейс администратора, необходимо
выполнить следующие действия:
. Добавить 'django.contrib.admin' в настройку INSTALLED_APPS.
. Добавить четыре зависимости в список INSTALLED_APPS -
django.contrib.auth,django.contrib.contenttypes, django.contrib.messages and
django.contrib.sessions
. Добавить django.contrib.auth.context_processors.auth и
django.contrib.messages.context_processors.messages в опцию 'context_processors' модуля DjangoTemplates` из настройки TEMPLATES, и
django.contrib.auth.middleware.AuthenticationMiddleware с MessageMiddleware в MIDDLEWARE_CLASSES.
4. Определить, какие модели будут редактироваться через интерфейс
администратора.
. Для каждой модели необходимо создать класс ModelAdmin, который
инкапсулирует настройки интерфейса администратора для конкретной модели.
. Создать экземпляр AdminSite и добавьте в него созданные модели с
соответствующими классами ModelAdmin.
. Добавить AdminSite в URLconf.
Модуль Admin.py представлен на рисунке 5.6
Рисунок 5.6 - модуль Admin.py
После проделанных действий можно открыть интерфейс администратора Django
посетив URL /admin/
Интерфейс приложения администратора представлен на рисунке 5.7
Рисунок 5.7 - интерфейс администрирования Django
6.
Тестирование приложения
Первый этап работы с приложением - внесение информации о сотруднике.
Форма для внесения данных представлена на рисунке 6.1.
Рисунок 6.1 - форма «Работник»
На втором этапе работы с приложением вносятся данные о муниципальном
правовом акте, наделяющем сотрудника правами на получение электронной подписи.
Вкладка «Муниципальный правовой акт» представлена на рисунке 6.2.
Рисунок 6.2 - форма «Муниципальный правовой акт»
На третьем этапе добавляется заявка в удостоверяющий центр, что показано
на рисунке 6.3.
Рисунок 6.3 - форма «Заявка»
На четвертом этапе работы вносятся данные о заключенном контракте
(рисунок 6.4)
Рисунок 6.4 - форма «Контракт»
На пятом этапе добавляется сертификат для каждого работника (рисунок 6.5)
Рисунок 6.5 - форма «Сертификат»
Затем заполняется форма «ОИД». Форма представлена на рисунке 6.6.
Рисунок 6.6 - форма «ОИД»
Факт выдачи электронной подписи сотруднику регистрируется в журнале
выдачи. Форма представлена на рисунке 6.7.
Рисунок 6.7 - форма «Журнал выдачи»
Заключение
В ходе выпускной квалификационной работы была создана информационная
система для учета электронных подписей.
Для достижения поставленной цели были решены следующие задачи:
- Проведен анализ предметной области;
- Рассчитана трудоемкость разработки по двум методикам;
- Разработана система для учёта электронных подписей.
Список
использованных источников
1. Дронов В.А. Django: практика создания WеЬ-сайтов на
Python. - СПб.:БХВ-Петербург, 2016. - 528 с.: ил. - (Профессиональное
программирование)
. Головатый А., Каплан-Мосс Дж.
Django. Подробное руководство, 2-е издание. - Пер. с англ. - СПб.: СимволПлюс,
2010. - 560 с., ил.
. Документация Django на русском языке [электронный ресурс] - Pежим доступа: https://djbook.ru/
4. Django documentation [электронный ресурс] - Режим доступа:
https://docs.djangoproject.com/en/1.11/
. Руководство Django Girls [электронный ресурс] - Режим доступа:
https://tutorial.djangogirls.org/ru/
. Тритенко А.Н. Методические рекомендации по
оформлению выпускных квалификационных работ, курсовых проектов/работ для
студентов очной, очнозаочной (вечерней) и заочной форм обучения. - Вологда: ,
2016. - 95 с.
. Журнал о системах электронного документооборота
(СЭД) [электронный ресурс] - Режим доступа: #"896609.files/image020.jpg">
Рисунок п.1 - диаграмма Ганта
Приложение
3
(рекомендуемое).pyos_DIR =
os.path.dirname(os.path.dirname(os.path.abspath(__file__)))_KEY =
'6%*(6juha1^jufve(+%^bahm527h&cb89%d-!00!6(97yva6r^'= True_HOSTS = []_APPS
= [
'ecp.apps.EcpConfig',
'django.contrib.auth',
'django.contrib.contenttypes',
'django.contrib.sessions',
'django.contrib.messages',
'django.contrib.staticfiles',
'django.contrib.admin',
'bootstrap3',
'menu'
]_CLASSES = [
'django.middleware.security.SecurityMiddleware',
'django.contrib.sessions.middleware.SessionMiddleware',
'django.middleware.common.CommonMiddleware',
'django.middleware.csrf.CsrfViewMiddleware',
'django.contrib.auth.middleware.AuthenticationMiddleware',
'django.contrib.auth.middleware.SessionAuthenticationMiddleware',
'django.contrib.messages.middleware.MessageMiddleware',
'django.middleware.clickjacking.XFrameOptionsMiddleware',
]_URLCONF = 'mybase.urls'= [
{
'BACKEND': 'django.template.backends.django.DjangoTemplates',
'DIRS': [],
'APP_DIRS': True,
'OPTIONS': {
'context_processors': [
'django.template.context_processors.debug',
'django.template.context_processors.request',
'django.contrib.auth.context_processors.auth',
'django.contrib.messages.context_processors.messages',
],
},
},
]_APPLICATION = 'mybase.wsgi.application'= {
'default': {
'ENGINE': 'django.db.backends.postgresql', #
'django.db.backends.sqlite3',
'NAME': 'postgres', # 'mydatabase',
'USER': 'student',
'PASSWORD': 'student',
'HOST': 'localhost',
'PORT': '5432',
}
}_PASSWORD_VALIDATORS = [
{
'NAME':
'django.contrib.auth.password_validation.UserAttributeSimilarityValidator',
},
{
'NAME':
'django.contrib.auth.password_validation.MinimumLengthValidator',
},
{
'NAME': 'django.contrib.auth.password_validation.CommonPasswordValidator',
},
{
'NAME':
'django.contrib.auth.password_validation.NumericPasswordValidator',
},
]_CODE = 'RU-ru'_ZONE = 'UTC'_I18N = True_L10N = True_TZ =
True_URL = '/static/'
ПРИЛОЖЕНИЕ 4
(рекомендуемое)
Модуль Models.py
# -*- coding: utf-8 -*-
from __future__ import unicode_literalsdjango.db import
modelsdjango import formsDepartment (models.Model):
name_dep = models.CharField(u"орган
(подразделение)", max_length=100)
organization = models.CharField(
u"организация", max_length=200,
default=u"Администрация города Вологды"
)
def __unicode__(self):
return u"%s (%s)" % (self.name_dep,
self.organization)
class Meta:
verbose_name = u"отдел"
verbose_name_plural =
u"отделы"Worker(models.Model):
department = models.ForeignKey (
Department, on_delete=models.CASCADE,verbose_name =
u"отдел"
)
fio = models.CharField(u"ФИО", max_length=200)
short_position = models.CharField(u"краткое название
должности", max_length=50)
position = models.CharField(u"полное название
должности", max_length=300)
ser_pass = models.CharField(u"серия паспорта",
max_length=4)
num_pass = models.CharField(u"номер паспорта",
max_length=6)
cod_podr = models.CharField(u"код подразделения",
max_length=50)
name_podr = models.CharField(u"название
подразделения", max_length=50)
snils = models.CharField(u"СНИЛС", max_length=30,
default="")
birth_date = models.DateField(u"дата рождения")
phone = models.CharField(u"телефон", max_length=30)
def __unicode__(self):
return self.fio
class Meta:
verbose_name = u"работник"
verbose_name_plural =
u"работники"Sertificate(models.Model):
worker = models.ForeignKey(
Worker,on_delete=models.CASCADE,verbose_name =
u"работник"
) start_date = models.DateTimeField(u"дата начала
сертификата")
end_date = models.DateTimeField(u"дата конца
сертификата")
serial_number = models.CharField(u"серийный номер",
max_length=50)
def __unicode__(self):
return self.serial_number
class Meta:
verbose_name = u"сертификат"
verbose_name_plural =
u"сертификаты"WorkerMPA(models.Model):
worker = models.ForeignKey(Worker,on_delete=models.CASCADE)
mpa = models.ForeignKey("MPA",
on_delete=models.CASCADE)MPA(models.Model):
name_mpa = models.CharField(u"название МПА",
max_length=100)
type_mpa = models.CharField(u"тип МПА",
max_length=100)
date_mpa = models.DateField(u"дата МПА")
num_mpa = models.CharField(u"номер МПА",
max_length=100)
def __unicode__(self):
return self.name_mpa
class Meta:
verbose_name = u"муниципальный правовой акт"
verbose_name_plural = u"муниципальные
правовые акты"
class OID(models.Model):
name_oid = models.CharField(u"название ОИД",
max_length=100)
cod_oid = models.CharField(u"код ОИД",
max_length=100)
comment = models.TextField(u"примечание",
null=True,blank=True)
def __unicode__(self):
return self.name_oid
class Meta:
verbose_name = u"ОИД"OIDSertCategory(models.Model):
oid = models.ForeignKey(OID,on_delete=models.CASCADE)
sertificatecategory = models.ForeignKey(
"SertificateCategory",on_delete=models.CASCADE
)SertificateCategory(models.Model):
name_category = models.CharField(u"название категории",
max_length=100)
def __unicode__(self):
return self.name_category
class Meta:
verbose_name = u"категория сертификата"
verbose_name_plural = u"категории
сертификатов"SertCategoryWorkerMPA(models.Model):
workermpa = models.ForeignKey(WorkerMPA,on_delete=models.CASCADE)
sertificatecategory = models.ForeignKey(
SertificateCategory,on_delete=models.CASCADE
)Token(models.Model):
ETOKEN = u'eToken'
RUTOKEN = u'ruToken'
TOKEN_CHOICES = (
(ETOKEN, u'eToken'),
(RUTOKEN, u'ruToken'),
)
type_token = models.CharField(u"тип",
max_length=20, choices=TOKEN_CHOICES)
reg_num = models.CharField(u"регистрационный
номер", max_length=20)
def __unicode__(self):
return self.type_token
class Meta:
verbose_name = u"token"
verbose_name_plural = u"token'ы"VerificationCenter
(models.Model):
name = models.CharField(u"название", max_length=20)
comment = models.TextField(u"примечание",
null=True,
blank=True)
def __unicode__(self):
return self.name
class Meta:
verbose_name = u"удостоверяющий центр"
verbose_name_plural = u"удостоверяющие
центры"
class ContractType (models.Model):
name = models.CharField(u"тип контракта",
max_length=100)
def __unicode__(self):
return self.name
class Meta:
verbose_name = u"тип контракта"
verbose_name_plural = u"типы контрактов"Contract
(models.Model):
verificationcenter = models.ForeignKey (
VerificationCenter, on_delete=models.CASCADE,
verbose_name = u"удостоверяющий центр", null=True
)
contracttype = models.ForeignKey (ContractType,
on_delete=models.CASCADE,
verbose_name = u"тип контракта")
reg_num = models.CharField(u"регистрационный
номер", max_length=20)
start_date = models.DateField(u"дата начала
контракта")
end_date = models.DateField(u"дата окончания
контракта")
comment = models.TextField(u"примечание",
null=True,blank=True)
def __unicode__(self):
return self.reg_num
class Meta:
verbose_name = u"контракт"
verbose_name_plural = u"контракты"ContractLine
(models.Model):
contract = models.ForeignKey ("Contract",
on_delete=models.CASCADE)
price = models.FloatField ("Цена")
count_sert =
models.PositiveSmallIntegerField("количество")Application
(models.Model):
worker = models.ForeignKey ("Worker",
on_delete=models.CASCADE,verbose_name = u"работник")
sertificatecategory = models.ForeignKey
("Sertificatecategory",
on_delete=models.CASCADE,verbose_name = u"категория
сертификата")
verificationcenter = models.ForeignKey
("Verificationcenter", on_delete=models.CASCADE,
verbose_name = u"удостоверяющий центр")
date = models.DateField(u"дата")
class Meta:
verbose_name = u"заявка"
verbose_name_plural = u"заявки"SertificateDelivery
(models.Model):
worker = models.ForeignKey ("Worker",
on_delete=models.CASCADE,verbose_name = u"работник")
delivery_date = models.DateField(u"дата выдачи
сертификата")
early_stop_date = models.DateField(u"дата досрочного
прекращения")
destruction_date = models.DateField(u"отметка об
уничтожении")
token = models.ForeignKey ("Token",
on_delete=models.CASCADE)
contract= models.ForeignKey ("Contract",
on_delete=models.CASCADE,verbose_name = u"контракт")
def delivery_d(self):
return self.delivery_date
class Meta:
verbose_name = u"выдача сертификатов"
verbose_name_plural = u"выдача сертификатов"