A Ride Booking backend built with Django, Django REST Framework, and MySQL.
Supports user management, rides, vehicles, payments, JWT authentication, and real-time WebSocket updates for rider availability.
python -m venv .venv.venv\Scripts\activatesource .venv/bin/activatepip install django djangorestframework mysqlclient
pip install djangorestframework-simplejwt # JWT Authentication
pip install channels # WebSocket support
pip install daphne # ASGI server for WebSocket
pip install stripe # Stripe integration for paymentdjango-admin startproject project .
django-admin startapp ridersINSTALLED_APPS = [
...
'rest_framework',
'riders',
'channels',
]DATABASES = {
'default': {
'ENGINE': 'django.db.backends.mysql',
'NAME': 'DB_NAME',
'USER': 'DB_USER',
'PASSWORD': 'DB_PASSWORD',
'HOST': 'localhost', # Or your DB host
'PORT': '3306',
}
}python manage.py makemigrations
python manage.py migratepython manage.py runserver$env:DJANGO_SETTINGS_MODULE="project.settings" # Windows PowerShell
daphne -p 8000 project.asgi:application| Method | Endpoint | Description |
|---|---|---|
| POST | /api/riders/profile/ |
Create user |
| GET | /api/riders/profile/ |
Get all users |
| GET | /api/riders/profile/{id}/ |
Get user by ID |
| PUT | /api/riders/profile/{id}/ |
Update user |
| DELETE | /api/riders/profile/{id}/ |
Delete user |
Create User
{
"name": "",
"email": "",
"phone": "",
"password": "",
"role": ""
}POST /api/riders/login/
{
"email": "",
"password": ""
}- Returns access and refresh tokens
Use access token in Authorization header for protected endpoints:
Authorization: Bearer <access_token>| Method | Endpoint | Description |
|---|---|---|
| POST | /api/riders/vehicle/ |
Create vehicle |
| GET | /api/riders/vehicle/ |
List vehicles |
| GET | /api/riders/vehicle/{id}/ |
Get vehicle by ID |
| PUT | /api/riders/vehicle/{id}/ |
Update vehicle |
| DELETE | /api/riders/vehicle/{id}/ |
Delete vehicle |
Create Vehicle
{
"vehicle_number": "",
"vehicle_type": ""
}| Method | Endpoint | Description |
|---|---|---|
| POST | /api/riders/ride/ |
Create ride |
| PUT | /api/riders/ride/{id}/ |
Update ride |
| DELETE | /api/riders/ride/{id}/ |
Delete ride |
| POST | /api/riders/ride/{id}/accept/ |
Accept ride |
| POST | /api/riders/ride/{id}/pickup/ |
Pick up ride |
| POST | /api/riders/ride/{id}/decline/ |
Decline ride |
| POST | /api/riders/ride/{id}/complete/ |
Complete ride |
Create Ride
{
"pickup_location": "street A",
"pickup_latitude": 12.971598,
"pickup_longitude": 77.594566,
"drop_location": "street B",
"drop_longitude": 12.978373,
"drop_latitude": 77.640835,
"vehicle_type": "CAR",
"charges": 150
}| Method | Endpoint | Description |
|---|---|---|
| POST | /api/riders/payments/{id}/create_payment/ |
Create payment |
| POST | /api/riders/payments/{id}/mark_paid/ |
Mark payment as paid |
ws://127.0.0.1:8000/ws/riders/availability/{user_id}Message Example:
{
"latitude": 23.053420,
"longitude": 72.521230
}Returns available riders within 5 km.
ws://127.0.0.1:8000/ws/riders/user_ride/{user_id}/Create ride example:
{
"action": "create_ride",
"data": {
"pickup_location": "street A",
"pickup_latitude": 23.0197999,
"pickup_longitude": 72.5268579,
"drop_location": "street B",
"drop_latitude": 77.600835,
"drop_longitude": 12.858373,
"vehicle_type": 1,
"charges": 150
}
}ws://127.0.0.1:8000/ws/riders/new_ride/{rider_id}ws://127.0.0.1:8000/ws/riders/location/{rider_id}/Message Example:
{
"latitude": 23.0197999,
"longitude": 72.5268579
}Updates DB and broadcasts new location in real-time.
Riders availability updates automatically when ride is accepted/completed. Only available riders appear in WebSocket responses for nearby users.