Deploying a Django App to AWS EC2: My Step-by-Step Setup

Building a Django app locally is one thing. Getting it running on the internet, on your own server, with a real domain and a database that isn't SQLite — that's a different skill entirely. This post walks through exactly how I deployed my Document Review.

Read More

Debugging Gunicorn: "No module named 'django'" on a Working Virtual Environment

A walkthrough of a deployment bug that looked impossible — Django was installed, the venv was active, and gunicorn still couldn't find it.

Read More

Django's Built-in Password Validation — What It Is and How It Works

Django ships with four built-in password validators that check for length, common passwords, numeric-only passwords, and similarity to the user's own info. This post breaks down exactly what they do, why they exist, and how the `try/except ValidationError

Read More

The Django `request` Object — A Beginner's Guide

Every Django view gets one. Here's what's actually inside it.

Read More

Why enctype=\"multipart/form-data\" Matters for File Uploads

It's not about security — it's about how browsers encode and send your form data. One missing attribute, and your file upload silently disappears.

Read More

Django's `get_status_display()`: Showing Pretty Labels Instead of Raw Values

When you save `under_review` in your database but want to show `Under Review` to your users, Django has a built-in trick for that — and you don't have to write it yourself.

Read More

How to Debug Django Correctly — Step by Step

Debugging is one of the most important skills in development. Most beginners try random fixes. Good developers follow a system. This guide explains a simple step-by-step debugging process in Django.

Read More

HTML Forms: `action` and `method` Explained

Most Django beginners wonder why their login form has no action attribute. The answer is simpler than you think — when a view handles both GET and POST at the same URL, the form already knows where to go.

Read More

How Does `document.id` End Up in Your Django Template?

A simple walkthrough of the invisible pipeline — from URL to view to template.

Read More

Why Django Uses POST for Logout (And What's a CSRF Token?)

Ever wondered why logging out requires a form submit instead of just clicking a link? It's not arbitrary — it's your app defending itself against a sneaky attack called CSRF. Here's what's happening under the hood.

Read More