Skip to content

Nitro-12/PTLab2

 
 

Folders and files

NameName
Last commit message
Last commit date

Latest commit

 

History

23 Commits
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 

Repository files navigation

Лабораторная работа №2 по дисциплине "Технологии программирования и ИСРСИИ"

Выполнил студент группы САПР-1.4: Качурин Никита

Цели работы:

  1. Изучить модель MVC, её сущность и основные фреймворки, созданные на её основе.
  2. Понять функциональное назначение основных компонентов MVC: модель, контроллер, представление.
  3. Получить практические навыки разработки веб-приложений с использованием MVC-фреймворков.

Постановка задач индивидуального задания:

  1. Выбрать тип лицензии для проекта и добавить её в репозиторий.
  2. Доработать проект магазина, добавив в него новые функции и данные в БД согласно варианту. Разработать модульные тесты для максимального покрытия кода. Создать ветку разработки и после завершения и успешного прохождения всех тестов объединить её с основной.
  3. Сделать анализ полученных результатов и сформировать выводы.

Вариант №6

Индивидуальное задание

  • Тип магазина: Магазин компьютеров
  • Функциональность: Покупатель может ввести промокод, который открывает доступ к дополнительным товарам. У магазина есть несколько промокодов, каждый из которых влияет на доступность определённых товаров.

Описание проекта

Проект представляет собой веб-приложение магазина, в котором покупатели могут использовать промокоды для доступа к дополнительным товарам. Приложение разработано с использованием Django и развернуто на Render.

Используемые технологии

  • Язык программирования: Python 3.8
  • Фреймворк: Django
  • Интерфейс: HTML, Bootstrap 5.0
  • База данных: PostgreSQL (Version 17)
  • Хостинг: Render
  • Утилиты и библиотеки:
    • psycopg2 — для работы с PostgreSQL.
    • dj-database-url — для парсинга строки подключения к БД.
    • gunicorn — WSGI-сервер для запуска приложения.
    • whitenoise — для обслуживания статических файлов.
    • pytz — для работы с временными зонами.
    • pyyaml — для работы с YAML файлами.

ERD-диаграмма БД

image

Структура базы данных магазина

Таблицы

1. Таблица shop_product

Таблица shop_product хранит информацию обо всех товарах, доступных в магазине.

  • id (bigint, PRIMARY KEY, IDENTITY): Уникальный идентификатор продукта.
  • name (character varying(200)): Название продукта.
  • price (integer): Цена продукта.

2. Таблица shop_promocode

Таблица shop_promocode содержит информацию о доступных промокодах, которые можно применить для скидок на товары.

  • id (bigint, PRIMARY KEY, IDENTITY): Уникальный идентификатор промокода.
  • code (character varying(50)): Код промокода.
  • description (text): Описание промокода.

3. Таблица shop_purchase

Таблица shop_purchase хранит данные о совершённых покупках, включая имя покупателя, адрес доставки, дату покупки и товар.

  • id (bigint, PRIMARY KEY, IDENTITY): Уникальный идентификатор покупки.
  • person (character varying(200)): Имя покупателя.
  • address (character varying(200)): Адрес доставки.
  • date (timestamp with time zone): Дата и время покупки.
  • product_id (bigint, FOREIGN KEY): Ссылка на идентификатор продукта из таблицы shop_product, указывающая, какой товар был куплен.

4. Таблица shop_product_promo_codes

Таблица shop_product_promo_codes представляет собой связующую таблицу для реализации связи "многие ко многим" между таблицами shop_product и shop_promocode. Она связывает продукты с промокодами, которые можно к ним применить.

  • id (bigint, PRIMARY KEY, IDENTITY): Уникальный идентификатор связи.
  • product_id (bigint, FOREIGN KEY): Ссылка на идентификатор продукта из таблицы shop_product.
  • promocode_id (bigint, FOREIGN KEY): Ссылка на идентификатор промокода из таблицы shop_promocode.

Связи между таблицами

  • shop_product и shop_promocode находятся в отношении "многие ко многим" (many-to-many). Один продукт может иметь несколько промокодов, и один промокод может применяться к нескольким продуктам. Связь осуществляется через таблицу shop_product_promo_codes.
  • shop_product и shop_purchase находятся в отношении "один ко многим" (one-to-many), где один продукт может быть связан с несколькими покупками.

Развёртывание на платформе Render

Render — это платформа для развертывания веб-приложений, позволяющая хостить проекты в облаке.

