3.2.2. Задание № 2
|
Интерфейс для модуля шифрования |
С ГРАФИЧЕСКИМ ИНТЕРФЕЙСОМ (GUI) |
|
формулировка |
Необходимо реализовать оконное приложение, которое позволит обычным пользователям пользоваться работой шифровального модуля. |
|
Методические указания |
Необходимо реализовать оконное приложение на tkinter. Примерный внешний вид приложения:
Возможности приложения: возможность загрузить txt-файл с зашифрованными строками. Файл для загрузки выбирается в диалоговом окне, которое возникает при нажатии кнопки «загрузить файл» (по умолчанию – encrypt.txt); возможность увидеть расшифрованные строки на экране в нередактируемом текстовом поле; если сообщение больше, чем помещается в поле, то поле должно скроллится; если сообщение помещается в поле ввода, то интерфейс скроллинга должен быть скрыт; возможность добавить новую строку путём ввода этой строки во второе текстовое поле и нажатия кнопки «Добавить»; возможность сохранить новый набор строк обратно в открытый файл, предварительно их зашифровав, путём нажатия кнопки «зашифровать и сохранить». Исходный файл при этом перезаписывается; возможность добавить строки, не загружая файл, после чего зашифровать добавленные строки и сохранить результат в новый файл. Целевой файл выбирается в открывающемся стандартном диалоговом окне сохранения файла (по умолчанию называется encrypt_2.txt); строка состояния в нижней части окна, для сообщений об ошибках ошибками считаются ситуации, когда: открытие файла было неуспешно по любой причине (выводится «не удалось открыть файл»); файл открылся, но в нём находятся символы, кроме шифруемого набора и символа переноса строки (если, например, ошибка на строке номер 5, выводится: «файл содержит недопустимые символы на стр. №5»); если в момент сохранения файл недоступен для записи, выводится «файл недоступен для записи»; Аспекты функционала окна, зависящие от студенческого ID: количество строк в окне вывода расшифрованных сообщений расчитывается как 10 + (рекурсивная сумма цифр ID). Рекурсивная сумма цифр считается путём подсчёта суммы цифр числа, потом суммы цифр его суммы цифр, и так до тех пор, пока не останется 1 цифра. То есть, для ID 70525968 это будет 7 + 0 + 5 + 2 + 5 + 9 + 6 + 8 = 42 => 4 + 2 = 6, и в итоге 10 + 6 = 16 строк количество строк в окне ввода новых сообщений рассчитывается как 3 + (остаток от деления ID на 4) В интерфейсе программы строки текстовых полей должны быть пронумерованы. Например:
программа импортирует модуль cypher.py из первого задания и опирается на его функционал, в том числе на шифрование с использованием студенческого id Программу сохранить под именем app.py |
|
Входные данные |
Проверяющий запускает app.py , вводит несколько строк, сохраняет новый файл encrypt_2.txt, после чего загружает этот файл обратно в программу через интерфейс и проверяет расшифровку строк. Так же проверяется открытие файла с нетекстовыми символами (ошибка) и сохранение файла, открытого в текстовом редакторе (так же ошибка). |
|
Выходные данные |
Программа работает и выдаёт ошибки по спецификации |
3.2.3. Задание № 3
|
Разработка веб-сервиса |
WEB-ИНТЕРФЕЙС |
|
формулировка |
Создайте сервер на flask, который при запуске будет открывать Web-сервер по стандартному для flask адресу 127.0.0.1:5000 Сервер обеспечивает Web-интерфейс к модулю шифрования, одновременно поддерживая логирование запросов. |
|
Методические указания |
Сервер должен поддерживать следующий функционал: GET-запрос по адресу с учётом Вашего ID, например 127.0.0.1:5000/70525968. По этому запросу должна открываться HTML-форма для ввода и сохранения сообщений из приведённого ниже шаблона: Шаблон страницы: <!DOCTYPE html> <HTML> <BODY> <FORM method=»POST»> <LABEL>Введите сообщение:</LABEL><br> <TEXTAREA style=»width:95%» name=»text»></TEXTAREA><br> <INPUT type=’submit’ value=»Отправить»></SUBMIT> </FORM> </BODY> </HTML> Внешний вид страницы:
Обработка посланной формы (фактически POST-запрос по тому же адресу, который отправляет браузер на основании формы). Сервер должен зашифровать и сохранить текст из формы в файл messages.csv (дополняя существующую базу файлов), и вернуть пользователю страницу с подтверждением результата из приведённого ниже шаблона (полученный из формы текст передаётся в шаблон через значение msg) Шаблон и вид страницы: <!DOCTYPE html> <HTML> <BODY> <p>Сообщение сохранено:</p> <p>{{msg}}</p> </BODY> </HTML>
Сервер хранит тексты в файле messages.csv, сохраняя не только сам текст, но так же индекс полученного сообщения, время его отправки и IP-адрес отправителя. То есть в messages.csv 4 значения на каждой строке. GET-запрос по адресу 127.0.0.1:5000/reset стирает все сообщения на сервере (стирает csv-файл). В браузер выходится простейший шаблон, рапортующий о выполненном сбросе (код шаблона ниже): <!DOCTYPE html> <HTML> <BODY> <p>messages.csv стёрт</p> </BODY> </HTML>
Расшифровка и зашифровка сообщений производится через написанный ранее модуль cypher.py. Программу сохранить под именем srv.py Папку templates с шаблонами приложить к ответу |
|
Процедура проверки |
Проверяющий запускает сервер, начинает с запроса на reset, после чего заходит на адрес по ID студента. Отправляет несколько сообщений, проверяет созданный csv-файл messages.csv, проверяет json-выгрузку. |
|
Выходные данные |
Сервер работает, создавая и модифицируя содержимое messages.csv в зависимости от спецификации. |
3.2.4. Задание № 4
|
Приложение для управления контентом |
С ГРАФИЧЕСКИМ ИНТЕРФЕЙСОМ (GUI) |
|
формулировка |
Сделать приложение, которое будет управлять содержимым csv-файла на сервере. |
|
Методические указания |
Сделайте улучшение приложения из задания 2. Приложение должно требовать от пользователя в диалоге выбрать файл имеено формата *.csv, и давать ошибку при попытке загрузки файла другого типа. Если csv-файл отсутствует, его можно создать из приложения, так же как текстовый файл в задании 2. В окне вывода расшифрованной информации нужно выводить не просто тексты, а табличку из 4 колонок, заполняемую данными из csv-файла (то есть колонки id, время выгрузки, ip-адрес и расшифрованный текст). Добавление новой строки в приложении оформляется как полноценный пост на сервере, то есть добавляет новую строку с новым id и с отметкой текущего времени. В качестве ip-адреса указывается слово admin. При наведении мышки на ряд в таблице, слева от ряда возникают 2 стрелочки — вверх и вниз, и крестик. При нажатии стрелочки вверх запись движется в таблице вверху, при нажатии стрелочки вниз – вниз. При нажатии крестика сообщение удаляется. Если сообщение уже первое или последнее в списке, то соответствующая стрелочка должна быть неактивна. При наведении мышки на другой ряд, стрелочки и крестик переключаются на новый ряд. Приложение опирается на cypher.py при расшифровке сообщений из csv-файла и в процессе зашифровки сообщений при сохранении csv-файла. Изменения, вносимые в messages.csv в приложении, тут же отражаются на сервере и наоборот. Программу сохранить под именем admin.py |
|
Процедура проверки |
Проверяющий запускает сервер и административное приложение. Загружает в приложение используемый сервером файл messages.csv. Выполняет команды добавления и удаления строк в приложении, проверяет правильность форматов данных в окне приложения, в файле messages.csv, а так же правильность выгрузок с сервера. |
|
Ожидаемый результат |
Работа интерфейса admin.py согласно спецификации. Бесшовная интеграция админки и сервера. |




Запрос по адресу 127.0.0.1:5000/get_all.json позволяет выкачать с сервера информацию о всех сообщениях в формате json. Возвращается список сообщений messages, в котором каждое сообщение кодируется как json-объект с ключами id, datetime, ip, text.