Files
thrillwiki_django_no_react/backend
pac7 e47c679bc0 Make sign in and join buttons larger for better visibility
Update enhanced_header.html to increase the size of the sign in and join buttons by modifying their classes and structure.

Replit-Commit-Author: Agent
Replit-Commit-Session-Id: 495199c6-aa06-48cd-8c40-9cccf398cfcf
Replit-Commit-Checkpoint-Type: full_checkpoint
Replit-Commit-Screenshot-Url: https://storage.googleapis.com/screenshot-production-us-central1/d6d61dac-164d-45dd-929f-7dcdfd771b64/495199c6-aa06-48cd-8c40-9cccf398cfcf/qziTztD
2025-09-22 00:15:15 +00:00
..
2025-09-21 20:11:00 -04:00
2025-09-21 20:11:00 -04:00
2025-09-21 20:11:00 -04:00
2025-09-21 20:11:00 -04:00
2025-09-21 20:11:00 -04:00
2025-09-21 20:11:00 -04:00
2025-09-21 20:11:00 -04:00
2025-09-21 20:11:00 -04:00
2025-09-21 20:11:00 -04:00
2025-09-21 20:11:00 -04:00
2025-09-21 20:11:00 -04:00
2025-09-21 20:11:00 -04:00
2025-09-21 20:11:00 -04:00
2025-09-21 20:11:00 -04:00
2025-09-21 20:11:00 -04:00
2025-09-21 20:11:00 -04:00
2025-09-21 20:11:00 -04:00
2025-09-21 20:11:00 -04:00
2025-09-21 20:11:00 -04:00
2025-09-21 20:11:00 -04:00
2025-09-21 20:11:00 -04:00
2025-09-21 20:11:00 -04:00
2025-09-21 20:11:00 -04:00
2025-09-21 20:11:00 -04:00

ThrillWiki Backend

Django REST API backend for the ThrillWiki monorepo.

🏗️ Architecture

This backend follows Django best practices with a modular app structure:

backend/
├── apps/                 # Django applications
│   ├── accounts/         # User management
│   ├── parks/           # Theme park data
│   ├── rides/           # Ride information
│   ├── moderation/      # Content moderation
│   ├── location/        # Geographic data
│   ├── media/           # File management
│   ├── email_service/   # Email functionality
│   └── core/            # Core utilities
├── config/              # Django configuration
│   ├── django/          # Settings files
│   └── settings/        # Modular settings
├── templates/           # Django templates
├── static/              # Static files
└── tests/               # Test files

🛠️ Technology Stack

  • Django 5.0+ - Web framework
  • Django REST Framework - API framework
  • PostgreSQL - Primary database
  • Redis - Caching and sessions
  • UV - Python package management
  • Celery - Background task processing

🚀 Quick Start

Prerequisites

  • Python 3.11+
  • uv package manager
  • PostgreSQL 14+
  • Redis 6+

Setup

  1. Install dependencies

    cd backend
    uv sync
    
  2. Environment configuration

    cp .env.example .env
    # Edit .env with your settings
    
  3. Database setup

    uv run manage.py migrate
    uv run manage.py createsuperuser
    
  4. Start development server

    uv run manage.py runserver
    

🔧 Configuration

Environment Variables

Required environment variables:

# Database
DATABASE_URL=postgresql://user:pass@localhost/thrillwiki

# Django
SECRET_KEY=your-secret-key
DEBUG=True
DJANGO_SETTINGS_MODULE=config.django.local

# Redis
REDIS_URL=redis://localhost:6379

# Email (optional)
EMAIL_HOST=smtp.gmail.com
EMAIL_PORT=587
EMAIL_USE_TLS=True
EMAIL_HOST_USER=your-email@gmail.com
EMAIL_HOST_PASSWORD=your-app-password

Settings Structure

  • config/django/base.py - Base settings
  • config/django/local.py - Development settings
  • config/django/production.py - Production settings
  • config/django/test.py - Test settings

📁 Apps Overview

Core Apps

  • accounts - User authentication and profile management
  • parks - Theme park models and operations
  • rides - Ride information and relationships
  • core - Shared utilities and base classes

Support Apps

  • moderation - Content moderation workflows
  • location - Geographic data and services
  • media - File upload and management
  • email_service - Email sending and templates

🔌 API Endpoints

Base URL: http://localhost:8000/api/

Authentication

  • POST /auth/login/ - User login
  • POST /auth/logout/ - User logout
  • POST /auth/register/ - User registration

Parks

  • GET /parks/ - List parks
  • GET /parks/{id}/ - Park details
  • POST /parks/ - Create park (admin)

Rides

  • GET /rides/ - List rides
  • GET /rides/{id}/ - Ride details
  • GET /parks/{park_id}/rides/ - Rides by park

🧪 Testing

# Run all tests
uv run manage.py test

# Run specific app tests
uv run manage.py test apps.parks

# Run with coverage
uv run coverage run manage.py test
uv run coverage report

🔧 Management Commands

Custom management commands:

# Import park data
uv run manage.py import_parks data/parks.json

# Generate test data
uv run manage.py generate_test_data

# Clean up expired sessions
uv run manage.py clearsessions

📊 Database

Entity Relationships

  • Parks have Operators (required) and PropertyOwners (optional)
  • Rides belong to Parks and may have Manufacturers/Designers
  • Users can create submissions and moderate content

Migrations

# Create migrations
uv run manage.py makemigrations

# Apply migrations
uv run manage.py migrate

# Show migration status
uv run manage.py showmigrations

🔐 Security

  • CORS configured for frontend integration
  • CSRF protection enabled
  • JWT token authentication
  • Rate limiting on API endpoints
  • Input validation and sanitization

📈 Performance

  • Database query optimization
  • Redis caching for frequent queries
  • Background task processing with Celery
  • Database connection pooling

🚀 Deployment

See the Deployment Guide for production setup.

🐛 Debugging

Development Tools

  • Django Debug Toolbar
  • Django Extensions
  • Silk profiler for performance analysis

Logging

Logs are written to:

  • Console (development)
  • Files in logs/ directory (production)
  • External logging service (production)

🤝 Contributing

  1. Follow Django coding standards
  2. Write tests for new features
  3. Update documentation
  4. Run linting: uv run flake8 .
  5. Format code: uv run black .