Skip to content

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:

Terminal window
python manage.py makemigrations
python manage.py migrate

Step 2: Create a Form (forms.py)

from django import forms
from .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, redirect
from .models import Book
from .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 path
from .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 book
book = Book.objects.create(title="Django Basics", author="John Doe", published_date="2024-03-01")
# Get all books
books = Book.objects.all()
# Get a single book by ID
book = Book.objects.get(id=1)
# Filter books by author
books_by_author = Book.objects.filter(author="John Doe")
# Update a book
book.title = "Advanced Django"
book.save()
# Delete a book
book.delete()

3️⃣ REST Framework (APIs)

Step 1: Install Django REST Framework

Terminal window
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 serializers
from .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_view
from rest_framework.response import Response
from rest_framework import status
from .models import Book
from .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 path
from .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! 🚀