- Изучить модель MVC, её сущность и основные фреймворки, созданные на её основе.
- Понять функциональное назначение основных компонентов MVC: модель, контроллер, представление.
- Получить практические навыки разработки веб-приложений с использованием MVC-фреймворков.
- Выбрать тип лицензии для проекта и добавить её в репозиторий.
- Доработать проект магазина, добавив в него новые функции и данные в БД согласно варианту. Разработать модульные тесты для максимального покрытия кода. Создать ветку разработки и после завершения и успешного прохождения всех тестов объединить её с основной.
- Сделать анализ полученных результатов и сформировать выводы.
- Тип магазина: Магазин компьютеров
- Функциональность: Покупатель может ввести промокод, который открывает доступ к дополнительным товарам. У магазина есть несколько промокодов, каждый из которых влияет на доступность определённых товаров.
Проект представляет собой веб-приложение магазина, в котором покупатели могут использовать промокоды для доступа к дополнительным товарам. Приложение разработано с использованием 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 файлами.
Таблица shop_product хранит информацию обо всех товарах, доступных в магазине.
- id (bigint, PRIMARY KEY, IDENTITY): Уникальный идентификатор продукта.
- name (character varying(200)): Название продукта.
- price (integer): Цена продукта.
Таблица shop_promocode содержит информацию о доступных промокодах, которые можно применить для скидок на товары.
- id (bigint, PRIMARY KEY, IDENTITY): Уникальный идентификатор промокода.
- code (character varying(50)): Код промокода.
- description (text): Описание промокода.
Таблица 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, указывающая, какой товар был куплен.
Таблица 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 и войдите в свой аккаунт.
- Перейдите на главную панель и нажмите кнопку New → Web Service, чтобы создать новый веб-сервис.
- Подключил свой репозиторий GitHub, выбрал проект
PTLab2. - Заполнил поля настройки сервиса:
- Name: ввел название сервиса.
- Environment: выбрал
Python 3. - Build Command: указал команду для установки зависимостей для установки зависимостей:
- Настройте переменные окружения:
- Перейдите на вкладку Environment в настройках сервиса.
- Добавьте необходимые переменные среды:
DEBUG=False SECRET_KEY=your-production-secret-key DATABASE_URL=postgresql://username:password@host/db_name
- Render предоставляет бесплатный план для небольших приложений.
- Нажал кнопку Create Web Service — Render начал сборку и развертывание проекта.
- После завершения развертывания получил ссылку на веб-приложение Приложение.
В результате лабораторной работы был разработан интернет-магазин на основе фреймворка Django с использованием MVT-архитектуры. Были добавлены функции работы с промокодами и выполнена настройка базы данных PostgreSQL. Разработаны и успешно пройдены модульные тесты, что подтвердило корректность реализации и стабильность работы приложения. Получены практические навыки создания и тестирования веб-приложений.
Написать юнит-тесты к проекту, разработанному в рамках лабораторной работы № 2.
Освоение модульного тестирования приложений.
Написание юнит-тестов к проекту, разработанному в рамках лабораторной работы № 2.
Разработанное веб-приложение во лабораторной работы № 2 позволяет осуществлять модульное тестирование методов контроллера и представления.
- Проверка типов и значений полей:
name: строковое поле, содержит название товара.price: числовое поле, содержит цену товара.
- Цель тестов — убедиться, что поля заполнены корректно и соответствуют ожидаемым типам данных.
- Проверка уникальности и связи промокодов с товарами:
code: уникальное строковое поле, хранит код промокода.description: текстовое поле для описания промокода, может быть пустым.
- Тестирование правильного отображения привязанных к промокоду товаров при его применении.
- Проверка корректности типов и значений полей, а также связей:
person: строковое поле, указывает имя покупателя.address: строковое поле, содержит адрес доставки.date: дата покупки, добавляется при создании записи.- Связь покупки с товаром — проверка корректности привязки к выбранному товару.
- Проверка главной страницы:
- Тест на доступность страницы и отображение всех товаров из базы данных.
- Промокоды:
- Ввод корректного промокода: отображение дополнительных товаров и сообщение о его применении.
- Ввод некорректного промокода: отображение сообщения об ошибке и отсутствие дополнительных товаров.
- Тесты для формы покупки:
- 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 — тестирование запросов к базе данных, включая создание, извлечение и проверку данных.
Были разработаны юнит-тесты для проекта из лабораторной работы № 2. Тесты охватывают основные функциональности приложения (работу с моделями и представлениями). Все тесты были успешно пройдены, что подтверждает корректность реализации функционала и позволяет убедиться в стабильности работы приложения.

