Thor with Python Django

Django

The Complete Guide to Learning Django for Beginners

Introduction to Django

Django is a high-level Python web framework that follows the model-template-view (MTV) architectural pattern. Created in 2003 and released publicly in 2005, it’s known for its “batteries included” philosophy, providing almost everything developers need to build web applications out of the box.

Prerequisites

Before starting with Django, you should have:

  • Basic Python knowledge (functions, classes, decorators)
  • Understanding of HTTP and web fundamentals
  • Familiarity with HTML/CSS basics
  • Command line basics
  • Basic database concepts

Setting Up Your Development Environment

1. Install Python and pip

# Check Python version
python --version  # Should be 3.8 or higher

# Check pip version
pip --version

2. Create a Virtual Environment

# Create virtual environment
python -m venv django_env

# Activate virtual environment
# On Windows:
django_env\Scripts\activate
# On macOS/Linux:
source django_env/bin/activate

3. Install Django

pip install django

# Verify installation
django-admin --version

Your First Django Project

Creating a Project

django-admin startproject myproject
cd myproject

Project Structure

myproject/
│
├── manage.py               --> main command runner file
│
└── myproject/              --> main project configuration folder
    ├── __init__.py         --> makes this folder a python package
    ├── settings.py         --> all project configuration settings
    ├── urls.py             --> main project URL routing file
    ├── asgi.py             --> async deployment entry file
    └── wsgi.py             --> deployment entry file for servers
│
└── appname/                --> individual application module folder
    ├── __init__.py         --> makes this folder a python package
    ├── admin.py            --> admin panel customization file
    ├── apps.py             --> app configuration file
    ├── models.py           --> database table schemas
    ├── views.py            --> business logic / response handling
    ├── urls.py             --> app level URL routing
    ├── tests.py            --> test cases for the app
    └── migrations/         --> DB migration files auto generated
│
└── templates/              --> HTML page folder
│
└── static/                  --> CSS / JS / Images folder
ASGI → Asynchronous Server Gateway Interface

WSGI → Web Server Gateway Interface

(simple way to remember:
WSGI = old / traditional sync python web standard
ASGI = new / async + websocket supported standard)

Creating an App

python manage.py startapp myapp

Core Concepts

1. Models

Models define your database structure. Example:

from django.db import models

class Post(models.Model):
    title = models.CharField(max_length=200)
    content = models.TextField()
    created_date = models.DateTimeField(auto_now_add=True)

    def __str__(self):
        return self.title

2. Views

Views handle the logic of your application:

from django.shortcuts import render
from .models import Post

def post_list(request):
    posts = Post.objects.all().order_by('-created_date')
    return render(request, 'blog/post_list.html', {'posts': posts})

3. URLs

URL configuration maps URLs to views:

from django.urls import path
from . import views

urlpatterns = [
    path('posts/', views.post_list, name='post_list'),
    path('post/<int:pk>/', views.post_detail, name='post_detail'),
]

4. Templates

Templates define how data is displayed:

{% extends 'base.html' %}

{% block content %}
    {% for post in posts %}
        <article>
            <h2>{{ post.title }}</h2>
            <p>{{ post.content }}</p>
        </article>
    {% endfor %}
{% endblock %}

Essential Concepts to Master

1. Django Admin

from django.contrib import admin
from .models import Post

admin.site.register(Post)

2. Forms

from django import forms
from .models import Post

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

3. Authentication

from django.contrib.auth.decorators import login_required

@login_required
def create_post(request):
    # View logic here
    pass

Common Django Commands

# Create migrations
python manage.py makemigrations

# Apply migrations
python manage.py migrate

# Create superuser
python manage.py createsuperuser

# Run development server
python manage.py runserver

# Shell
python manage.py shell

Learning Path

1: Basics

  • Django installation and setup
  • Project structure
  • Basic views and URLs
  • Templates basics

2: Models and Admin

  • Database design
  • Model relationships
  • Django admin customization
  • Forms and validation

3: Advanced Topics

  • Class-based views
  • Authentication and authorization
  • Static files
  • Template inheritance

4: Production Ready

  • Deployment basics
  • Security considerations
  • Performance optimization
  • Testing

Remember: Django development is a journey. Take your time to understand core concepts before moving to advanced topics. Practice regularly and build projects to reinforce your learning.

Leave a Reply

Your email address will not be published. Required fields are marked *