1. Advance Django
1️⃣ Forms, Models, and Views
Step 1: Create a Model (models.py
)
from django.db import models
class Book(models.Model): title = models.CharField(max_length=255) author = models.CharField(max_length=100) published_date = models.DateField()
def __str__(self): return self.title
Run migrations:
python manage.py makemigrationspython manage.py migrate
Step 2: Create a Form (forms.py
)
from django import formsfrom .models import Book
class BookForm(forms.ModelForm): class Meta: model = Book fields = ['title', 'author', 'published_date']
Step 3: Create a View (views.py
)
from django.shortcuts import render, redirectfrom .models import Bookfrom .forms import BookForm
def add_book(request): if request.method == "POST": form = BookForm(request.POST) if form.is_valid(): form.save() return redirect('book_list') else: form = BookForm() return render(request, 'add_book.html', {'form': form})
def book_list(request): books = Book.objects.all() return render(request, 'book_list.html', {'books': books})
Step 4: Add URLs (urls.py
)
from django.urls import pathfrom .views import add_book, book_list
urlpatterns = [ path('add/', add_book, name='add_book'), path('books/', book_list, name='book_list'),]
Step 5: Create Template
add_book.html
<form method="POST"> {% csrf_token %} {{ form.as_p }} <button type="submit">Add Book</button></form>
book_list.html
<ul> {% for book in books %} <li>{{ book.title }} by {{ book.author }} ({{ book.published_date }})</li> {% endfor %}</ul>
2️⃣ ORM (Database Queries)
Basic Queries
# Create a new bookbook = Book.objects.create(title="Django Basics", author="John Doe", published_date="2024-03-01")
# Get all booksbooks = Book.objects.all()
# Get a single book by IDbook = Book.objects.get(id=1)
# Filter books by authorbooks_by_author = Book.objects.filter(author="John Doe")
# Update a bookbook.title = "Advanced Django"book.save()
# Delete a bookbook.delete()
3️⃣ REST Framework (APIs)
Step 1: Install Django REST Framework
pip install djangorestframework
Add 'rest_framework'
to INSTALLED_APPS
in settings.py
:
INSTALLED_APPS = [ ... 'rest_framework',]
Step 2: Create a Serializer (serializers.py
)
from rest_framework import serializersfrom .models import Book
class BookSerializer(serializers.ModelSerializer): class Meta: model = Book fields = '__all__'
Step 3: Create API Views (views.py
)
from rest_framework.decorators import api_viewfrom rest_framework.response import Responsefrom rest_framework import statusfrom .models import Bookfrom .serializers import BookSerializer
@api_view(['GET', 'POST'])def book_list_api(request): if request.method == 'GET': books = Book.objects.all() serializer = BookSerializer(books, many=True) return Response(serializer.data)
elif request.method == 'POST': serializer = BookSerializer(data=request.data) if serializer.is_valid(): serializer.save() return Response(serializer.data, status=status.HTTP_201_CREATED) return Response(serializer.errors, status=status.HTTP_400_BAD_REQUEST)
Step 4: Add URL for API (urls.py
)
from django.urls import pathfrom .views import book_list_api
urlpatterns = [ path('api/books/', book_list_api, name='book_list_api'),]
Step 5: Test API with cURL or Postm
- Get Books:
Terminal window curl -X GET http://127.0.0.1:8000/api/books/ - Add a Book:
Terminal window curl -X POST http://127.0.0.1:8000/api/books/ -H "Content-Type: application/json" -d '{"title": "Django API", "author": "Jane Doe", "published_date": "2024-03-03"}'
Now your Django API is live! 🚀