Crash Course – Django

Course Outline:

Introduction to Django (5 minutes)

pip install django
django-admin startproject myproject

cd myproject
python manage.py runserver

Creating a Django Project (10 minutes)

django-admin startproject myproject
cd myproject
python manage.py runserver

Creating a Django App (10 minutes)

python manage.py startapp myapp

# Add 'myapp' to INSTALLED_APPS in settings.py

Models and Database (10 minutes)

# myapp/models.py
from django.db import models

class Post(models.Model):
    title = models.CharField(max_length=100)
    content = models.TextField()

# Apply migrations
python manage.py makemigrations
python manage.py migrate

# Create admin user and register model
# myapp/admin.py
from django.contrib import admin
from .models import Post

admin.site.register(Post)

Views and Templates (10 minutes)

# myapp/views.py
from django.shortcuts import render
from .models import Post

def index(request):
    posts = Post.objects.all()
    return render(request, 'index.html', {'posts': posts})

# myapp/urls.py
from django.urls import path
from . import views

urlpatterns = [
    path('', views.index, name='index'),
]
# myapp/templates/index.html
<!DOCTYPE html>
<html>
<head>
    <title>My Blog</title>
</head>
<body>
    <h1>Posts</h1>
    {% for post in posts %}
        <h2>{{ post.title }}</h2>
        <p>{{ post.content }}</p>
    {% endfor %}
</body>
</html>

Forms and User Input (10 minutes)

# myapp/forms.py
from django import forms
from .models import Post

class PostForm(forms.ModelForm):
    class Meta:
        model = Post
        fields = ['title', 'content']

# myapp/views.py (add form handling)
from .forms import PostForm

def create_post(request):
    if request.method == 'POST':
        form = PostForm(request.POST)
        if form.is_valid():
            form.save()
    else:
        form = PostForm()
    return render(request, 'create_post.html', {'form': form})

# myapp/urls.py
urlpatterns = [
    path('', views.index, name='index'),
    path('create/', views.create_post, name='create_post'),
]
# myapp/templates/create_post.html
<!DOCTYPE html>
<html>
<head>
    <title>Create Post</title>
</head>
<body>
    <h1>Create a New Post</h1>
    <form method="post">
        {% csrf_token %}
        {{ form.as_p }}
        <button type="submit">Save</button>
    </form>
</body>
</html>