A production-ready RESTful API for managing technical events and conferences, built with Django 6 and Django REST Framework. This project demonstrates scalable API design, JWT authentication, robust permission handling, and comprehensive documentation.
- User registration, authentication (JWT), and role-based access (admin, organizer, attendee, speaker)
- Event creation, update, deletion, and registration management
- Session and track management with conflict validation
- Venue management with capacity and amenities
- Advanced filtering, searching, and pagination
- Standardized API responses and error handling
- Interactive API documentation (Swagger/OpenAPI)
- Dockerized deployment and environment management
- Python 3.14+
- Django 6.0+
- Django REST Framework
- drf-spectacular (OpenAPI/Swagger docs)
- PostgreSQL (via Docker)
- Docker & docker-compose
- Poetry - Dependency management & packaging
- Django 6.0+
- Django REST Framework (DRF)
- djangorestframework-simplejwt - JWT authentication
- drf-spectacular - OpenAPI/Swagger documentation
- django-filter - Advanced filtering
- django-cors-headers - CORS handling
- psycopg - PostgreSQL adapter
- dj-database-url - Database URL parsing
- Pillow - Image processing
event-management-system/
├── manage.py
├── pyproject.toml
├── requirements.txt / poetry.lock
├── docker-compose.yml
├── Dockerfile
├── deploy.sh
├── README.md
├── .env.example
├── eventmanagementsystem/
│ ├── settings.py
│ ├── urls.py
│ └── ...
├── apps/
│ ├── auth/ users/ events/ event_sessions/ registrations/ tracks/ venues/ speakers/ common/
├── docs/
└── media/
The following diagram and table list describe the main entities (tables) in the Event Management System and their roles:
| Table | Purpose | Key Fields / Description |
|---|---|---|
| User | Django built-in user authentication | username, email, password, is_active, is_staff, etc. |
| UserProfile | Extended user info and role management | user (FK), bio, role (admin/organizer/attendee/speaker), profile_picture, created_at |
| Event | Represents an event or conference | title, description, start_date, end_date, capacity, venue (FK), creator (FK), status |
| Track | Logical grouping of sessions within an event | name, description, event (FK), created_at |
| Session | Individual sessions/talks within an event | title, description, start_time, end_time, speakers (M2M), track (FK), event (FK) |
| Venue | Physical location for events/sessions | name, address, city, capacity, amenities, venue_image, created_at |
| Registration | User registration for an event | user (FK), event (FK), registered_at, status, check_in_at |
Legend:
- FK = Foreign Key
- M2M = Many-to-Many
git clone <repo-url>
cd event-management-systemcp .env.example .env
# Edit .env with your database credentials and secret keys# Install dependencies
poetry install
# Run migrations
poetry run python manage.py migrate
# Create superuser
poetry run python manage.py createsuperuser
# Run the development server
poetry run python manage.py runserverWith Docker, all dependencies and migrations are handled automatically. You only need to run:
docker-compose up -dThis will build the images, install dependencies (via Poetry), apply migrations, and start the server at http://localhost:8080.
To create a superuser inside the running container:
docker-compose exec web python manage.py createsuperuser*Notes : *
In this project there is already a default superuser that was made during first build. (look at: 0002_auto_20260420_2007.py)
username : admin email : admin@admin.com password : admin@admin.com
docker-compose up -dSee .env.example for all required variables:
DATABASE_URLPOSTGRES_DB,POSTGRES_USER,POSTGRES_PASSWORDJWT_SECRET_KEYCORS_ALLOWED_ORIGINS- ...and more
After running the server u can't API Documentation through this endpoint
- Swagger UI: http://localhost:8080/api/schema/swagger-ui/
- ReDoc: http://localhost:8080/api/schema/redoc/
- OpenAPI schema: http://localhost:8080/api/schema/
API endpoints, request/response formats, and error codes are fully documented in Swagger UI.
- All API responses follow a standardized format
- JWT authentication is required for protected endpoints
- Role-based permissions are strictly enforced
- Database schema is optimized for event management use cases
- Docker is used for local deployments
This project is for technical assessment and demonstration purposes.
Ananta Alwy
For more details, see the API documentation or contact the author.