Similar presentations:
Backend разработка на Python для автостоянки
1.
Backend разработка на PythonРазработка web-сервиса для
автостоянки
Данилушкина Д.С.
Дорофеева Т.А.
Жданова О.А.
Сошкина П.А.
1
2.
Цель проектаРазработать, протестировать и выполнить развёртывание на
хостинге render.com web-сервис для автостоянки
2
3.
Задачи и исполнителиДанилушкина Д.С.
Выполнить анализ предметной области: выделить основные сущности для моделирования, виды и типы запросов к серверу
Подготовить отчётные документы.
Дорофеева Т.А.
Разработать модели для построения реляционных таблиц в СУБД PostgreSQL. Определить и реализовать необходимую систему
ограничений для обеспечения целостности моделей (Pedantic-модели).
Установить и настроить платформу для администрирования и настройки PostgreSQL, выполнить необходимые построения для
тестирования запросов к этой БД.
Установить и настроить автоматическое генерирование и выполнение миграции для БД (Alembic)
Жданова О.А.
Подготовить и настроить шаблон проекта: установить менеджер зависимостей Poetry, создать и настроить свой репозиторий в
системе контроля версий Git, настроить установить необходимые библиотеки для разработки backend-части приложения на FastAPI.
Сошкина П.А.
Реализация операций CRUD для API-приложения (создание, чтение, обновление и удаление данных, хранящихся в БД), используя
систему роутеров, асинхронный (или синхронный) способ подключения к БД и SQLAlchemy для синхронизации объектов Python и
записей БД.
Широкова В.К.
Протестировать работу API-приложения через Swagger UI. Создать необходимые настроечные компоненты для развёртывания
приложения в рабочей среде: на гостевом хостинге. Выполнить развертывание созданного приложения.
3
4.
Актуальность и востребованностьРазработка веб-сервиса для автостоянки, является особенно
актуальной и востребованной в современных условиях, когда
количество автомобилей в городах продолжает расти. Водителям
становится все сложнее находить доступные парковочные места,
особенно в центральных районах и вблизи деловых центров.
Веб-сервис, который позволяет управлять парковочными местами,
регистрировать транспортные средства и отслеживать занятость,
значительно облегчит жизнь автовладельцам, предоставив им
возможность забронировать место заранее, а также оплатить
парковку онлайн.
Это не только экономит время и уменьшает стресс, связанный с
поиском парковки, но и улучшает общую организацию парковочного
пространства, делая его более эффективным и удобным для всех
пользователей.
Таким образом, выбранная проблематика проекта обладает
актуальностью, а разработанный web-сервис имеет практическую
значимость.
4
5.
Общие сведения о проделанной работеШаг
Описание
Подготовка
окружения
Создано виртуальное окружение для проекта, в
которое устанавливаются необходимые зависимости.
Установка
библиотек
Были установлены следующие библиотеки:
fastapi uvicorn pydantic sqlalchemy alembic
Создание
приложения
Создано простое приложение на FastAPI с 6
эндпоинтами. Запустили web-сервер Uvicorn. Через
браузер проверили, что сервер работает.
Работа с БД
Установили и настроили платформу для
администрирования и настройки PostgreSQL,
выполнили необходимые построения для
тестирования запросов к этой БД. Установили и
настроили автоматическое генерирование и
выполнение миграции для БД (Alembic)
5
6.
Были созданы моделиПример модели Парковочное место:
Пример модели Транспорт:
class ParkingLot(Base):
class Vehicle(Base):
__tablename__ = "parking_lots"
id = Column(Integer, primary_key=True,
index=True)
name = Column(String, index=True)
location = Column(String, index=True)
capacity = Column(Integer)
vehicles = relationship("Vehicle",
back_populates="parking_lot")
__tablename__ = "vehicles"
id = Column(Integer, primary_key=True,
index=True)
license_plate = Column(String, unique=True,
index=True)
type = Column(String, index=True)
is_parked = Column(Boolean, default=True)
parking_lot_id = Column(Integer,
ForeignKey("parking_lots.id"))
parking_lot = relationship("ParkingLot",
back_populates="vehicles")
6
7.
Описание роутеровПример реализации роутера для создания
транспортного средства на парковке
@router.post("/parking_lots/{parking_lot_id}/vehicles/",
response_model=schemas.Vehicle)
def create_vehicle_for_parking_lot(
parking_lot_id: int, vehicle: schemas.VehicleCreate, db: Session =
Depends(get_db)
):
Пример реализации роутера для получения списка всех
транспортных средств
@router.get("/vehicles/", response_model=list[schemas.Vehicle])
def read_vehicles(skip: int = 0, limit: int = 10, db: Session = Depends(get_db)):
return crud.create_vehicle(db=db, vehicle=vehicle,
parking_lot_id=parking_lot_id)
vehicles = crud.get_vehicles(db, skip=skip, limit=limit)
return vehicles
Пример реализации роутера для получения
информации о транспортном средстве
@router.get("/vehicles/{vehicle_id}", response_model=schemas.Vehicle)
Пример реализации роутера для удаления транспортного
средства
def read_vehicle(vehicle_id: int, db: Session = Depends(get_db)):
@router.delete("/vehicles/{vehicle_id}", response_model=schemas.Vehicle)
db_vehicle = crud.get_vehicle(db, vehicle_id=vehicle_id)
if db_vehicle is None:
raise HTTPException(status_code=404, detail="Транспорт не найден")
return db_vehicle
def delete_vehicle(vehicle_id: int, db: Session = Depends(get_db)):
db_vehicle = crud.delete_vehicle(db, vehicle_id=vehicle_id)
if db_vehicle is None:
raise HTTPException(status_code=404, detail="Транспорт не найден")
return db_vehicle
7
8.
Описание роутеровПример реализации роутера для
создания парковочного места
Пример реализации роутера для
получения информации о парковочном
месте
@router.post("/parking_lots/",
response_model=schemas.ParkingLot)
@router.get("/parking_lots/{parking_lot_id}
", response_model=schemas.ParkingLot)
def create_parking_lot(parking_lot:
schemas.ParkingLotCreate, db: Session =
Depends(get_db)):
def read_parking_lot(parking_lot_id: int,
db: Session = Depends(get_db)):
return crud.create_parking_lot(db=db,
parking_lot=parking_lot)
db_parking_lot =
crud.get_parking_lot(db,
parking_lot_id=parking_lot_id)
if db_parking_lot is None:
raise HTTPException(status_code=404,
detail="Парковочное место не найдено")
return db_parking_lot
8
9.
Тестирование API-приложения черезSwagger UI
9