Skip to content

Repository files navigation

✈️ Flight Reservation System API

A production-style Flight Reservation Backend System built using Django and Django REST Framework with authentication, flight search, passenger reservation management, Dockerized deployment, and Nginx load balancing support.

This project demonstrates:

  • REST API development
  • Authentication using DRF Token Auth
  • Dockerized Django deployment
  • Nginx reverse proxy + load balancing
  • Reservation system architecture
  • Frontend integration using Vanilla JavaScript
  • Environment-based configuration

πŸš€ Features

βœ… Core Features

  • Flight Management APIs (CRUD)
  • Passenger Management APIs
  • Reservation Management APIs
  • Flight Search API
  • Save Reservation API
  • Token-based Authentication
  • Input Validation
  • Environment Variable Configuration

βœ… DevOps & Deployment Features

  • Dockerized Application
  • Docker Compose Multi-Service Setup
  • Nginx Reverse Proxy
  • Nginx Load Balancer
  • Multiple Django Containers (web-1, web-2)
  • Environment-based settings

πŸ—οΈ Tech Stack

Category Technology
Backend Python 3
Framework Django 5
API Framework Django REST Framework
Authentication DRF Token Authentication
Database PostgreSQL / SQLite
Deployment Docker
Reverse Proxy Nginx
Frontend HTML + CSS + Vanilla JS

πŸ“ Project Structure

flights/
β”‚
β”œβ”€β”€ flightApp/
β”‚   β”œβ”€β”€ models.py
β”‚   β”œβ”€β”€ serializers.py
β”‚   β”œβ”€β”€ views.py
β”‚
β”œβ”€β”€ flights/
β”‚   β”œβ”€β”€ settings.py
β”‚   β”œβ”€β”€ urls.py
β”‚
β”œβ”€β”€ nginx/
β”‚   └── default.conf
β”‚
β”œβ”€β”€ docker-compose.yml
β”œβ”€β”€ Dockerfile
β”œβ”€β”€ .dockerignore
β”œβ”€β”€ .env.docker
β”‚
β”œβ”€β”€ frontend/
β”‚   └── index.html
β”‚
└── manage.py

🧩 Database Models

The project contains three main entities:


✈️ Flight Model

Stores flight information.

Field Type
flightNumber CharField
airlines CharField
departureCity CharField
arrivalCity CharField
departureDate DateTimeField
departureTime TimeField

πŸ‘€ Passenger Model

Stores passenger details.

Field Type
name CharField
email CharField
phone CharField

🎫 Reservation Model

Maps passengers to flights.

Relationship Type
flight ForeignKey β†’ Flight
passenger OneToOneField β†’ Passenger

πŸ—‚οΈ ER Diagram

erDiagram

    FLIGHT {
        int id PK
        string flightNumber
        string airlines
        string departureCity
        string arrivalCity
        datetime departureDate
        time departureTime
    }

    PASSENGER {
        int id PK
        string name
        string email
        string phone
    }

    RESERVATION {
        int id PK
        int flight_id FK
        int passenger_id FK
    }

    FLIGHT ||--o{ RESERVATION : contains
    PASSENGER ||--|| RESERVATION : books
Loading

πŸ”„ API Architecture

graph TD

    U[User]

    F[Frontend<br/>HTML + CSS + JavaScript]

    N[Nginx Reverse Proxy<br/>+ Load Balancer]

    W1[Django Container<br/>web-1]

    W2[Django Container<br/>web-2]

    DB[(Database)]

    U --> F
    F --> N

    N --> W1
    N --> W2

    W1 --> DB
    W2 --> DB
Loading

πŸ” Authentication

The application uses DRF Token Authentication.

Generate Token

POST /api-token-auth/

Request

{
  "username": "admin",
  "password": "password"
}

Response

{
  "token": "your_token_here"
}

Use Token

Add token in request headers:

Authorization: Token your_token_here

🌐 API Endpoints

πŸ”Ή Flight APIs

Method Endpoint Description
GET /flights/ Get all flights
POST /flights/ Create flight
PUT /flights/{id}/ Update flight
DELETE /flights/{id}/ Delete flight

πŸ”Ή Passenger APIs

Method Endpoint
GET /passengers/
POST /passengers/

πŸ”Ή Reservation APIs

Method Endpoint
GET /reservations/
POST /reservations/

πŸ” Find Flights API

POST /flights/findflights

Request

{
  "departureCity": "Kolkata",
  "arrivalCity": "Delhi",
  "departureDate": "2026-05-20"
}

πŸ’Ύ Save Reservation API

POST /flights/savereservation

Request

{
  "flightNumber": 1,
  "name": "Aranya",
  "email": "aranya@gmail.com",
  "phone": "9876543210"
}

πŸ§ͺ Serializer Validation

The project validates flight numbers using regex validation.

^[A-Za-z0-9]*$

Only alphanumeric flight numbers are allowed.


βš™οΈ Environment Configuration

Configured using .env.docker.

Example:

SECRET_KEY=your_secret_key
DEBUG=False
ALLOWED_HOSTS=localhost,127.0.0.1
DATABASE_URL=your_database_url

🐳 Docker Setup

The application is fully Dockerized.


πŸ“¦ Docker Services

  • Django Application
  • PostgreSQL Database
  • Nginx Reverse Proxy

▢️ Run Using Docker

1️⃣ Clone Repository

git clone <your-repo-url>
cd flights

2️⃣ Build Containers

docker compose build

3️⃣ Run Containers

docker compose up -d

4️⃣ Apply Migrations

docker compose exec web python manage.py migrate

5️⃣ Create Superuser

docker compose exec web python manage.py createsuperuser

🌍 Nginx Load Balancer

The project uses:

  • Reverse Proxy
  • Least Connection Load Balancing
  • Multiple Django Containers

πŸ” Load Balancing Strategy

upstream django_cluster {
    least_conn;
    server web-1:8000;
    server web-2:8000;
}

This distributes traffic between multiple Django instances.


πŸ–₯️ Frontend

The frontend is built using:

  • HTML
  • CSS
  • Vanilla JavaScript

Frontend Features:

  • Login Page
  • Flight Search
  • Reservation Booking
  • Token Storage
  • API Integration

πŸ”„ Request Flow

User
 ↓
Frontend
 ↓
Nginx Reverse Proxy
 ↓
Django REST APIs
 ↓
Database

🧠 Important Concepts Demonstrated

  • REST API Design
  • Token Authentication
  • Reverse Proxy
  • Load Balancing
  • Docker Networking
  • Environment Variables
  • Serializer Validation
  • Django ORM Relationships
  • CRUD Operations
  • Multi-container Architecture

πŸ“Œ Future Enhancements

  • JWT Authentication
  • Swagger/OpenAPI Documentation
  • Payment Gateway Integration
  • Booking History
  • Seat Selection
  • Email Notifications
  • Kubernetes Deployment
  • CI/CD Pipeline
  • Redis Caching
  • Celery Background Tasks

πŸ‘¨β€πŸ’» Author

Aranya Majumdar

Backend Developer | Python Developer | DevOps Enthusiast


πŸ“„ License

This project is created for educational and portfolio purposes.

About

A containerized Flight Reservation REST API built with Django Rest Framework (DRF), featuring Nginx integration, custom models for flight management, and a decoupled frontend.

Resources

Stars

Watchers

Forks

Releases

Packages

Contributors

Languages