A Django + DRF + JWT + MySQL project management system for teams to manage projects, tasks, and users with authentication and role-based permissions.
- User registration, login (session & JWT), and logout
- Role-based access: Owner, Member, Superuser
- Project CRUD, member management, and dashboard
- Task management: create, assign, update, comment, delete
- Profile management
- API-first backend with browsable DRF API
- Responsive Django templates (Bootstrap) for login, logout, dashboard, and project detail
- Backend: Django, Django REST Framework
- Authentication: JWT (
djangorestframework-simplejwt) - Database: MySQL
- Frontend: Django templates + Bootstrap
- Deployment: Configurable via
.env
-
Clone the repo and set up a virtual environment:
git clone https://github.com/Wamamili/project_management.git cd project_management python -m venv venv # On Windows: venv\Scripts\activate # On Linux/macOS: source venv/bin/activate pip install -r requirements.txt
-
Configure environment variables:
cp .env.example .env # Edit .env with your MySQL credentials, secret key, etc. -
Create the database and run migrations:
python manage.py makemigrations python manage.py migrate python manage.py createsuperuser
-
Run the development server:
python manage.py runserver
-
Access the app:
- API root:
http://127.0.0.1:8000/api/ - Admin:
http://127.0.0.1:8000/admin/ - Login:
/login/(session-based) - Dashboard:
/dashboard/(after login)
- API root:
POST /api/accounts/register/— RegisterPOST /api/accounts/login/— JWT loginPOST /api/accounts/token/refresh/— Refresh tokenGET /api/accounts/me/— Current userPOST /api/accounts/logout/— Logout (session)GET /dashboard/— Dashboard (template, login required)
GET /api/projects/— List projects for current userPOST /api/projects/— Create project (returns{ "message": "Project successful created", ...project data... })GET /api/projects/<id>/— RetrievePUT /api/projects/<id>/— Update (owner only)DELETE /api/projects/<id>/— Delete (owner only)POST /api/projects/<id>/add_member/— Add team member
GET /api/projects/<project_id>/tasks/— List tasksPOST /api/projects/<project_id>/tasks/— Create taskGET /api/tasks/<id>/— RetrievePUT /api/tasks/<id>/— Update (assignee or owner)DELETE /api/tasks/<id>/— Delete (owner or creator)POST /api/tasks/<id>/comment/— Add comment
login.html,logout.html,dashboard.htmlintemplates/project_detail.htmlintemplates/projects/
project_management/
├── accounts/ # User management, authentication, profiles
├── projects/ # Project models, views, and APIs
├── tasks/ # Task models, views, and APIs
├── project_management/ # Core settings and URLs
├── templates/ # HTML templates (login, logout, dashboard, etc.)
- Default timezone: Africa/Nairobi
- Custom
Usermodel with arolefield:AUTH_USER_MODEL = "accounts.User"
- Configurable with
.envfor DB credentials, secret key, and debug mode - Deployment ready for Heroku, Render, or DigitalOcean
- GitHub Actions for tests and lint checks
- Docker for containerized deployments
- Coverage reports for testing
- Fork the repo
- Create a feature branch (
git checkout -b feature-name) - Commit changes (
git commit -m "Add feature") - Push branch (
git push origin feature-name) - Open a Pull Request POST /api/accounts/login/ → login with username & password POST /api/accounts/logout/ → logout GET /api/accounts/dashboard/ → dashboard (auth required) GET/PUT /api/accounts/profile/ → get/update profile POST /api/accounts/change-password/ → change password
Session-based login (via api_login + api_logout) OR JWT-based login (via /api/token/)
GET /api/projects/— List projects for current userPOST /api/projects/— Create projectGET /api/projects/<id>/— RetrievePUT /api/projects/<id>/— Update (owner only)DELETE /api/projects/<id>/— Delete (owner only)POST /api/projects/<id>/add_member/— Add team member
GET /api/projects/<project_id>/tasks/— List tasksPOST /api/projects/<project_id>/tasks/— Create taskGET /api/tasks/<id>/— RetrievePUT /api/tasks/<id>/— Update (assignee or owner)DELETE /api/tasks/<id>/— Delete (owner or creator)POST /api/tasks/<id>/comment/— Add comment
project_management/
├── accounts/ # User management, authentication, profiles
├── projects/ # Project models, views, and APIs
├── tasks/ # Task models, views, and APIs
├── project_management/ # Core settings and URLs
- Default timezone: Africa/Nairobi
- Custom
Usermodel with arolefield:AUTH_USER_MODEL = "accounts.User" - Configurable with
.envfor DB credentials, secret key, and debug mode - Deployment ready on Heroku, Render, or DigitalOcean
- GitHub Actions for tests and lint checks
- Docker for containerized deployments
- Coverage reports for testing
- Fork the repo
- Create a feature branch (
git checkout -b feature-name) - Commit changes (
git commit -m "Add feature") - Push branch (
git push origin feature-name) - Open a Pull Request