Разработка Telegram бота и портала для информационной поддержки студентов
Характеристика методов централизации разнообразной информации об учебном процессе и способов предоставления доступа к ней. Разработка системы, предоставляющей информацию об актуальных новостях, ближайших мероприятиях, расписании с помощью Telegram-бота.
Рубрика | Программирование, компьютеры и кибернетика |
Вид | дипломная работа |
Язык | русский |
Дата добавления | 01.12.2019 |
Размер файла | 6,9 M |
Отправить свою хорошую работу в базу знаний просто. Используйте форму, расположенную ниже
Студенты, аспиранты, молодые ученые, использующие базу знаний в своей учебе и работе, будут вам очень благодарны.
5. Группа: сущность для хранения групп факультета, может поддерживать связь с факультетами и занятиями;
6. Занятие: сущность для хранения занятий группы, может поддерживать связь с группой.
Рис 7. Базовые сущности системы
Поддержание связей у сущностей позволяет однозначно определять взаимосвязи в большом массиве данных, поиск и фильтрацию данных можно выполнять через ORM Django [24]. Далее представлен краткий код сущностей Событие, Новость, Факультет, Группа и Занятие:
4.3 Написание базового набора Api для портала
Ядро проекта помимо выдачи информации должно иметь обширный набор интерфейсов для ее редактирования, что позволит сторонним ресурсам подключаться к системе и актуализировать данные. Потенциальными коннекторами в системе будут сторонние ресурсы учебного заведения, которые каждый отрезок времени, который устанавливается вручную, будут отправлять форматированные данные в ядро проекта.
Для подключения к системе разработан набор интерфейсов, который позволяет добавлять, редактировать и удалять базовые сущности системы Таб.7:
Таб. 7. Набор интерфейсов
Название |
Адрес |
Входные данные |
Выходные данные |
|
Добавить новость |
/api/add_news |
- Название - Описание - Текст - Дата создания - Автор - Категория/тег - Событие |
- Статус операции - ID новости - Код ошибки |
|
Удалить новость |
/api/delete_news |
- ID новости |
- Статус операции - Код ошибки |
|
Редактировать новость |
/api/edit_news |
- Название - Описание - Текст - Дата создания - Автор - Категория/тег - Событие - ID новости |
- Статус операции - ID новости - Код ошибки |
|
Получить список новостей |
/api/news_list |
- Статус операции - Список новостей со всеми возможными параметрами |
||
Добавить событие |
/api/add_event |
- Название - Описание - Текст - Дата создания - Адрес - Дата исполнения - Ссылка на регистрацию - Автор - Категория/тег - Преподаватель |
- Статус операции - ID события - Код ошибки |
|
Удалить событие |
/api/delete_event |
- ID события |
- Статус операции - Код ошибки |
|
Редактировать событие |
/api/edit_event |
- Название - Описание - Текст - Дата создания - Адрес - Дата исполнения - Ссылка на регистрацию - Автор - Категория/тег - Преподаватель - ID события |
- Статус операции - ID события - Код ошибки |
|
Получить список событий |
/api/events_list |
- Статус операции - Список событий со всеми возможными параметрами |
||
Добавить преподавателя |
/api/add_lecturer |
- ФИО - Факультет - Описание - Часы работы - Факультет |
- Статус операции - ID преподавателя - Код ошибки |
|
Удалить преподавателя |
/api/delete_lecturer |
- ID преподавателя |
- Статус операции - Код ошибки |
|
Редактировать преподавателя |
/api/edit_lecturer |
- ФИО - Факультет - Описание - Часы работы - Факультет - ID преподавателя |
- Статус операции - ID преподавателя - Код ошибки |
|
Получить список преподавателей |
/api/lecturer_list |
- Статус операции - Список преподавателей со всеми возможными параметрами |
||
Добавить факультет |
/api/add_faculty |
- Название - Краткое описание |
- Статус операции - ID факультета - Код ошибки |
|
Удалить факультет |
/api/delete_faculty |
- ID факультета |
- Статус операции - Код ошибки |
|
Редактировать факультет |
/api/edit_faculty |
- Название - Краткое описание - ID факультета |
- Статус операции - ID факультета - Код ошибки |
|
Получить список факультетов |
/api/faculty_list |
- Статус операции - Список факультетов со всеми возможными параметрами |
||
Создать группу |
/api/add_group |
- Название - Краткое описание - Факультет |
- Статус операции - ID группы - Код ошибки |
|
Удалить группу |
/api/delete_group |
- ID группы |
- Статус операции - Код ошибки |
|
Редактировать группу |
/api/edit_group |
- Название - Краткое описание - Факультет - ID группы |
- Статус операции - ID группы - Код ошибки |
|
Получить список групп |
/api/group_list |
- Статус операции - Список групп со всеми возможными параметрами |
||
Создать занятие |
/api/add_lesson |
- Название - Краткое описание - Дата - Время начала - Время окончания - Преподаватель - Адрес - Группа |
- Статус операции - ID занятия - Код ошибки |
|
Удалить занятие |
/api/delete_lesson |
- ID занятия |
- Статус операции - Код ошибки |
|
Редактировать занятие |
/api/edit_lesson |
- Название - Краткое описание - Дата - Время начала - Время окончания - Преподаватель - Адрес - Группа - ID занятия |
- Статус операции - ID занятия - Код ошибки |
|
Получить список занятий |
/api/lesson_list |
- Статус операции - Список занятий со всеми возможными параметрами |
4.4 Миграции базы данных
После реализации моделей и API для базовых сущностей необходимо синхронизировать код с базой данных. В данном проекте используется PostgreSQL, с которой фреймворк умеет работать без установки дополнительных модулей.
Django использует миграции для переноса изменений в моделях (добавление поля, удаление модели и т.д.) на структуру базы данных. Миграции создавались в основном для автоматической работы и позволяют совершать большинство операция с базой данных через ORM [25].
PostgreSQL дает огромное число возможностей с целью миграции БД. Однако, существует ряд ограничений таких как добавление столбцов со значениями по умолчанию, так как это заставляет перезаписать таблицу и затратить период времени в зависимости от размера. Именно из - за этого рекомендуется добавлять новые столбцы null = True.
Для создания миграций моделей базовых сущностей воспользуемся базовым набором команд Django:
# Создает миграции для моделей всех приложений
python manage.py makemigrations
После этого произойдет сканирование моделей и сравнение с файлами миграции. Далее произойдет обновление старых миграций на новые. Необходимо применить их к БД, с целью проверки работоспособности.
# Синхронизация миграций с версией в базе данных
python manage.py migrate
5. Реализация клиентской составляющей портала
После реализации ядра проекта переходим к клиентской составляющей, для которой будет использоваться библиотека Bootstrap, она существенно упрощает создание web страниц и гарантирует приемлемый уровень адаптивности на мобильных устройствах. Так-как каждая сущность должна быть отражена на Web-портале были разработаны макеты страниц, на основе которых потом будет проводиться верстка и интеграция с серверной составляющей проекта.
4.5 Создание базовых прототипов страниц
Макеты страниц для каждой сущности представляют собой схематичные изображения расположения элементов на Web-странице с описанием основных функциональных особенностей. Далее последовательно приведены макеты основных страниц Web-портала:
Рис. 8 Стартовая страница.
Vertical tabs - это закрепленное меню с основным набором подстраниц, каждый пункт содержит в себе линк на другую страницу. Так как структура сайта иерархическая, то пользователь может из любой страницы перейти на необходимую.
Video player - видео содержащее в себе информацию о цели сайта, возможностях и изменениях в портале и боте.
Text area - контакты для быстрой связи с администраторами.
Рис. 9 О нас.
Button 1 - линк на стартовую страницу
Button 2 - выпадающее меню для доступа на любую страницу сайта
Button 3 - обратная связь
Text box - описание авторов проекта и ключевых возможностях их проекта, перечисление достижение и прямая ссылка на бота.
Line graph - статистика активных пользователей.
Рис. 10 Новостная лента
Rectangle (Rounded) 1,2,3 - краткая аннотация новости и дата события
Pagination - ссылки на предыдущую и последующую страницу
Star ratings - рейтинг новости для дальнейшего анализа
Рис. 11 Telegram - бот.
Image - изображение бота с меню
Link - прямая ссылка на бота
Рис. 12 Расписание.
Tree list - выбор факультета и группы
Data picker - указание выбора дат
Rectangle and Vertical Scrollbar - сетка расписания
Рис. 13 События.
Search box - поиск по новостям
Data picker - дата события
Banner ad - фото события
Text box - описание события
Checkbox - чек-ин похода на событие
Рис. 14 Документы.
Search box - поиск по названию документа
Tree list - выборка по группам
Link и Text box - наиболее актуальные документы (заявления на каинкулы, материальную помощь, парковочное место и т.п.)
Button + Link list - фильтр по разделам и линк лист с подразделами
Рис. 15 Сессия.
Link - ссылка на всю сетку
Text и Button - Номер группы и линк на файл excel
Horizontal scroolbar - ползунок для поиска группы
Image и Text - вводное слово для первокурсников
Рис. 16 Контакты.
Upside button -Share, RSS, Распечатать, Ссылка, Поделиться на фейсбуке, отправить e-mail
Map - карта с указанием главного корпуса
Text - Адрес и номер телефона
4.6 Вёрстка основного набора страниц
Блочная система Bootstrap дает возможность горизонтального разделение страницы на 12 частей. В случае отсутствия необходимости использования всех столбцов их можно группировать [26]. Процентной соотношение на столбец равняется 8.3%.
Позволительно разделять по необходимости страницы и столбцы. Размеры блоков рассчитываются, как часть родительского элемента, поэтому это считается полезной функцией
Рис.17 пример того, как можно разделить страницу при помощи Bootstrap.
span 1 |
span 1 |
span 1 |
span 1 |
span 1 |
span 1 |
span 1 |
span 1 |
span 1 |
span 1 |
span 1 |
span 1 |
|
span 4 |
span 4 |
span 4 |
||||||||||
span 4 |
span 8 |
|||||||||||
span 6 |
span 6 |
|||||||||||
span 12 |
Рис. 17 Работа Bootstrap.
Блочная структура в Bootstrap рассчитана также на мобильные устройства и планшеты. Блоки будут автоматически перестраиваться в зависимости от размера экрана.
Далее перейдем к классам для ячеек, которые являются основным звеном библиотеки и позволяют создавать отзывчивые адаптивные страницы. В блочной верстке Bootstrap есть четыре основных класса:
? xs (extra small) - для мобильных телефонов, до 767 пикс. Включительно
? sm (small) - для планшетов, размер экрана 768-991 пикс.
? md (middle) - для десктопов, 992 - 1199 пикс.
? lg (large) - для больших экранов, от 1200 пикс.
Одно из самых главных достатков Bootstrap является комбинирование классов, с целью создания адаптивной верстки. В дальнейшем можно точно знать отображение макетов при различных размерах экрана.
Ниже дан пример кода для верстик макета, используя блочную систему Bootstrap:
Для начала создайте строку с ячейками: <div class="row"> и далее добавьте в нее нужное количество столбцов с соответствующими классами .col-*-*. [27]
Еще имеется возможность указывать, какой отступ будет у колонки, если вы хотите “отодвинуть” ее вправо. Для этого используйте класс .col-md-offset-*. Такой класс увеличит отступ слева на количество колонок, указанное в *.
Можно указывать, в каком порядке будут отображаться ячейки, при помощи классов .col-md-push-* и .col-md-pull-*.
На основе этого примера можно понять, верстку трех равных колонок, для горизонтального отображения на планшетах и больших экранах. Однако, на мобильных телефонах эта же верстка растянута
Страница разделена на пару колонок, но разной щирины. Отображение идеально на любых устройствах, кроме сотовых:
В этом случае страница будет разделена на две разные колонки на планшетах и больших экранах, а большая колонка в свою очередь будет разделена на две равные колонки. На экранах мобильных телефонов эти колонки будут растягиваться на всю ширину экрана.
Добавляя несколько классов одной и той же ячейке, вы можете добиться полного контроля над отображением верстки на разных размерах экрана.
В этом примере созданы две разные по размеру ячейки, которые на экране телефона займут всю ширину экрана, на планшете будут неравными, а на большом мониторе станут одинаковыми по размеру:
Таким образом можно легко контролировать, как отображать ячейки из шаблона, а вёрстка станет мобильной без дополнительных усилий.
4.7 Настройка синхронизации клиента с API
Для вывода информации из ядра проекта используются асинхронные подгрузки, которые реализуются через технологию AJAX. AJAX - совокупность технологий, появившиеся в момент основания Web. Возможности предоставляемые AJAX:
· Стандартно-базированная презентация с использованием XHTML и CSS;
· Динамическое отображение и взаимодействие с использованием объектной модели документа;
· Взаимообмен данными и манипуляция с задействованием XML и XSLT;
· Асинхронное извлечение данных с использованием XMLHttpRequest;
· JavaScript, связывающий все вместе.
AJAX дает возможность написание веб-приложения с быстрым откликом, исключая необходимость постоянного обновления страницы. Эта технология достаточно проста и поддерживается большинством основных браузеров. Как можно вкратце отметить, единственным предварительным условием для внедрения AJAX является знание JavaScript [28].
В проекте используется метод библиотеки jQuery для запроса к серверу без перезагрузки страницы. Данный метод является низкоуровневым и включает в себя большее число опции с изменениями.
Имеется два варианта использования:
jQuery.ajax(url,[settings]) - стандартная реализация, принимает поля:
1. url - адрес запроса.
2. settings - в этом параметре можно задать настройки для данного запроса. Задается с помощью объекта в формате {имя:значение, имя:значение...}. Ни одна из настроек не является обязательной. Установить настройки по умолчанию можно с помощью метода $.ajaxSetup().
jQuery.ajax(settings) - отличие от предыдущего варианта метода заключается лишь в том, что свойство url здесь является частью настроек, а не отдельным параметром. Мы будем использовать первый вариант с передачей адреса и параметров запроса:
Используя представленный код, можно асинхронно запрашивать любые данные не боясь, что ошибки подгрузки одного массива данных заблокируют другой. Дополнительным плюсом является повышенная интерактивность WEB-страниц.
4.8 Реализация представлений для подготовленных страниц
После верстки страниц и реализации методов получения данных из ядра проекта следует настроить корректный метод вывода страниц пользователю, для этого используются представления Django.
Далее следует описание трех классов. Они обладают большим числом набором функциональности, с целью создания представления Django. Имеется возможность рассмотрения в виде родительского представления, которые можно использовать как непосредственно, так и в наследовании [29].
Множество из встроенных CBV в Django наследуют другие представления-классы или классы-примеси. Это цепочка наследований (и порядок классов) очень важна, поэтому информация о классах-предках находится в разделе Ancestors (MRO). MRO - это акроним для Method Resolution Order.
Самый главный класс в CBV. Все остальные представления-классы наследуются от него.
Далее будут использоваться базовые представления, основной функцией которых это вывод страниц и получения статичных данных. Переход к представлениям выполняется через urls.py где располагается массив описания путей таб. 8:
Таб. 8 Массив описания
Путь |
Описание |
|
/news/list |
Список новостей |
|
/news/list/<page_id> |
Список новостей с указанием страницы, где page_id - номер страницы |
|
/news/<news_id> |
Единичная новость, где news_id - уникальный идентификатор новости |
|
/news/list/search?text=<search_text> |
Список новостей после поиска по заданной фразе, где search_text - поисковой текст |
|
/events/list |
Список событий |
|
/events/list/<page_id> |
Список событий с указанием страницы, где page_id - номер страницы |
|
/events/<event_id> |
Единичная событие, где event_id - уникальный идентификатор новости |
|
/events/list/search?text=<search_text> |
Список событий после поиска по заданной фразе, где search_text - поисковой текст |
|
/professors/ |
Список преподавателей, страничка работает полностью асинхронно |
|
/lessons/ |
Расписание, страничка работает полностью асинхронно |
|
/about/ |
Описание и инструкции по работе с порталом |
5 Реализация контроллера для Telegram - бота
Для взаимодействия с Telegram - ботом нам понадобится программа, которая будет постоянно работать и обрабатывать очередь сообщений. Телеграм складывает все сообщения от пользователя к боту в специальное хранилище и очищает его при запросе данных со стороны сервера Рис. 18.
Рис. 18 Схема взаимодействия
5.5 Создание пустого бота через интерфейс Telegram
Процедура регистрации бота довольна проста. Для начала необходимо найти @BotFather (Рис. 98) и начать с ним беседу. Далее следует отправить команду /newbot и следовать инструкциям. В результате мы получим:
1. Специальный токен бота;
2. Адрес Telegram API (https://api.telegram.org/bot);
3. Ссылку на документацию.
Рис. 19 Botfather
Необходимо заново начать беседу с ботом, выбрать его и ввести команду /start. Далее следует разобраться с тем, что такое API. Перейдя в любой web - браузер и введя в поисковой строке: https://api.telegram.org/bot<ваш_токен>/getUpdates произойдет отправка запроса на сервер Telegram, взамен придет ответ в формате JSON:
После изучения раздела метод /sendmessage в документации, становится понятно, что он принимает всего два параметра: chat_id и text. Вы можете создавать цепочки параметров в адресной строке браузера, используя ? для первого и & для всех последующих. Команда для отправки сообщения будет выглядеть так:
/sendMessage?chat_id=303262877&text=test
В случае если подставить в качестве chat_id значение, полученное после вызова /getUpdates, то получим первый ответ от бота. Запрос выглядит так: https://api.telegram.org/bot<token>/sendMessage?chat_id=303262877&text=Hello
5.6 Реализация обработки базовых типов сообщений от Telegram
Теперь следует написать код, который будет обрабатывать входящие сообщения от бота. Телеграмм умеет сообщать боту о действиях пользователя двумя способами: через ответ на запрос сервера (Long Poll), и через Webhook, когда сервер Телеграмма сам присылает сообщение о том, что кто-то написал боту. Второй способ явно выглядит лучше, но требует выделенного IP-адреса, и установленного SSL на сервере. В этом проекте будет пользоваться Long Poll методом.
Для начала следует импортировать нашу библиотеку и подключить токен бота:
Теперь объявим метод для получения текстовых сообщений:
В этом участке кода объявили слушателя для текстовых сообщений и метод их обработки. Поле content_types может принимать разные значения, и не только одно, например
Будет реагировать на текстовые сообщения, документы и аудио. После получения фиксированного набора сообщений по типам данных можно фильтровать данные и приступать к обработке
# Код обработки сообщения и формирования ответа
Для запуска кода требуется выполнить метод polling у объекта Bot. Скрипт будет висеть фоновым процессом и постоянно обрабатывать пользовательские сообщения от клиентов к боту.
5.7 Обеспечение корректной обработки данных от Telegram
Сообщение от Telegram содержит в себе очень много сервисной информации и метаданных, что позволяет получить всю нужную информацию при наличии необходимых прав. Стандартный набор полей Telegram сообщения включает:
1. message_id (int) - Уникальный идентификатор сообщения в этом чате.
2. from_user (telegram.User, необязательно) - Отправитель, может быть пустым для сообщений, отправляемых на каналы.
3. date (datetime.datetime) - дата, когда сообщение было отправлено в формате Unix. Преобразовано в datetime.datetime.
4. chat (telegram.Chat) - чат, которому принадлежит сообщение.
5. forward_from (telegram.User, необязательно) - для пересылаемых сообщений - отправитель исходного сообщения.
6. forward_from_chat (telegram.Chat, необязательно) - для сообщений, пересылаемых с канала, информация об исходном канале.
7. forward_from_message_id (int, необязательно) - для переадресованных сообщений канала - идентификатор исходного сообщения в канале.
8. forward_date (datetime.datetime, необязательно) - для переадресованных сообщений указывается дата, когда оригинальное сообщение было отправлено во время Unix. Преобразовано в datetime.datetime.
9. reply_to_message (telegram.Message, необязательно) - для ответов оригинальное сообщение. Обратите внимание, что объект Message в этом поле не будет содержать дополнительные поля reply_to_message, даже если он сам является ответом.
10. edit_date (datetime.datetime, необязательно) - дата последнего редактирования сообщения во время Unix. Преобразовано в datetime.datetime.
11. media_group_id (str, необязательно) - уникальный идентификатор группы мультимедийных сообщений, к которой относится это сообщение.
12. text (str, необязательно) - для текстовых сообщений - фактический текст сообщения в формате UTF-8, 0-4096 символов. Также встречается как telegram.constants.MAX_MESSAGE_LENGTH.
13. entity (List [telegram.MessageEntity], необязательно) - для текстовых сообщений в тексте отображаются специальные объекты, такие как имена пользователей, URL-адреса, команды ботов и т. д. См. Методы attr: parse_entity и attr: parse_entities для правильного использования.
14. caption_entities (List [telegram.MessageEntity]) - Необязательно. Для сообщений с подписью. Специальные объекты, такие как имена пользователей, URL-адреса, команды ботов и т. Д., Которые отображаются в подписи. Посмотрите методы Message.parse_caption_entity и parse_caption_entities для того, как правильно использовать.
15. audio (telegram.Audio, необязательно) - Сообщение представляет собой аудиофайл, информацию о файле.
16. document (telegram.Document, не обязательно) - сообщение представляет собой общий файл, информацию о файле.
17. animation (telegram.Animation, необязательно) - сообщение представляет собой анимацию, информацию об анимации. Для обратной совместимости, когда установлено это поле, поле документа также будет установлено.
18. game (telegram.Game, необязательно) - сообщение игры, информация об игре.
19. photo (Список [telegram.PhotoSize], необязательно) - Сообщение представляет собой фотографию, доступны размеры фотографии.
20. sticker (telegram.Sticker, необязательно) - сообщение представляет собой стикер, информация о стикере.
21. video (telegram.Video, опционально) - сообщение представляет собой видео, информацию о видео.
22. voice (telegram.voice, необязательно) - сообщение - это голосовое сообщение, информация о файле.
23. video_note (telegram.VideoNote, необязательно) - Сообщение - это видео-заметка, информация о видео-сообщении.
24. new_chat_members (List [telegram.User], необязательно) - новые участники, которые были добавлены в группу или супергруппу, и информация о них (сам бот может быть одним из этих членов).
25. title (str, необязательно) - заголовок для документа, фото или видео, 0-200 символов.
26. contact (telegram.Contact, необязательно) - сообщение является общим контактом, информация о контакте.
27. location (telegram.Location, необязательно) - сообщение является общим местоположением, информация о местоположении.
28. left_chat_member (telegram.User, необязательно) - участник был удален из группы, информация о нем (этот участник может быть самим ботом).
29. new_chat_title (str, необязательно) - заголовок чата был изменен на это значение.
30. new_chat_photo (List [telegram.PhotoSize], необязательно) - фотография чата была изменена на это значение.
31. delete_chat_photo (bool, необязательно) - служебное сообщение: фотография в чате была удалена.
Обратимся к базовым текстовым сообщениям, из поля text будем получать текст сообщения, поле from_user потребуется для определения пользователя-отправителя, message_id нужно для доставки обратных сообщений и фиксирования состояния последнего сообщения в системе. Примерный код обработки сообщений можно увидеть далее в классе контроллере:
Класс BotController выступает в роли полностью самодостаточного контроллера и имеет набор необходимых методов для реализации поставленных задач, далее представлен список методов с описанием входных параметров Таб. 9.
Таб. 9. Список методов
Название |
Назначение |
Входные параметры |
|
__init__ |
Магический метод для инициализации класса и создания объекта типа Bot |
- Секретный ключ |
|
start |
Запуск боты и инициализация обработчиков |
- Ссылка на функцию-обработчик сообщений |
|
send_message |
Отправить сообщение |
- Id чата - Текст - Список кнопок для меню |
|
send_file_id |
Отправить документ по уникальному идентификатору документа Telegram |
- Id чата - Id документа |
|
send_message_inline |
Отправить инлайн сообщение |
- Id чата - Текст - Список кнопок для меню |
|
send_reply |
Отправить ответ |
- Id сообщения - Текст |
|
load_file |
Загрузить файл из чата |
- Сообщение - Пользователь - Данные документа - Корневой каталог для загрузки |
|
load_file_obj |
Загрузить файл из чата по id объекта |
- Сообщение - Пользователь - Данные документа |
7 Реализация базовых логических цепочек Telegram бота
Для корректной организации навигации по Telegram-боту требуется разработать механизм, который позволит в удобной форме задавать логические цепочки и генерировать ветви диалогов. Для начала стоит определиться с методом хранения этапов диалога и структурой кода, который будет обрабатывать этапы и выполнять переход к следующим.
7.1 Выбор метода хранения структуры логического дерева вопрос-ответ
Диалоговые цепочки удобнее всего представлять в виде дерева, где каждое звено имеет свои данные, заложенный функционал и массив связей, по которому пользователь при общении с ботом может перейти к другим этапам. Для проекта был выбран метод хранения этапов в структуре словаря (dict) python 3 где ключ - id узла, а значение - описание функционала в виде словаря.
Для представленной модели определены следующие функциональные поля таб. 10:
Таб. 10. Функциональные поля
Название |
Описание |
Функция |
|
name |
Название |
Данное поле пользователь видит каждый раз при переходе на узел |
|
func |
Функция обработчик |
При переходе на узел выполняется функция, если данное поле задано в узле. |
|
menu |
Кнопочное меню |
Массив ссылок на узлы для вывода кнопочного меню |
|
final_func |
Конечная функция |
Функция, которая выполняется перед переходом на следующий шаг |
|
fields |
Массив полей для сбора данных |
Каждое поле из набора записывается в специальное хранилище, с которым может взаимодействовать final_func |
|
text |
Текстовое описание поля сбора данных |
Появляется при переходе на этап сбора данных |
|
check |
Функция валидации собираемых данных |
При прохождения этапа сбора данных они валидируются, в случае возникновения ошибки пользователь получит текст из поля error |
|
error |
Текст ошибки валидации |
Данный текст пользователь видит при неуспешном прохождении этапа check |
|
list |
Список заранее собранных вариантов ответа для выбора |
Данное поле содержит функцию, которая может брать данные из базы данных или сторонних ресурсов для предоставления пользователю вариантов выбора |
7.2 Настройка синхронизации с базой данных для хранения сессий пользователя
Некоторые узлы логических цепочек запрашивают информацию из базы данных через ORM Django. Для начала стоит определить, как работать с ORM Django.
Для представления данных таблицы в виде объектов Python, Django использует интуитивно понятную систему: класс модели представляет таблицу, а экземпляр модели - запись в этой таблице. Чтобы создать объект, создайте экземпляр класса модели, указав необходимые поля в аргументах и вызовите метод save() чтобы сохранить его в базе данных.
В результате выполнения этого кода будет создан INSERT SQL-запрос.
Для сохранения изменений в объект, который уже существует в базе данных, используйте save(). В данном примере изменяется название объекта b5 модели Blog и обновляется запись в базе данных:
В результате выполнения этого кода будет создан UPDATE SQL запрос. Django не делает запросов к БД, до момента вызова метода save(). Обновление ForeignKey работает так же, как и сохранение обычных полей; просто назначьте полю объект необходимого типа. В этом примере обновляется атрибут blog модели Entry объектом entry, предполагается что в базе данных уже существуют используемые объекты:
Обновление ManyToManyField работает немного по-другому; используйте метод add() поля, чтобы добавить связанный объект. В этом примере объект joe модели Author добавляется к объекту entry:
Для получения объектов из базы данных, создается QuerySet через Manager модели.
QuerySet дает выборку объектов из БД. Есть два варианта содерждания фильтров, при включении выставляются критерии для ограничения выборки по заданным параметрам. В терминах SQL, QuerySet - это оператор SELECT, а фильтры - условия такие, как WHERE или LIMIT [30].
В модели обязательно находится минимум один Manager с заданным названием objects. Обратиться к нему можно непосредственно через класс модели:
Для получения объектов из таблицы используется метод all() менеджера(Manager):
Основная идея этого метода в возвращении QuerySet всех объектов в БД. QuerySet, возвращенный Manager, описывает все объекты в таблице базы данных. Обычно нужно выбрать только подмножество всех объектов.
Для создания такого подмножества, вы можете изменить QuerySet, добавив условия фильтрации. Два самых простых метода изменить QuerySet - это:
filter(**kwargs)
Возвращает новый QuerySet, который содержит объекты удовлетворяющие параметрам фильтрации.
exclude(**kwargs)
Возвращает новый QuerySet содержащий объекты, которые не удовлетворяют параметрам фильтрации.
Параметры фильтрации (**kwargs в определении функций выше) должны быть в формате, описанном в разделе `Field lookups`_. Например, для создания QuerySet чтобы получить записи с 2006, используйте filter() таким образом:
В рамках проекта используется фильтрация объектов по разным параметрам, что позволяет составлять оптимальные запросы к базе данных.
7.3 Реализация логики этапов
Логическая схема Telegram-бота содержит 4 основные логические цепочки, которые могут работать независимо друг от друга и тесно интегрированы с ядром портала. Основные цепочки:
1. Преподаватели: позволяет получать список преподавателей по факультету, группе или заданному поисковому тексту
2. Новости: выводит список новостей, позволяет фильтровать по дате
3. События: выводит список событий, позволяет фильтровать по дате
4. Расписание: выводит расписание в зависимости от факультета и группы.
Далее схематично описаны оcновные логические цепочки Рис.20:
Рис. 20 Логические цепочки
8 Тестирование
Для обеспечения корректной работы проекта желательно выполнять тестирование, которое позволит выявить проблемные моменты и исправить логические ошибки. Тестирование проекта делится на два раздела:
1. Функциональное тестирование -является частью тестирования, основная цель которого заключается в проверке всех соответствий функциональных требований ПО с действительными характеристиками. Главная задача функционального тестирования является подтверждением того, что разрабатываемое ПО включает в себя функционал, описанный в ТЗ.
2. Ручное тестирование - не менее важная часть тестирования, которая обычно проводится на этапе разработки. В процессе тестирования не используются программные средства. Исполнителями могут быть и простые пользователи, делая репорты на ошибки.
8.1 Функциональное тестирование системы
Django предоставляет фреймворк для создания тестов, построенного на основе иерархии классов, которые, в свою очередь, зависят от стандартной библиотеки Python unittest. Несмотря на название, данный фреймворк подходит и для юнит-, и для интеграционного тестирования. Фреймворк Django добавляет методы API и инструменты, которые помогают тестировать как веб так и, специфическое для Django, поведение. Это позволяет имитировать URL-запросы, добавление тестовых данных, а также проводить проверку выходных данных ваших приложений. Кроме того, Django предоставляет API (LiveServerTestCase) и инструменты для применения различных фреймфорков тестирования, например можно подключить популярный фреймворк Selenium для имитации поведения пользователя в реальном браузере.
Для написания теста должно наследоваться от любого из классов тестирования Django (или юниттеста) (SimpleTestCase, TransactionTestCase, TestCase, LiveServerTestCase), а затем реализоваться отдельные методы проверки кода (тесты это функции-"утверждения", которые проверяют, что результатом выражения являются значения True или False, или что два значения равны и так далее). Когда происходит запуск теста, фреймворк выполняет соответствующие тестовые методы в вашем классе-наследнике. Методы тестирования запускаются независимо друг от друга, начиная с метода настроек и/или завершаясь методом разрушения (tear-down), определенном в классе, как показано ниже.
Самый подходящий базовый класс для большинства тестов это django.test.TestCase. Этот класс создает чистую базу данных перед запуском своих методов, а также запускает каждую функцию тестирования в его собственной транзакции. У данного класса также имеется тестовый Клиент, который вы можете использовать для имитации взаимодействия пользователя с кодом на уровне отображения.
По данному методу было проведено полное тестирование всего функционала проекта, существенных проблем не выявлено.
8.2 Ручное тестирование системы
На сегодняшний день существует два варианта тестирования систем: ручное и автоматизированное. В зависимости от ситуации каждый из способов имеет свои преимущества и недостатки. Можно найти большое число фреймворков для тестирования, подходящих под большинство языков. При автоматизации приходится тратить время на разработку кейсов, изменение и актуализацию под определенную систему. При ручном тестировании можно гораздо быстрее получить всю информацию о готовности продукта и качестве разработки, поэтому в данной главе описываются сценарии ручного тестирования системы.
Первый шаг: смоук - тест - проверка работоспособности системы на запуск
· Портал: переход по URL адресу, отображение главной страницы портала
· Бот: добавление бота в диалоги
Второй шаг: проведение регресс тестов
· Портал:
1. Запуск видеоролика на главной странице
2. Изменение уровня громкости
3. Переход на страницу о нас
4. Проверка корректности отображения текста, информации о авторах и графика с активными участниками проекта
5. Переход на страницу Telegram - бота
6. Переход по внешней ссылке
7. Переход на страницу новостей
8. Корректное отображение всех новостей
9. Переход на единичную новость
10. Учет рейтинга после обновления страницы
11. Корректное отображение даты
12. Переход на страницу с расписанием
13. Выбор факультета и группы
14. Корректность вводимых дат (не более 31, отрицательные и дробные числа)
15. Совпадение информации с официальным источником ruz.hse.ru
16. Переход на страницу события
17. Выбор единичного события и проверка на корректность текста
18. Возврат к ленте событий
19. Работа поиска по событиям
20. Учет чек бокса
21. Переход на страницу сессия
22. Работа линка общей сетки расписания
23. Работа скроллбара
24. Работа перехода к скачиванию файла Excel
25. Переход на страницу контакты
26. Проверка работоспособности верхнего ряда переходов и действий
27. Корректность отображения адреса, телефона и расположения на карте
Бот:
1. Добавление бота в общие диалоги
2. Старт общения, приветственное меню
3. Переход к расписанию
4. Выбор факультета и группы
5. Проверка корректности отображения с официальным источником
6. Вызов меню, переход в раздел новости
7. Корректность отображения общей ленты новостей
8. Выбор единичной новости, корректность текста
9. Вызов меню и переход к разделу события
10. Проверка ленты событий
11. Выбор единичного события
12. Переход к разделу обратная связь
13. Корректное отображение карты, адреса и телефона
· Третий шаг: тестирование финальной сборки
Произведен отбор 5 участников, которые произвели тестирование системы, дали оценку порталу и боту, а также оставили общее мнение о работе системы представленном на Рис.21
Рис. 21 Статистика ошибок
После проведения тестирования были выявлены не критичные ошибки, которые были проанализированы и доработаны. Все ошибки учтены, система работает исправно.
1. Результаты
Стартовая страница информационного портала с URL - адресом рис.22:
Рис. 22 Стартовая страницы
Раздел - События рис.23
Рис. 23 События
Раздел- Новости рис. 24
Рис. 24 Новости
Сетка с расписанием рис.25
Рис. 25 Расписание
После добавления бота в контакты, появляется стартовая страница. Следует выбрать пункт “Начать” рис.26. Содержится 4 основных раздела: Расписание, Новости, Мероприятия, Нормативные документы.
Рис. 26 Начало работы с ботом
Выбор раздела Расписание рис.27:
Рис. 27 Диалоговая форма
Выбор раздела Мероприятия рис.28:
Рис. 28 Мероприятия в боте
Выбор раздела Нормативные документы рис.29
Рис. 29 Нормативные документы
Разделение обязанностей
Одним из достаточно важных аспектов проекта был аспект разделения обязанностей, список задач каждого участника должен был в полной мере соответствовать его квалификации и нормально переплетаться с набором задач других участников проекта. В проекте фигурируют два участника с определенным списком задач:
Квалификация |
Возможности |
Задачи |
|
Python developer (Черкасов В.А.) |
· Опыт проектирования и разработки сложных высоконагруженных систем; · Отличные знания Python 3.6, Flask, MySQL; · Отличные знания общих вопросов программирования: шаблоны проектирования, структуры данных, алгоритмы; |
· Разработка контроллера для Telegram бота · Разработка логических цепочек для Telegram бота · Реализация логики работы с данными для Telegram бота · Разработка основы Telegram бота |
|
Full Stack Web-разработчик (Гугаев М.В.) |
· Опыт разработки на Python/Django; · Опыт разработки под UNIX (Linux); · Опыт веб-разработки (html, css, javascript); · Знание MySQL или другой реляционной базы данных; · Опыт работы с системами контроля версий (git); |
· Разработка Ядра проекта · Разработка API для интеграции · Разработка клиентской составляющей портала |
Все задачи тесно переплетаются друг с другом, но параллельно с этим позволяют заниматься ими независимо, не тратя время на постоянную синхронизацию кода. Для корректного взаимодействия в команде использовался трекер задач Trello и система контроля версий git, где участники проекта вели две отдельные ветки.
В результате совместной работы был разработан web-портал, ядро проекта и Telegram бот. Все составляющие проекта имеют заложенный потенциал к масштабированию и гибкому редактированию функционала.
Заключение
Несомненно, развитие в области информационных технологий в нынешнее время имеет большую значимость, так как благодаря этому, улучшается качество и скорость получения информации в рамках образовательной деятельности. Вследствие этого, разрабатываемая совокупная система, состоящая из портала и Telegram - бота, это большой шаг в методе получения информации студентами. Актуальность на данный момент обосновывается отсутствием на рынке официальных источников данного инструмента получения знаний.
Созданная система на основе мессенджера Telegram позволит оперативно и удобно использовать в любом месте нахождения студента. Для стационарного использования пользователь всегда может обратиться к порталу, на базе которого реализованы аналогичные функции. Разработанная система:
? Выстраивает цепочку вопросов - ответ для достижения необходимой информации по образовательной деятельности;
? Предоставляет возможность просмотра актуальных новостей, выбор единичной новости, по аналогии события;
? Позволяет интегрироваться сторонним ресурсам для актуализации информации;
? Дает возможность гибкого редактирования данных через продвинутую панель управления.
Дальнейшее развитие проекта возможно при расширении существующей функциональности Telegram - бота, а именно увеличение количества команд, набора цепочек вопрос - ответ и т. д.
Список литературы
1. Сайт Wikipedia [Электронный ресурс] URL: http://ru.wikipedia.ru/wiki/Telegram/ (Дата обращения: 10.01.2019).
2. Сайт Wikipedia [Электронный ресурс] URL: https://ru.wikipedia.org/wiki/Django (Дата обращения: 15.01.2019).
3. Сайт Telegram [Электронный ресурс], URL: https://telegram.org/ (Дата обращения: 15.01.2019).
4. Сайт Spark [Электронный ресурс], URL: https://spark.ru/startup/marketing-up/blog/37152/nash-opit-reklami-telegram-kanala (Дата обращения: 16.01.2019).
5. Сайт Github [Электронный ресурс], URL: https://groosha.gitbooks.io/telegram-bot-lessons/content/ (Дата обращения: 29.01.2019).
6. Сайт НИУ ВШЭ [Электронный ресурс], URL: https://hse.ru/ (Дата обращения: 29.01.2019).
7. Сайт Microsoft [Электронный ресурс], URLhttps://support.microsoft.com/ru-ru/help/815065/what-is-a-dll (Дата обращения: 1.02.2019).
8. Сайт Habr [Электронный ресурс], URL: https://habr.com/ru/post/347106/ (Дата обращения: 2.02.2019).
9. Сайт ФруктКод [Электронный ресурс], URL: https://fructcode.com/ru/blog/features-of-popular-frameworks-html-css-php-and-python-frameworks/ (Дата обращения: 2.02.2019).
10. Сайт Meduza [Электронный ресурс], URL: https://meduza.io/cards/chto-takoe-ssl-sertifikat /(Дата обращения: 17.02.2019).
11. Сайт DefPython [Электронный ресурс], https://defpython.ru/pattern_MVC__obyasnenie_na_primere_lego (Дата обращения: 17.02.2019).
12. Сайт Xakep [Электронный ресурс] URL: https://xakep.ru/2016/09/28/ios-from-scratch/ (Дата обращения: 20.02.2019).
13. Сайт Qaru [Электронный ресурс], URL: http://qaru.site/questions/16161373/django-21-creating-the-correct-path-url-for-primary-keys (Дата обращения: 01.03.2019).
14. Сайт SwiftBook [Электронный ресурс], URL: https://habr.com/ru/post/149594/ (Дата обращения: 05.03.2019).
15. Сайт Netology [Электронный ресурс], URL: https://netology.ru/blog/prg-tg (Дата обращения: 15.03.2019).
16. Сайт Toster [Электронный ресурс], URL: https://toster.ru/q/588317: 15.03.2019).
17. Документация Django[Электронный ресурс], URL: https://djbook.ru/rel1.9/ (Дата обращения: 16.03.2019).
18. А. Васильев: Python на примерах. Практический курс по программированию., 2017 -202-207 с.
19. Д.Златопольский, Основы программирования на языке Python, 2017 -71 с.
20. Красиков И., Искусство программирования, 2017 - с. 99.
21. Хариссон М., Как устроен Python. Гид для разработчиков, программистов и интересующихся, - 2019 -с. 51.
22. Форсье Дж., Биссекс П., Чан У., Django. веб-разработка приложений на Python., 2009 -145 с.
23. Bill Lubanovich, Introducing Python: Modern Computing in Simple Packages. - 2019 - С. 12.
24. Luchanio Romalo, Fluent Python, 2016 - c.83.
25. Robert C. Martin Clean Code: A Handbook of Agile Software Craftsmanship 1st Edition. - 2005 - С. 40.
26. Aratyn Tom, Building Django 2. 0 Web Applications: Create Enterprise_Grade., 2018 - c.55
27. Conrad Eric, Eleventh Hour CISSP®: Study Guide 3rd Edition., 2012 - c.73-74
28. Eric Matthes, Python Crash Course. - 2015 - С. 22-23.
29. Anthony Scopatz, Kathryn D. Huff, Effective Computation in Physics: Field Guide to Research with Python., 2015 - c.120.
30. Daniel Rubio, Beginning Django: Web Application. - 2017 - С. 10.
Размещено на Allbest.ru
...Подобные документы
Недоліки та переваги при використанні телеграм ботів. Оцінка очікуваного ефекту від впровадження системи автоматизації. Стек технологій який використовувався при розробці чат-бота. Реалізація системи обліку клієнтів та замовлень онлайн магазину.
дипломная работа [7,2 M], добавлен 27.05.2023Компьютерные сети, основанные на равноправии участников. Этапы работы пиринговых сетей. Настройка сервера PtokaX. Возможности бота HUBBABOT, лингвистический фильтр и система ограничений. Папки и файлы бота, его команды. Расшифровка системных настроек.
лабораторная работа [547,6 K], добавлен 08.12.2011Понятие портала как Intranet системы. Технологии функционирования Web-портала. Особенности и функции портала учебного заведения. Использование Web-портала в учебном процессе. Структура образовательного Intranet/Internet-портала школы № 24 г.Нефтеюганска.
дипломная работа [3,0 M], добавлен 02.05.2012Разработка информационной системы для хранения информации о результатах экзаменов студентов. Описание сервисов, разработка логической и физической модели системы. Выбор системы хранения данных. Схема работы сервиса, принципы безопасности доступа.
курсовая работа [560,6 K], добавлен 09.09.2012Создание базы данных для хранения информации о пользователях системы. Применение механизма аутентификации и управления сессиями. Описание программных мер, предпринятых для обеспечения безопасности информационных ресурсов образовательного веб-портала.
дипломная работа [2,2 M], добавлен 27.06.2012Определение понятия и общее описание базы данных как упорядоченной информационной системы на носителе информации. Описание предметной области и разработка приложения базы данных, содержащей информацию о расписании занятий, для преподавателей кафедры.
курсовая работа [1,3 M], добавлен 08.08.2012Проектирование системы информационной поддержки рекламного агентства. Технико-экономический анализ и характеристика деятельности предприятия ООО "Артмосфера". Основные проблемы фирмы, подлежащие решению с помощью современных информационных технологий.
дипломная работа [1,8 M], добавлен 05.12.2011Виды и источники атак на информацию. Обзор распространенных методов "взлома". Атакуемые сетевые компоненты. Разработка технологии защиты банковской компьютерной сети. Разработка алгоритма программы контроля доступа пользователей к банковской сети.
дипломная работа [542,3 K], добавлен 06.06.2010Разработка и внедрение автоматизированной информационной системы. Изучение основных процессов, протекающих в предметной области. Создание базы данных. Исследование средств защиты информации от несанкционированного доступа и идентификации пользователей.
курсовая работа [487,2 K], добавлен 17.03.2014Создание единой информационной сети, позволяющей эффективно хранить, обрабатывать, анализировать и использовать информацию по учету успеваемости студентов. Основные функции и формы созданной информационной системы. Экономическое обоснование проекта.
дипломная работа [1,5 M], добавлен 20.10.2013Пути несанкционированного доступа, классификация способов и средств защиты информации. Каналы утечки информации. Основные направления защиты информации в СУП. Меры непосредственной защиты ПЭВМ. Анализ защищенности узлов локальной сети "Стройпроект".
дипломная работа [1,4 M], добавлен 05.06.2011Разработка базы данных информационной системы предприятия. Хранение информации о проведенных мероприятиях, его стоимости, дате и месте проведения. Использование программного продукта Microsoft SQL Server 2008 R2. Формирование информационных запросов.
дипломная работа [508,9 K], добавлен 21.02.2016Исследование методов и способов разработки информационных систем. Автоматизация деятельности продовольственного магазина. Проектирование логической схемы информационной системы. Разработка модели базы данных и структуры вычислительно-локальной сети.
курсовая работа [389,2 K], добавлен 16.03.2017Обучающие компьютерные игры, их роль и место в учебном процессе. Разработка рекомендаций по теме "Алгоритмы" в школьном курсе информатики. Анализ игровых программ учебного назначения. Развитие информационной культуры и внимательности учащихся на уроке.
дипломная работа [988,6 K], добавлен 18.11.2014Разработка автоматизированной информационной системы для учета и контроля выполнения ремонтных работ, и предоставления услуг по разработке программного обеспечения компании "МегионСофтОйл", разработка алгоритмов приложений программной системы и модулей.
дипломная работа [5,3 M], добавлен 29.06.2012Анализ программных средств несанкционированного доступа к информации в сетях ЭВМ и способов защиты. Возможности операционных систем по защите и разграничению доступа к информации и выбор самой защищенной. Планирование сети штаба объединения ВВС и ПВО.
дипломная работа [1,0 M], добавлен 14.09.2010Обоснование необходимости создания информационной системы, которая позволяет пользователю получить информацию об экономических новостях Евросоюза. Физическое проектирование базы данных. Описание интерфейса и характеристика инсталляционного пакета.
курсовая работа [1,3 M], добавлен 17.08.2015Сущностное содержание процесса проектирования электронных образовательных ресурсов; информационно-коммуникационные технологии. Инструментальные средства формирования моделей использования ЭОР и обеспечения информационной безопасности в учебном процессе.
курсовая работа [2,7 M], добавлен 10.06.2014Рассмотрение основ формирования инструмента аналитики, ведения учета и предоставления клиентам доступа к информации о наличии автозапчастей одной из тюменских компаний, занимающихся авторазбором. Описаны выявленных проблемы, а также путей их решения.
дипломная работа [4,3 M], добавлен 07.07.2015Разработка базы данных для информационной поддержки деятельности аптеки с целью автоматизированного ведения данных о лекарствах аптеки. Проектирование схемы базы данных с помощью средства разработки структуры базы данных Microsoft SQL Server 2008.
курсовая работа [3,6 M], добавлен 18.06.2012