āĻĻāĻžāϰā§āĻŖ! āĻāĻāύ āĻāĻŽāϰāĻž đī¸ đ Part 4: Django REST API Development āĻļā§āϰ⧠āĻāϰāĻāĻŋ â
āĻāĻāĻāύ āĻĒā§āϰāĻĢā§āĻļāύāĻžāϞ āϏāĻĢāĻāĻāϝāĻŧā§āϝāĻžāϰ āĻāĻā§āĻāĻŋāύāĻŋāϝāĻŧāĻžāϰ āϝā§āĻāĻžāĻŦā§ scalable, secure, clean API āϤā§āϰāĻŋ āĻāϰā§, āĻ āĻŋāĻ āϏā§āĻāĻāĻžāĻŦā§āĨ¤
āϏāĻŦ āĻā§āĻĄā§ Bangla comments āĻĨāĻžāĻāĻŦā§ āϝāĻžāϤ⧠āĻŦāĻžāϏā§āϤāĻŦā§ āĻĒā§āϰāĻā§āĻā§āĻā§ āĻŦā§āϝāĻŦāĻšāĻžāϰ āĻāϰāϤ⧠āĻĒāĻžāϰā§āĨ¤
đī¸ đ Part 4: Django REST API Development
â ā§§. DRF Setup & Basic Config
āĻāĻŽāϰāĻž āĻāĻā§āĻ djangorestframework āĻāύāϏā§āĻāϞ āĻāϰā§āĻāĻŋāĨ¤ āĻāĻāύ settings.py āϤ⧠āĻāĻŋāĻā§ important setup check āĻāϰā§āĨ¤
# settings.py
INSTALLED_APPS = [
...
'rest_framework',
'monitoring',
]
# DRF Global settings (basic)
REST_FRAMEWORK = {
'DEFAULT_AUTHENTICATION_CLASSES': [
'rest_framework.authentication.TokenAuthentication',
],
'DEFAULT_PERMISSION_CLASSES': [
'rest_framework.permissions.IsAuthenticated',
],
}
â ⧍. Token Auth System Setup
đ¨ Step 2.1 â Install Token Auth App
pip install djangorestframework-authtoken
settings.py āĻ add āĻāϰā§:
INSTALLED_APPS = [
...
'rest_framework.authtoken',
]
đ¨ Step 2.2 â Apply Token Table Migration
python manage.py migrate
đ¨ Step 2.3 â Create Token for superuser (testing)
python manage.py drf_create_token your_superuser_username
āĻāϤ⧠āĻāĻāĻŦāĻžāϰā§āϰ āĻāύā§āϝ superuser āĻāϰ āĻāύā§āϝ token create āĻšāĻŦā§āĨ¤ Client python script āĻāĻ token āĻŦā§āϝāĻŦāĻšāĻžāϰ āĻāϰāĻŦā§āĨ¤
â ā§Š. Serializer Design
đ¯ Goal:
Employee āĻāϰ ActivityLog āĻāϰ āĻāύā§āϝ Serializer āĻŦāĻžāύāĻžāύā§āĨ¤
đ¨ Step 3.1 â monitoring/serializers.py
from rest_framework import serializers
from .models import Employee, ActivityLog
class EmployeeSerializer(serializers.ModelSerializer):
"""
đ Employee Serializer
Employee data serialize/deserailize āĻāϰāĻžāϰ āĻāύā§āϝāĨ¤
"""
class Meta:
model = Employee
fields = '__all__'
class ActivityLogSerializer(serializers.ModelSerializer):
"""
đ ActivityLog Serializer
Client āĻĨā§āĻā§ incoming activity log data handle āĻāϰāĻŦā§āĨ¤
"""
class Meta:
model = ActivityLog
fields = '__all__'
đ Bangla Explanation:
- ModelSerializer â Model āĻāϰ fields auto map āĻšāĻŦā§
fields = '__all__'â āϏāĻŦ field expose āĻāϰāĻŦā§ (āĻāĻžāĻāϞ⧠later limit āĻāϰāĻž āϝāĻžāĻŦā§)
â ā§Ē. Views: API Endpoints
đ¯ Goal:
- Client
POSTāĻāϰāĻŦā§ â ActivityLog save āĻšāĻŦā§ - Admin āĻŦāĻž Manager
GETāĻāϰāĻŦā§ â Logs filter āĻāϰāĻŦā§
đ¨ Step 4.1 â monitoring/views.py
from rest_framework import generics, permissions, authentication
from .models import Employee, ActivityLog
from .serializers import EmployeeSerializer, ActivityLogSerializer
# â
Token auth enforced by settings.py
class ActivityLogCreateView(generics.CreateAPIView):
"""
â
ActivityLog Create API
Python client background service āĻāĻāĻžāύ⧠data POST āĻāϰāĻŦā§āĨ¤
"""
queryset = ActivityLog.objects.all()
serializer_class = ActivityLogSerializer
class ActivityLogListView(generics.ListAPIView):
"""
â
ActivityLog List API
Admin āĻŦāĻž Manager āϞāĻāĻā§āϞ⧠filter āĻāϰ⧠āĻĻā§āĻāϤ⧠āĻĒāĻžāϰāĻŦā§āĨ¤
Example: /api/activity-logs/?employee=1&start_date=2025-07-01&end_date=2025-07-15
"""
serializer_class = ActivityLogSerializer
def get_queryset(self):
queryset = ActivityLog.objects.all()
# Query param āĻĨā§āĻā§ employee filter āĻāϰāĻŦā§
employee_id = self.request.query_params.get('employee')
if employee_id:
queryset = queryset.filter(employee_id=employee_id)
# Optional: āϤāĻžāϰāĻŋāĻ āĻĻāĻŋāϝāĻŧā§ filter
start_date = self.request.query_params.get('start_date')
end_date = self.request.query_params.get('end_date')
if start_date and end_date:
queryset = queryset.filter(timestamp__date__range=[start_date, end_date])
return queryset
đ Bangla Explanation:
â
CreateAPIView â POST request handle
â
ListAPIView â GET request handle with filter
â
Query param āĻŦā§āϝāĻŦāĻšāĻžāϰ â flexible reporting
â ā§Ģ. URL Routing
đ¨ Step 5.1 â monitoring/urls.py
from django.urls import path
from .views import ActivityLogCreateView, ActivityLogListView
urlpatterns = [
path('activity-logs/create/', ActivityLogCreateView.as_view(), name='activity-log-create'),
path('activity-logs/', ActivityLogListView.as_view(), name='activity-log-list'),
]
đ¨ Step 5.2 â Main employee_monitoring/urls.py āϤ⧠Include āĻāϰā§
from django.contrib import admin
from django.urls import path, include
urlpatterns = [
path('admin/', admin.site.urls),
path('api/', include('monitoring.urls')), # â
API prefix
]
â ā§Ŧ. API Test
1ī¸âŖ Django runserver āĻāĻžāϞāĻžāĻ
2ī¸âŖ Postman āĻŦāĻž curl āĻĻāĻŋāϝāĻŧā§ POST request āĻāϰā§:
POST http://127.0.0.1:8000/api/activity-logs/create/
Authorization: Token your_token_here
Content-Type: multipart/form-data (for screenshot)
BODY:
{
"employee": 1,
"active_window": "Chrome - YouTube",
"website_url": "https://youtube.com",
"keystrokes": "abcd",
"idle_time_min": 10,
"app_usage": [{"app_name":"Word","duration_min":20}],
"screenshot": (file)
}
3ī¸âŖ GET request: Logs āĻĻā§āĻāϤā§:
GET http://127.0.0.1:8000/api/activity-logs/?employee=1&start_date=2025-07-10&end_date=2025-07-14
đ â Summary of Part 4
âī¸ DRF & Token Auth setup
âī¸ Serializer ready (Employee, ActivityLog)
âī¸ CreateAPIView â Python client data post āĻāϰāĻŦā§
âī¸ ListAPIView â Admin logs filter āĻāϰāĻŦā§
âī¸ Production-level clean architecture + secure
đ âĄī¸ Next Step:
đ Part 5: Python Client Development
- Python script â background service
- Active window, website, idle time track
- Screenshot capture
- Periodic API POST with Token
đ āĻŦāϞ⧠âStart Part 5â â āϤāĻžāĻšāϞ⧠āĻĒā§āϰ⧠Python Client Tracking Script āĻļā§āϰ⧠āĻāϰāĻŦā§āĨ¤
Bangla comments āϏāĻš real working example āĻĨāĻžāĻāĻŦā§!