Project Folder Structure
DjangoTodos/
├── demo/ # Django project root
│ ├── demo/ # Project configuration
│ │ ├── init.py
│ │ ├── asgi.py
│ │ ├── settings.py # Project settings
│ │ ├── urls.py # Main URL configuration
│ │ └── wsgi.py
│ ├── myapp/ # Main application
│ │ ├── migrations/ # Database migrations
│ │ │ └── init.py
│ │ ├── static/ # Static files
│ │ │ └── css/
│ │ │ └── style.css │
│ ├── templates/ # HTML templates
│ │ │ ├── base.html # Base template
│ │ │ ├── home.html # Home page
│ │ │ └── todos.html # Todo list page
│ │ ├── init.py
│ │ ├── admin.py # Admin configuration
│ │ ├── apps.py # App configuration
│ │ ├── models.py # Database models
│ │ ├── tests.py # Unit tests
│ │ ├── urls.py # App URL configuration
│ │ └── views.py # View functions
│ ├── manage.py # Django management script
│ └── requirements.txt # Project dependencies
├── .gitignore # Git ignore file
├── LICENSE # License file
└── README.md # Project documentation
# Building a Todo App with Django and AJAX: A Step-by-Step Guide
Hey devs! Today, I'm excited to share a fun project I built - a dynamic Todo application using Django and AJAX. Let's dive into how it works and how you can build one too!
## What We're Building
A sleek Todo app with:
- Real-time task addition
- Toggle task completion
- Instant task deletion
- Smooth animations
- Beautiful Bootstrap styling
## Project Structure
1. The Model
# Key Components
python
# models.py
class TodoItem(models.Model):
title = models.CharField(max_length=100)
completed = models.BooleanField(default=False)
2. The Views
# views.py
@csrf_exempt
def add_task(request):
if request.method == 'POST':
data = json.loads(request.body)
todo = TodoItem.objects.create(title=data['title'])
return JsonResponse({'success': True, 'id': todo.id})
3. AJAX Magic
// todos.html
function toggleComplete(id) {
fetch(`/toggle-complete/${id}/`, {
method: 'POST',
headers: {
'Content-Type': 'application/json',
'X-CSRFToken': csrfToken
}
})
.then(response => response.json())
.then(data => {
// Update UI dynamically
});
}
Getting Started
Clone the repo:
Set up virtual environment:
Install dependencies:
Run migrations:
Start the server:
How It Works
Adding Tasks:
User enters task text
AJAX sends POST request
Django creates new TodoItem
UI updates instantly
Toggling Completion:
Click checkbox
AJAX updates server
Task style changes dynamically
Deleting Tasks:
Click delete button
AJAX removes from database
Task fades out smoothly
Cool Features
Real-time updates without page refresh
Smooth animations
Responsive design
Clean, intuitive UI
Suggested Improvements
Authentication:
User accounts
Personal todo lists
Categories:
Group tasks
Color coding
Due Dates:
Task deadlines
Calendar integration
Priority Levels:
Task importance
Sorting options
Debugging Tips
Check browser console for AJAX errors
Django debug toolbar for backend issues
print() statements in views for tracking
Contributing
Feel free to:
Fork the repo
Create feature branches
Submit pull requests
Report issues
Resources
Django Documentation
Fetch API Guide
Bootstrap Docs
Links
GitHub Repository
Live Demo
Issues/Bugs
Wrap Up
Building this Todo app was a fun way to learn Django and AJAX integration. The real-time updates make it feel smooth and modern. Give it a try and let me know what you think!
django #javascript #webdev #tutorial
Happy coding!
Author Of article : idev-design Read full article