Skip to content

SpriteSpirit/python-restaurant-reservations

Repository files navigation

Сайт для бронирования столиков в ресторане (Fullstack)

Описание задачи:

Необходимо создать сайт для бронирования столиков в ресторане. Сайт должен быть сверстан и подключен к админке. Для выполнения задачи необходимо использовать Django и Bootstrap. Сайт должен содержать основные разделы, необходимые для бронирования столиков и управления бронированиями.

Задача:

  1. Сверстать сайт для бронирования столиков.
  2. Подключить сайт к админке Django.
  3. Использовать Bootstrap для создания адаптивного и привлекательного интерфейса.
  4. Подготовить финальную презентацию для защиты

Функционал сайта:

  1. Главная страница:
    • Описание ресторана.
    • Перечень предоставляемых услуг.
    • Контактная информация.
    • Форма для обратной связи.
  2. Страница "О ресторане":
    • История ресторана.
    • Миссия и ценности.
    • Команда.
  3. Страница бронирования:
    • Форма для бронирования столика.
    • Просмотр доступности столиков.
    • Подтверждение бронирования.
  4. Личный кабинет:
    • Регистрация и авторизация пользователей.
    • Просмотр истории бронирований.
    • Управление текущими бронированиями (изменение, отмена).
  5. Админка:
    • Управление пользователями.
    • Управление бронированиями.
    • Управление контентом сайта (тексты, изображения и т.д.).

Технологии

  1. Фреймворк:
    • Использовать фреймворк Django для реализации проекта.
  2. База данных:
    • Использовать PostgreSQL для хранения данных.
  3. Фронтенд:
    • Использовать Bootstrap для создания адаптивного интерфейса.
  4. Контейнеризация:
    • Использовать Docker и Docker Compose для контейнеризации приложения.
  5. Документация:
    • В корне проекта должен быть файл README.md с описанием структуры проекта и инструкциями по установке и запуску.
  6. Качество кода:
    • Соблюдать стандарты PEP8.
    • Весь код должен храниться в удаленном Git репозитории.

Установка и запуск

Предварительные условия:

  • Python 3.11
  • PostgreSQL
  • Poetry
  • Redis
  • Celery
  • Bootstrap

Информация

Главное приложение проекта - config.

   restaurant_reservations/
   ├── config/
   │   ├── __init__.py
   │   ├── asgi.py
   │   ├── celery.py
   │   ├── settings.py
   │   ├── urls.py
   │   └── wsgi.py
   ├── restaurant/
   │   ├── migrations/
   │   ├── templates/
   │       ├── restaurant/
   │   ├── templatetags/
   │   ├── __init__.py
   │   ├── admin.py
   │   ├── apps.py
   │   ├── forms.py
   │   ├── models.py
   │   ├── tasks.py
   │   ├── tests.py
   │   ├── urls.py
   │   └── views.py
   ├── users/
   │   ├── fixtures/
   │   ├── managements/
   │   │   ├── commands/
   │   │   │   ├── __init__.py
   │   │   │   └── csu.py
   │   │   └── __init__.py
   │   ├── migrations/
   │   ├── templates/
   │       ├── users/
   │   ├── __init__.py
   │   ├── admin.py
   │   ├── apps.py
   │   ├── forms.py
   │   ├── models.py
   │   ├── tests.py
   │   ├── urls.py
   │   └── views.py
   ├── media/
   ├── static/
   ├── .env_example
   ├── .gitignore
   ├── Dockerfile
   ├── docker-compose.yaml
   ├── .dockerignore
   ├── manage.py
   ├── poetry.lock
   ├── poetry.toml
   └── README.md

Установка:

  1. Клонирование репозитория:
   git clone <репозиторий_GitHub>
   cd <название_репозитория>
  1. Установка poetry:
   pip install poetry
  1. Установка зависимостей:
   poetry install
  1. Настройка переменных окружения:

Создайте файл .env в корне проекта и заполните его переменными по шаблону .env_example:

DATABASE_URL=<URL_для_подключения_к_PostgreSQL>
SECRET_KEY=<секретный_ключ>
...
  1. Создание базы данных:
  python manage.py migrate
  1. Создание администратора:
  python manage.py csu
  1. Запуск сервера разработки:
   python manage.py runserver
  1. Запуск Celery (для отложенных задач Windows):
   celery -A config worker -l info -P gevent
  1. Запуск Flower (для мониторинга Celery задач):
   celery -A config flower --port=5555

PEP8

Для формирования отчета при помощи flake8-html выполните команду:

  flake8 --format=html --ignore=migrations/,venv/,E501 --htmldir=flake8_report ./

--format=html - параметр, указывающий на тип формата отчета

