(c) Larry Ewing, Simon Budig, Garrett LeSage
с 1994 г.

Кафедра Информатики и Математического Обеспечения

ПетрГУ | ИМиИТ | О кафедре | Проекты | Лаборатория ИТС | Семинары НФИ/AMICT
Сотрудники | Учебный процесс | Табель-календарь | Курсовые и выпускные работы
Вычислительные ресурсы | Публикации | Архив новостей | Контактная информация

Архитектура и шаблоны проектирования Web-систем

2020/21 учебный год, Институт математики и информационных технологий, весенний семестр.

Специальности:

  • 09.03.04 Программная инженерия (бакалавр, 4 год обучения)

Лектор: К. А. Кулаков

Руководители практик: К. А. Кулаков

Лекции

  • Веб как программная платформа
  • Проблемы взаимодействия в Веб. Протокол HTTP
  • Архитектура Веб-сервера и его взаимодействие с веб-приложениями
  • Веб-приложения и фреймворки. Основные подходы к разработке веб-приложений. Преимущества разработки на основе фреймворков
  • Технология разработки веб-приложений
  • Информационная безопасность веб-приложений
  • Авторизации и аутенификации в веб-приложении

Задания

Для выполнения заданий предлагается использовать простой веб-фреймворк Flask. Другой фреймворк можно использовать после согласования с преподавателем.
  • Задание 1. Минимальное приложение

    Реализовать (или использовать пример) и проверить работу приложения, возвращающего текст "Hello, World!" в ответ на GET-запрос с путем /.

  • Задание 2. Работа с запросом
    1. Модифицировать минимальное веб-приложение таким образом, чтобы по запросу к его корневому ресурсу с заданным параметром name (например, /?name=Alexander) оно возвращало HTML-документ с приветствием «Hello, <значение параметра name>».
    2. Создать веб-приложение, реализующее работу с ресурсом /, отражающим список людей следующим образом. Запрос к ресурсу с помощью метода POST с заданным параметром name позволяет добавлять в комнату человека с именем name. GET-запрос к ресурсу возвращает:
      1. строку «The room is full of people who care…» в случае, если комната пуста;
      2. строку «There are <список имен> in the room», причем список имен представляет собой строку <Имя1>, <Имя2>, … and <ИмяN>. При этом, для случая, когда в комнате только один человек должен использоваться вспомогательный глагол «is».

    При реализации веб-приложения на языке Python для хранения состояния комнаты объявите в модуле переменную встроенного типа list (больше примеров работы со списками в Python).

    Для того, чтобы выполнить запрос типа POST можно воспользоваться утилитой curl:

    $ curl -X POST <имя сервера>/?name=Alexander
    
    С той же целью можно использовать режим разработки браузера, например для браузера Firefox: сначала записать запрос в строке браузера (по-умолчанию будет отправлен запрос типа GET) нажать F12, затем выбрать вкладку сеть, выбрать предыдущий запрос, нажать на кнопку «Изменить и снова отправить», указать в качестве метода «POST», нажать кнопку «Отправить».

  • Задание 3. Работа с несколькими ресурсами
    1. Создать веб-приложение, позволяющее создавать коробки. Приложение должно предоставлять доступ к следующим ресурсам:
      • / — простая веб-страница с кратким описанием приложения, которая в том числе содержит информацию о том, сколько коробок уже создано и гипер-ссылкой на ресурс /boxes.
      • /boxes — при запросе POST с параметрами color и name создается новая коробка, помеченная заданным цветом и названием, причем цвет может быть только одним из следующего списка: red, green, blue, yellow, magenta.

        В случае, если в запросе передан неверный цвет или коробка с таким цветом или именем уже создана, приложение должно вернуть веб-страницу, содержащую сообщение об ошибке, а также текущий список коробок.

        В случае, если коробка успешно создана, приложение должно вернуть страницу с «радостным» сообщением и также вывести текущий список коробок.

        Запрос GET к данному ресурсу должен вывести список коробок.

        При выводе списка коробок каждая строка должна содержать имя коробки, выделенное соответствующим цветом (напоминание: при задании CSS-стиля элемента можно использовать символьные имена цветов, например background: yellow;).

    2. Модифицировать предыдущее приложение таким образом, чтобы в каждую коробку можно было поместить некоторый предмет. Ресурсы приложения должны обслуживаться следующим образом:

      • /boxes/<имя коробки> — при запросе к этому ресурсу с помощью метода POST и с переданным параметром name в коробку с заданным именем должен помещаться предмет с названием name. Если коробки с заданным именем не существует, приложение должно вернуть ответ с кодом 404 и сообщением об ошибке. В случае успешного выполнения запроса приложение должно вернуть обновленный список вещей в заданной коробке.

        Запрос GET к данному ресурсу должен выводить список вещей в коробке или ошибку со статусом 404 в случае, если заданной коробки не существует.

        Страница со списком вещей в коробке должна иметь фоновый цвет, соответствующий метке коробки, а также должна иметь заголовок с именем коробки. В случае, если какая-то вещь встречается в коробке несколько раз, в списке она не должна повторяться, но рядом с этой вещью в скобках должно быть указано количество таких вещей.

      • /boxes — модифицируйте список коробок из предыдущего задания таким образом, чтобы каждый элемент являлся ссылкой на соответствующую коробку.
    3. Добавьте к веб-страницам, содержащим список коробок и список вещей в коробке HTML-форму, позволяющую обновить соответствующий список.

    При реализации веб-приложения на языке Python для хранения списка коробок с их атрибутами, а также содержимого коробок, можно воспользоваться встроенной в язык структурой данных «словарь» — dict.

  • Задание 4. Аутентификация и сеансы

    Добавить поддержку аутентификации пользователей (форма для ввода логина и пароля) в приложение из задания 3. Можно поместить несколько имен пользователей с соответствующими паролями непосредственно в код, регистрация и хранение учетных записей в базе данных не требуется.

    Для каждой коробки запоминать, кто ее создал. Все могут просматривать, но только владелец коробки может изменять ее содержимое.

    Для сопоставления запросов с авторизованными пользователями следует использовать сеансы (sessions).

  • Задание 5. Постоянное хранение данных

    Для приложения из задания 4 обеспечить сохранение состояния (коробки, их содержимое и владельцы) так, чтобы оно не терялось при перезапуске приложения. Рекомендуется использовать встраиваемую СУБД SQLite (использование в Flask).

Литература

  • Богданов, М.Р. Разработка клиентских приложений Web-сайтов : курс / М.Р. Богданов. - Москва : Интернет-Университет Информационных Технологий, 2010. - 228 с. : ил. ; То же [Электронный ресурс]. - URL: http://biblioclub.ru/index.php?page=book&id=233745
  • R. Fielding. Hypertext Transfer Protocol (HTTP/1.1): Message Syntax and Routing / R. Fielding, J. Reschke. Internet Requests for Comments. Internet Engineering Task Force, 2014. URL: https://tools.ietf.org/html/rfc7230
  • M. Belshe. Hypertext Transfer Protocol Version 2 (HTTP/2) / M. Belshe, R. Peon, M. Thomson. Internet Requests for Comments. Internet Engineering Task Force, 2015. URL: https://tools.ietf.org/html/rfc7540

Ссылки