Шаги для развёртывания

  1. Зарегистрировался на Render и войдите в свой аккаунт.
  2. Перейдите на главную панель и нажмите кнопку NewWeb Service, чтобы создать новый веб-сервис.
  3. Подключил свой репозиторий GitHub, выбрал проект PTLab2.
  4. Заполнил поля настройки сервиса:
    • Name: ввел название сервиса.
    • Environment: выбрал Python 3.
    • Build Command: указал команду для установки зависимостей для установки зависимостей:
  5. Настройте переменные окружения:
    • Перейдите на вкладку Environment в настройках сервиса.
    • Добавьте необходимые переменные среды:
      DEBUG=False
      SECRET_KEY=your-production-secret-key
      DATABASE_URL=postgresql://username:password@host/db_name
      
  6. Render предоставляет бесплатный план для небольших приложений.
  7. Нажал кнопку Create Web Service — Render начал сборку и развертывание проекта.
  8. После завершения развертывания получил ссылку на веб-приложение Приложение.

Вывод

В результате лабораторной работы был разработан интернет-магазин на основе фреймворка Django с использованием MVT-архитектуры. Были добавлены функции работы с промокодами и выполнена настройка базы данных PostgreSQL. Разработаны и успешно пройдены модульные тесты, что подтвердило корректность реализации и стабильность работы приложения. Получены практические навыки создания и тестирования веб-приложений.

Лабораторная работа №3 по дисциплине "Технологии программирования и ИСРСИИ"

Постановка задачи:

Написать юнит-тесты к проекту, разработанному в рамках лабораторной работы № 2.

Цели:

Освоение модульного тестирования приложений.

Индивидуальное задание:

Написание юнит-тестов к проекту, разработанному в рамках лабораторной работы № 2.

Краткое описание проекта:

Разработанное веб-приложение во лабораторной работы № 2 позволяет осуществлять модульное тестирование методов контроллера и представления.

Были разработаны тесты

Тесты моделей

Product

  • Проверка типов и значений полей:
    • name: строковое поле, содержит название товара.
    • price: числовое поле, содержит цену товара.
  • Цель тестов — убедиться, что поля заполнены корректно и соответствуют ожидаемым типам данных.

PromoCode

  • Проверка уникальности и связи промокодов с товарами:
    • code: уникальное строковое поле, хранит код промокода.
    • description: текстовое поле для описания промокода, может быть пустым.
  • Тестирование правильного отображения привязанных к промокоду товаров при его применении.

Purchase

  • Проверка корректности типов и значений полей, а также связей:
    • person: строковое поле, указывает имя покупателя.
    • address: строковое поле, содержит адрес доставки.
    • date: дата покупки, добавляется при создании записи.
    • Связь покупки с товаром — проверка корректности привязки к выбранному товару.

Тесты представлений (Views)

IndexView

  • Проверка главной страницы:
    • Тест на доступность страницы и отображение всех товаров из базы данных.
  • Промокоды:
    • Ввод корректного промокода: отображение дополнительных товаров и сообщение о его применении.
    • Ввод некорректного промокода: отображение сообщения об ошибке и отсутствие дополнительных товаров.

PurchaseCreateView

  • Тесты для формы покупки:
    • GET-запрос: проверка доступности формы для покупки.
    • POST-запрос:
      • Проверка успешного создания покупки с заполнением полей.
      • Проверка отображения сообщения о покупке, содержащего имя покупателя.

Используемые языки / библиотеки / технологии

  • Язык проекта - Python 3.8

  • Технологии для интерфейса пользователя: HTML, Bootstrap 5.0.

  • Используемые технологии: Git.

  • База данных: PostgreSQL (Version 17).

  • Дополнительные инструменты:

    • django - Основной фреймворк для разработки веб-приложений.
    • psycopg2 - Библиотека для подключения и работы с базой данных PostgreSQL.
    • dj-database-url - Утилита для парсинга строки подключения к базе данных.
    • gunicorn - WSGI сервер для запуска Django-приложений.
    • whitenoise - Библиотека для обслуживания статических файлов.
    • pytz - Библиотека для работы с временными зонами.
    • sqlparse - Библиотека для парсинга SQL-запросов.
    • pyyaml - Библиотека для работы с YAML файлами.
  • Технологии:

    • Django ORM — работа с данными в базе данных через модели и запросы.
    • Django Test Framework — тестирование запросов к базе данных, включая создание, извлечение и проверку данных.

Выполнение тестов

image

Выводы

Были разработаны юнит-тесты для проекта из лабораторной работы № 2. Тесты охватывают основные функциональности приложения (работу с моделями и представлениями). Все тесты были успешно пройдены, что подтверждает корректность реализации функционала и позволяет убедиться в стабильности работы приложения.

About

Лабораторная работа №2 по дисциплине "Технологии программирования и ИСРСИИ"

Resources

License

Stars

0 stars

Watchers

0 watching

Forks

Releases

No releases published

Packages

 
 
 

Contributors

Languages

  • Python 78.6%
  • HTML 21.4%