Skip to main content

Django: Introduction

Django: Introduction

Django is a high-level Python web framework that enables rapid development of secure, scalable, and maintainable web applications. Built on Python’s robust ecosystem, Django follows the Model-View-Template (MVT) architectural pattern, simplifying tasks like database management, URL routing, and user authentication. This tutorial introduces Django, covering its core concepts, setup, and practical applications for building web applications.


01. What Is Django?

Django is an open-source framework designed to streamline web development by providing reusable components and adhering to the Don’t Repeat Yourself (DRY) principle. It includes an ORM (Object-Relational Mapping) for database interactions, a templating engine for rendering HTML, and built-in tools for security and administration. Django is ideal for projects requiring fast prototyping or complex backend logic, such as content management systems or e-commerce platforms.

Example: Creating a Django Project

# Install Django
pip install django

# Create a new Django project
django-admin startproject myproject

# Navigate to the project directory
cd myproject

# Run the development server
python manage.py runserver

Output:

Watching for file changes with StatReloader
Performing system checks...

System check identified no issues (0 silenced).
May 14, 2025 - 09:42:00
Django version 4.2, using settings 'myproject.settings'
Starting development server at http://127.0.0.1:8000/
Quit the server with CONTROL-C.

Explanation:

  • django-admin startproject - Creates a project directory with essential files.
  • manage.py runserver - Starts a local development server at http://127.0.0.1:8000/.

02. Core Django Concepts

Django’s architecture and components work together to handle web requests efficiently. Below is a summary of key concepts and their roles in web development:

Component Description Use Case
Models Define database schema using Python classes Store and query data
Views Handle request logic and return responses Process user input
Templates Render dynamic HTML content Display data to users
URLs Map URLs to views Route user requests
Admin Auto-generated interface for data management Manage content


2.1 Setting Up a Django App

Example: Creating and Configuring an App

# Create a new app
python manage.py startapp myapp

# Add the app to settings.py
# myproject/settings.py
INSTALLED_APPS = [
    'django.contrib.admin',
    'django.contrib.auth',
    'django.contrib.contenttypes',
    'django.contrib.sessions',
    'django.contrib.messages',
    'django.contrib.staticfiles',
    'myapp',  # Add the new app
]

Output:

Directory 'myapp' created with models.py, views.py, etc.

Explanation:

  • startapp - Generates an app directory with files for models, views, and more.
  • INSTALLED_APPS - Registers the app for Django to recognize it.

2.2 Defining a Model

Example: Creating a Model

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

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

    def __str__(self):
        return self.title
# Create and apply migrations
python manage.py makemigrations
python manage.py migrate

Output:

Migrations for 'myapp':
  myapp/migrations/0001_initial.py
    - Create model Article

Explanation:

  • models.Model - Base class for defining database models.
  • makemigrations - Generates migration files for schema changes.
  • migrate - Applies migrations to the database.

2.3 Creating a View

Example: Defining a Simple View

# myapp/views.py
from django.http import HttpResponse

def home(request):
    return HttpResponse("Welcome to My Django App!")
# myapp/urls.py
from django.urls import path
from . import views

urlpatterns = [
    path('', views.home, name='home'),
]
# myproject/urls.py
from django.contrib import admin
from django.urls import include, path

urlpatterns = [
    path('admin/', admin.site.urls),
    path('', include('myapp.urls')),
]

Output:

Visit http://127.0.0.1:8000/ to see: "Welcome to My Django App!"

Explanation:

  • HttpResponse - Returns a simple text response.
  • urls.py - Maps URLs to views for routing.

2.4 Using Templates

Example: Rendering a Template

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

def home(request):
    return render(request, 'myapp/home.html', {'title': 'Home Page'})
# myapp/templates/myapp/home.html
<!DOCTYPE html>
<html>
<head>
    <title>{{ title }}</title>
</head>
<body>
    <h1>Welcome to {{ title }}!</h1>
</body>
</html>

Output:

Visit http://127.0.0.1:8000/ to see HTML page with "Welcome to Home Page!"

Explanation:

  • render - Renders an HTML template with context data.
  • Templates use {{ variable }} for dynamic content.

2.5 Incorrect Project Setup

Example: Missing App in Settings

# myproject/settings.py (Incorrect)
INSTALLED_APPS = [
    'django.contrib.admin',
    'django.contrib.auth',
    'django.contrib.contenttypes',
    'django.contrib.sessions',
    'django.contrib.messages',
    'django.contrib.staticfiles',
    # 'myapp' is missing
]
python manage.py runserver

Output:

ModuleNotFoundError: No module named 'myapp'

Explanation:

  • Forgetting to add the app to INSTALLED_APPS causes Django to fail to recognize it.
  • Solution: Always register new apps in settings.py.

03. Effective Usage

3.1 Recommended Practices

  • Organize code by creating separate apps for distinct functionalities.

Example: Structuring a Project

# Create apps for different functionalities
python manage.py startapp blog
python manage.py startapp users
# myproject/settings.py
INSTALLED_APPS = [
    'django.contrib.admin',
    'django.contrib.auth',
    'django.contrib.contenttypes',
    'django.contrib.sessions',
    'django.contrib.messages',
    'django.contrib.staticfiles',
    'blog',
    'users',
]
  • Use migrations to manage database schema changes consistently.
  • Leverage Django’s admin interface for quick data management.

3.2 Practices to Avoid

  • Avoid skipping migrations, as this can lead to database inconsistencies.

Example: Skipping Migrations

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

class Article(models.Model):
    title = models.CharField(max_length=200)
    content = models.TextField()
    # New field added without migration
    author = models.CharField(max_length=100)
python manage.py runserver

Output:

django.db.utils.OperationalError: no such column: myapp_article.author
  • Always run makemigrations and migrate after model changes.

04. Common Use Cases

4.1 Building a Blog

Django simplifies creating a blog with models for posts and an admin interface for content management.

Example: Blog Post Model and Admin

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

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

    def __str__(self):
        return self.title
# myapp/admin.py
from django.contrib import admin
from .models import Post

admin.site.register(Post)

Output:

Access http://127.0.0.1:8000/admin/ to manage blog posts.

Explanation:

  • admin.site.register - Adds the model to the admin interface.
  • Enables content creation without custom views.

4.2 User Authentication

Django’s built-in authentication system handles user registration, login, and permissions.

Example: Login View

# myapp/views.py
from django.contrib.auth.decorators import login_required
from django.http import HttpResponse

@login_required
def dashboard(request):
    return HttpResponse(f"Welcome, {request.user.username}!")
# myproject/urls.py
from django.contrib import admin
from django.urls import include, path
from django.contrib.auth import views as auth_views

urlpatterns = [
    path('admin/', admin.site.urls),
    path('login/', auth_views.LoginView.as_view(), name='login'),
    path('dashboard/', include('myapp.urls')),
]

Output:

Visit http://127.0.0.1:8000/login/ to log in, then access dashboard.

Explanation:

  • login_required - Restricts access to authenticated users.
  • auth_views - Provides pre-built login views.

Conclusion

Django’s powerful features, built on Python’s ecosystem, make it an excellent choice for developing robust web applications. By mastering its core components—models, views, templates, and URLs—you can build scalable projects efficiently. Key takeaways:

  • Create projects and apps to organize functionality.
  • Use models and migrations for database management.
  • Leverage templates and views for dynamic content.
  • Apply Django’s admin and authentication for rapid development.

With Django, you’re equipped to build modern web applications, from blogs to complex systems!

Comments