--ignore=migrations/,venv,E501 - параметр принимает: игнорируемые директории, файлы, коды ошибок

--htmldir=flake8_report ./ - параметр для создания директории с отчетом

./ - это корневая директория проекта для создания папки flake8_report

index.html - файл с отчетом

Развертывание с помощью Docker и Docker Compose

Этот проект можно легко развернуть с помощью Docker и Docker Compose. Для этого необходимо установить Docker и Docker Compose на вашей системе.

  1. Создайте файлы Dockerfile и docker-compose.yaml в корне проекта:

Dockerfile

  • описывает шаги для создания образа Docker для приложения Django, используя Poetry для управления зависимостями:
FROM python:3.11-slim-buster

ENV PYTHONUNBUFFERED=1

WORKDIR /app

COPY poetry.lock pyproject.toml ./

RUN python -m pip install --no-cache-dir poetry==1.8.3 \
    && poetry config virtualenvs.create false \
    && poetry install --no-interaction --no-ansi \
    && rm -rf $(poetry config cache-dir)/{cache, artifacts}

COPY . .

RUN apt-get update && apt-get install -y procps netcat curl && rm -rf /var/lib/apt/lists/*
RUN apt-get update && apt-get install -y netcat

Docker Compose

Файл docker-compose.yaml описывает сервисы, необходимые для запуска приложения, включая Django, PostgreSQL, Redis и Celery:

services:
  db:
    image: postgres:16
    restart: always
    env_file:
      - .env
    environment:
      POSTGRES_DB: ${DATABASE_NAME}
      POSTGRES_USER: ${DATABASE_USER}
      POSTGRES_PASSWORD: ${DATABASE_PASSWORD}
      PGDATA: /var/lib/postgresql/data/pgdata
    volumes:
      - ./db_data:/var/lib/postgresql/data
    healthcheck:
      test: [ "CMD-SHELL", "pg_isready -U ${DATABASE_USER} -d ${DATABASE_NAME}" ]
      interval: 10s
      timeout: 5s
      retries: 5

  redis:
    image: redis:alpine
    restart: always
    ports:
      - "6380:6379"
    healthcheck:
      test: [ "CMD", "redis-cli", "ping" ]
      interval: 5s
      timeout: 5s
      retries: 5

  web:
    build: .
    command: python manage.py runserver 0.0.0.0:8000
    restart: always
    volumes:
      - .:/app
    ports:
      - "8000:8000"
    env_file:
      - .env
    depends_on:
      db:
        condition: service_healthy

  celery_worker:
    build: .
    command: celery -A config worker -l info
    restart: always
    volumes:
      - .:/app
    env_file:
      - .env
    depends_on:
      - db
      - redis
      - web

  celery_beat:
    build: .
    command: celery -A config beat -l info -S django
    restart: always
    volumes:
      - .:/app
    env_file:
      - .env
    depends_on:
      - db
      - redis
      - web

volumes:
  db_data:
    driver: local
  1. Запустите контейнеры Docker Compose:

    docker-compose up --build

    Этот процесс создаст и запустит все необходимые контейнеры. Для запуска в фоновом режиме используйте:

    docker-compose up --build -d
  2. Примените миграции Django:

  docker-compose exec app python manage.py migrate
  1. Приложение будет доступно по адресу http://localhost:8000.

Остановка и очистка

  • Остановить контейнеры:

    docker-compose down
  • Очистить тома данных (если используются):

    docker-compose down -v
  • Очистка неиспользуемых данных Docker

    docker system prune -af
  • Очистка неиспользуемых данных Docker + также удаление неиспользуемых томов

    docker system prune -af --volumes

Примечания

  • Убедитесь, что у вас установлен Docker и Docker Compose.
  • Измените your_password в файле .env на свой пароль для PostgreSQL.
  • Вы можете остановить контейнеры с помощью команды docker-compose down.
  • Убедитесь, что порты, используемые в docker-compose.yaml, свободны на вашем хосте.
  • Для доступа к базе данных PostgreSQL внутри контейнера используйте docker-compose exec db psql -U your_db_user your_db_name.
  • Для просмотра логов Celery или Django используйте docker-compose logs -f celery или docker-compose logs -f app.

Дополнительно

  • Резервное копирование данных: Регулярно создавайте резервные копии данных PostgreSQL, если это необходимо.
  • Обновления: Время от времени обновляйте образы Docker и зависимости проекта для безопасности и производительности.
  • Poetry: Убедитесь, что версия Poetry, указанная в Dockerfile, совпадает с той, что используется в вашем проекте для избежания конфликтов зависимостей.

Автор

Халуева Ангелина||Sprite_Spirit

About

No description, website, or topics provided.

Resources

Stars

Watchers

Forks

Releases

No releases published

Packages

 
 
 

Contributors