Challenge 3: "Runs on Apache" and "Built with Django" — Solution Walkthrough Why both statements are true at once: "Runs on Apache" describes the web server — the piece of software accepting HTTP connections, handling the request/response cycle, and serving as the front-facing layer of the site. "Built with Django" describes the web application — the actual Python code that decides what a given page contains, talks to the database, and generates the dynamic content of the site. These are two different pieces of software doing two different jobs, exactly as this chapter's own warning box lays out: Apache is not "the website," it's the layer sitting in front of whatever application is actually running. In a real Django deployment, Apache typically receives the incoming request and hands it off to the Django application (often via a gateway interface), then relays Django's generated response back to the browser — the same static/dynamic handoff pattern the chapter described generally, just naming the specific technologies involved. Why this isn't a contradiction: If "runs on Apache" meant the same thing as "the entire site is Apache," the second statement would indeed conflict with it. But because a web server and a web application are two separate, cooperating pieces of software, a single real site can accurately be described by naming either one — they're answering two different questions ("what handles the HTTP layer?" vs. "what generates the page content?"), not competing answers to the same question. WHY THIS WORKS AS AN ANSWER ------------------------------ This exercise is a direct, named-technology application of this chapter's central warning — resolving the apparent tension between two true statements by correctly separating "the web server" from "the web application" is precisely the distinction the chapter exists to make clear before the rest of the course's architecture comparisons build on it.