Python Web App Using Django

Written by

in

Building a robust, scalable, and secure web application in Python has never been easier thanks to Django. Whether you’re a seasoned developer or just starting out, Django’s “batteries‑included” philosophy provides everything you need—from an ORM and authentication system to a powerful admin interface—so you can focus on writing business logic instead of reinventing the wheel. In this guide we’ll walk through the entire lifecycle of a Python web app using Django: setting up the environment, creating a project, developing a simple to‑do list app, and finally deploying it to production. By the end, you’ll have a solid foundation to build more complex applications and a clear roadmap for scaling your Django projects.

Why Choose Django for Python Web Apps

Django stands out among Python web frameworks for several reasons that make it ideal for both small prototypes and large‑scale enterprise solutions.

Key Features of Django

  • Rapid Development: Built‑in admin, forms, and authentication let you ship features quickly.
  • Security First: Protection against SQL injection, XSS, CSRF, and clickjacking out of the box.
  • Scalable Architecture: Supports caching, middleware, and asynchronous views for high‑traffic sites.
  • Extensive Ecosystem: Thousands of reusable apps on Django Packages for payments, REST APIs, and more.
  • Excellent Documentation: Clear, example‑driven docs that reduce onboarding time.

Setting Up the Development Environment

A clean, isolated environment ensures that your project’s dependencies don’t clash with other Python tools on your machine.

Install Python and Virtualenv

# Verify Python version (Django 5.x requires Python 3.8+)
python3 --version

# Install virtualenv if you don’t have it
pip install virtualenv

# Create and activate a virtual environment
python3 -m venv myenv
source myenv/bin/activate  # On Windows use `myenv\Scripts\activate`

Installing Django

# Upgrade pip for best compatibility
pip install --upgrade pip

# Install the latest stable Django release
pip install Django

# Verify installation
django-admin --version

Creating Your First Django Project

With Django installed, you can generate a new project skeleton in a single command.

  1. Start a project named myproject:
    django-admin startproject myproject
  2. Navigate into the project directory:
    cd myproject
  3. Run the development server to confirm everything works:
    python manage.py runserver

    Open http://127.0.0.1:8000/ in your browser; you should see the default Django welcome page.

  4. Create an app called todo:
    python manage.py startapp todo

    The todo app will hold our models, views, and templates for the to‑do list example.

Building a Simple Web App – A To‑Do List Example

Let’s turn the freshly generated project into a functional web app that lets users add, view, and delete tasks.

Defining the Model

In todo/models.py, define a single Task model with a title and completion flag.

from django.db import models

class Task(models.Model):
    title = models.CharField(max_length=255)
    completed = models.BooleanField(default=False)

    def __str__(self):
        return self.title

After saving the file, run migrations to create the database table:

python manage.py makemigrations todo
python manage.py migrate

Creating Views and URLs

In todo/views.py, add three basic views: list tasks, add a task, and delete a task.

from django.shortcuts import render, redirect, get_object_or_404
from .models import Task

def task_list(request):
    tasks = Task.objects.all()
    return render(request, 'todo/task_list.html', {'tasks': tasks})

def add_task(request):
    if request.method == 'POST':
        title = request.POST.get('title')
        if title:
            Task.objects.create(title=title)
        return redirect('task_list')
    return render(request, 'todo/add_task.html')

def delete_task(request, task_id):
    task = get_object_or_404(Task, id=task_id)
    task.delete()
    return redirect('task_list')

Map these views in todo/urls.py and include the file in the project’s main urls.py:

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

urlpatterns = [
    path('', views.task_list, name='task_list'),
    path('add/', views.add_task, name='add_task'),
    path('delete/<int:task_id>/', views.delete_task, name='delete_task'),
]

# myproject/urls.py (add the include)
from django.contrib import admin
from django.urls import path, include

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

Designing Templates

Create a templates/todo folder inside the todo app and add two HTML files.

task_list.html displays all tasks with delete links:

<!DOCTYPE html>
<html>
<head>
    <title>My To‑Do List</title>
</head>
<body>
    <h2>My Tasks</h2>
    <ul>
        {% for task in tasks %}
            <li>
                {{ task.title }}
                {% if not task.completed %} (Pending) {% else %} (Done) {% endif %}
                <a href="{% url 'delete_task' task.id %}">Delete</a>
            </li>
        {% empty %}
            <li>No tasks yet!</li>
        {% endfor %}
    </ul>
    <a href="{% url 'add_task' %}">Add New Task</a>
</body>
</html>

add_task.html provides a simple form:

<!DOCTYPE html>
<html>
<head>
    <title>Add Task</title>
</head>
<body>
    <h2>Add a New Task</h2>
    <form method="post">
        {% csrf_token %}
        <input type="text" name="title" placeholder="Task title" required>
        <button type="submit">Add</button>
    </form>
    <a href="{% url 'task_list' %}">Back to List</a>
</body>
</html>

Run the server again (python manage.py runserver) and navigate to /tasks/ to see your functional to‑do list.

Deploying Your Django Web App

After development, the next step is to move your app to a production environment. Here are three popular deployment strategies:

  • Heroku: Simple Git‑based deployment, automatic SSL, and a managed PostgreSQL add‑on.
  • Docker + Nginx + Gunicorn: Containerize your app for consistent environments and scale with orchestration tools like Kubernetes.
  • Traditional VPS (e.g., DigitalOcean, Linode): Install Python, set up a virtualenv, configure systemd for Gunicorn, and serve static files via Nginx.

Regardless of the platform, remember to:

  • Set DEBUG = False in settings.py.
  • Configure ALLOWED_HOSTS with your domain name.
  • Use a secure secret key (store it in environment variables).
  • Comments

    Leave a Reply

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