Simple Django-based Task Manager application with support for tasks, subtasks, and categories. Simple Django-based Task Manager application with support for tasks, subtasks, and categories.
- Task, SubTask, Category models
- Task categorization (Many-to-Many)
- Task status tracking
- Django Admin integration
- REST API Endpoints (v1) with Django REST Framework (Tasks & SubTasks CRUD) π
- Advanced Serializer Validation & Nested Relations π‘οΈ
- Dynamic Task Statistics & Analytics π
- Query Parameters, Extract Methods & Pagination π
Access /admin to manage:
- Tasks
- SubTasks
- Categories
Release v0.7.0
This milestone introduces an automated notification subsystem powered by Django event signals, enabling real-time email alerts for task state modifications while establishing strict delta validation to eliminate duplicate communication channels:
- Task Lifecycle Signals (Closes #74): Engineered a
pre_savesignal layer bound to the coreTaskmodel to - dynamically intercept task updates, state transitions, and absolute closures.
- Owner Email Notification Routing (Closes #74): Integrated an automated notification routine that compiles and
- dispatches formatted text alerts directly to the assigned task
owneremail whenever a valid status change is - detected.
- Idempotency & Anti-Spam Verification (Closes #74): Implemented pre-save database delta checks to compare incoming
- status values against existing database records, strictly suppressing notification triggers during consecutive saves
- with unchanged statuses.
- Console Email Engine Integration (Closes #74): Configured a local development email ecosystem inside
settings.py - using Django's console email backend to safely stream outbound email payloads directly to the server terminal for
- debugging.
Release v0.6.0
This milestone hardens the authentication layer by transitioning session storage to client-side secure cookies, automating token lifecycles, and implementing a database-backed blacklist ecosystem to fully eliminate token replay vulnerabilities:
- Secure Account Registration (Closes #65): Established a strict account creation pipeline featuring deep field
- validation, automated password hashing via Django's core validators, and ironclad uniqueness constraints on both
- usernames and emails.
- HTTP-Only Cookie Encapsulation (Closes #66): Neutralized XSS injection threats by intercepting standard JWT
- responses and embedding short-lived Access and long-lived Refresh tokens into cryptographic
httpOnly,Secure, - and
SameSite=Laxbrowser cookies. - Custom Cookie-Aware Auth Backend (Closes #67): Engineered a specialized
JWTCookieAuthenticationprovider that - transparently extracts and decodes access keys from incoming HTTP request cookies while maintaining structural
- fallback compatibility for traditional Bearer tokens.
- Server-Side Token Blacklisting & Session Purge (Closes #68): Integrated an explicit database-backed
token_blacklistroutine to permanently invalidate active refresh tokens upon logout, complemented by automated- client-side cookie deletion blocks to ensure comprehensive session termination.
Release v0.5.0
This milestone completes the security and documentation ecosystem by introducing multi-tenant data isolation, strict object-level access controls, and fully automated OpenAPI 3.0 interactive schemas:
- Contextual User Extraction & Ownership: Added an
ownerForeignKey relation linked to the Django User model - across both Task and SubTask records. Overrode
perform_create()view hooks to seamlessly bind the authenticated request.userto newly created objects while protecting the database via read-only serializer controls.- Isolated Queryset Multi-Tenancy: Restructured the
get_queryset()pipelines on list endpoints, establishing - automatic database-level filtering so that users can strictly interact with data they own.
- Granular Object permissions: Engineered a custom
IsOwnerpermission validator insidepermissions.pyto protect - specific resource IDs. Malicious or unauthorized attempts to alter or delete foreign rows now trigger an explicit
403 Forbiddentermination block.- OpenAPI 3.0 Specs via drf-spectacular: Deployed
drf-spectacularto serve as the unified API blueprint engine. - Exposed secure paths for raw schema delivery (
/api/v1/schema/), - responsive Swagger UI components (
/api/v1/schema/swagger-ui/), - and clean ReDoc documentation interfaces (
/api/v1/schema/redoc/). - Interactive JWT Interceptor: Structured global configuration properties inside
settings.pyto embed native - JWT Bearer authentication locks into the Swagger interface, enabling seamless sandbox manual endpoint testing.
Release v0.4.0
This milestone focuses on securing the API infrastructure against unauthorized access by deploying a stateless token authentication mechanism, sealing all endpoints behind a global security guardrail, and tuning delivery thresholds:
- Stateless JWT Infrastructure: Integrated
djangorestframework-simplejwtto handle user sessions without - server-side state. Configured token lifecycles with a strict 60-minute expiration window for Access tokens and
- a 7-day window for Refresh tokens to ensure high rotation security.
- Exposed Token Rotation Endpoints: Formulated public routing paths at
/token/and/token/refresh/allowing - clients to seamlessly generate new keys and exchange expired tokens.
- Global Security Perimeter: Swapped open endpoints for a mandatory
IsAuthenticatedglobal permission rule inside settings.py. Every active route (/tasks/,/subtasks/,/categories/) now implicitly drops anonymous connections- with a
401 Unauthorizedresponse block. - Optimized Pagination Limits: Tuned the global REST framework
PAGE_SIZEconfiguration along with the ΠΊΠ°ΡΡΠΎΠΌΠ½ΡΠΉ CustomCursorPaginationmodule, dropping the layout density from 6 to exactly 5 items per page across all- resource models.
Release v0.3.0
This release focuses heavily on production infrastructure, application security, and advanced telemetry, hardening the API layer against data scraping and establishing granular observability:
- Cryptographic Cursor Pagination: Migrated from vulnerable page-index offsets to global
CursorPaginationwrapped - inside a custom framework layer. All list endpoints now mask page states behind secure token hashes (
?cursor=...) - with a strict envelope size of 6 objects per page.
- Unified cross-model Sorting: Standardized the underlying cursor pointer sorting around the unique
idfield, - completely neutralizing internal breaks on abstract models (like
Category) that do not share timestamps. - Isolated Multi-Stream Logging: Created a split-channel runtime logging grid that separates standard console
- outputs from environment events, dumping incoming HTTP lifecycles into
logs/http_logs.logand raw ORM-generated SQL - statements into
logs/db_logs.log. - Self-Building Directories & Version Guardrails: Introduced automated system setup scripts using
pathlibto - generate required storage folders out-of-the-box, while reinforcing
.gitignoreparameters to prevent logging files - from spilling into open Git trees.
Release v0.2.4
This release introduces a complete Category management system via unified viewsets, along with an enterprise-grade, highly reusable Soft Deletion architecture to preserve relational data integrity across the platform:
- ModelViewSet Integration: Exposed comprehensive CRUD capabilities for the
Categorymodel using a streamlined ModelViewSet, wired automatically via DRF'sDefaultRouter.- Dynamic Task Aggregation: Added a custom
@actiondetail endpoint (count_tasks) to compute and return total - active tasks associated with any given category.
- Reusable Soft Deletion Engine: Designed an abstract
SoftDeleteModeland a customSoftDeleteManagerthat - overrides default querysets to seamlessly filter out soft-deleted records from standard API responses.
- Database Schema Synchronization: Generated and applied required database migrations to introduce
is_deletedand deleted_attracking layers without physical data loss.
Release v0.2.3
This release completely refactors the core view layer by replacing manual function-based views and boilerplate APIView
classes with Django REST Framework's robust Generic Views, while incorporating standardized filtering and data
controls:
- Generic Views Migration: Refactored entire view pipelines for both Tasks and SubTasks models into optimized
ListCreateAPIViewandRetrieveUpdateDestroyAPIViewarchitectures.- Declarative Filter Backends: Integrated
DjangoFilterBackend,SearchFilter, andOrderingFilterto establish - uniform, enterprise-grade data query controls.
- Multi-Field Case-Insensitive Search: Enabled full-text search parameters (
?search=...) evaluated dynamically - against both
titleanddescriptionmodel fields. - Precise Model Filtering: Introduced query-driven filter pipelines for exact matching on
statusanddeadline - variables across all entity indices.
- Dynamic Serializer Class Routing: Overrode
get_serializer_class()layers to dynamically switch between - specialized schemas (e.g., applying strict input validation during writes and nested relational mappings for reads).
- Unified Pagination Support: Standardized data layer payloads by mapping custom pagination
- parameters (
page_size = 5) uniformly across all task and subtask resource pools.
Release v0.2.2
This release enhances the existing API endpoints by introducing advanced querying, performance-optimized filtering, and data pagination mechanics:
- SubTask Pagination: Integrated
PageNumberPaginationto split the subtask data layer, restricting payload - responses to a maximum of 5 objects per page.
- Strict Chronological Ordering: Enforced descending database-level sorting (
-created_at) across subtask listings, - ensuring the newest items always appear first.
- Database Date Components: Implemented precise task filtering by days of the week by utilizing Django's structural
ExtractWeekDaymethod inside an analytical annotated aggregation layer.- Combined Query Parameter Filtering: Developed chained filtering pipelines (logical
AND) for subtasks, supporting - case-insensitive partial parent title matches (
task__title__icontains) and exact status filters simultaneously. - Code Optimization: Conducted a comprehensive code cleanup by removing redundant, non-optimized endpoint view
- mappings and reducing database round-trips.
Release v0.2.1
This release expands the REST API layer by adopting object-oriented Class-Based Views, complex business logic validation, and deep serialization mapping:
- SubTask API (Class-Based Views): Implemented clean, robust CRUD endpoints for subtasks management (
GET/POST - under
/api/v1/subtasks/andGET/PUT/DELETEunder/api/v1/subtasks/<id>/) using DRF'sAPIView. - Nested Serializer Relations: Upgraded task lookups so that fetching detailed task data dynamically includes all
- associated subtasks via a nested
subtask_setconfiguration. - Strict Business Validation: Added an automated timezone-aware validation hook to reject past deadlines during task
- creation, and overrode
create/updatelayers for categories to manually enforce name uniqueness. - Data Integrity: Explicitly isolated core auto-generated fields (such as
created_at) asread_onlyacross - serialization entry points to protect timestamps from manual manipulation.
Release v0.2.0
The system now includes a fully functional REST API built with Django REST Framework, featuring proper API versioning and secure validation:
- API Versioning: All endpoints are strictly versioned and exposed under the
/api/v1/prefix for maximum - compatibility.
- Task Management Endpoints: Added secure endpoints for task creation (
POST /api/v1/tasks/create/) with type - validation, fetching all tasks (
GET /api/v1/tasks/), and retrieving a specific task by ID (GET /api/v1/tasks/<id>/) - with safe
404 Not Founderror handling. - Dynamic Analytics: Integrated a dedicated aggregation endpoint (
GET /api/v1/tasks/statistics/) that computes - total task counts, breakdown analysis based on model statuses, and real-time overdue metrics using Django's timezone
- engine.
- Architecture: Implemented structured ModelSerializers and decoupled URL routing to separate API concerns from the
- core Django views.
Release v0.1.1
The system includes a customized Django Admin interface tailored for efficient task tracking:
- Inline Subtask Editing: Subtasks can be created, updated, or removed directly from the parent Task's editing form
- without switching pages.
- Smart Text Truncation: To keep the Task dashboard clean, task names in the main list view are automatically
- truncated to 10 characters if they exceed that limit. Full names are strictly preserved in dropdowns and selection
- menus to avoid ambiguity.
- Bulk Operations: Administrators can update multiple subtasks simultaneously. Use the "Actions" dropdown in
- the Subtasks list view to instantly mark all selected items as Done.
Release v0.1.0
- Category model for task grouping
- Task model with status tracking and deadlines
- SubTask model linked to Task
- Task β Category (Many-to-Many)
- SubTask β Task (ForeignKey)
- All models registered in admin panel
- Basic admin configuration for data management
- Database migrations created and applied
- Initial test data added via Django Admin
pip install djangorestframework
pip install django-filter
pip install djangorestframework djangorestframework-simplejwt
python manage.py migrate
python manage.py createsuperuser
python manage.py runserver