Skip to main content
Flask Basics Tutorial
CHAPTER 03 Beginner

Understanding Flask Architecture

Updated: May 14, 2026
20 min read

# CHAPTER 3

Understanding Flask Architecture

1. Introduction

Before you write your first line of Flask code, it is crucial to understand *how* Flask processes web traffic. When a user clicks a link on a website, how does that click reach your Python code, and how does your Python code return a web page? In this chapter, we will break down the HTTP Request-Response cycle, explore the MVC pattern as it relates to Flask, and understand the flow of data through a modern web application.

2. Learning Objectives

By the end of this chapter, you will be able to:
  • Explain the Client-Server relationship.
  • Understand the HTTP Request-Response cycle.
  • Map the MVC (Model-View-Controller) architecture to Flask components.
  • Trace the lifecycle of a request through a Flask application.

3. Beginner-Friendly Explanation

Imagine a Restaurant.
  1. 1. The Client (The Customer): You sit at a table and look at a menu. You decide you want a hamburger.
  1. 2. The Request (The Order): You tell the Waiter, "I want a hamburger, no pickles."
  1. 3. The Server (Flask): The Waiter takes your order to the Kitchen. The Kitchen (Python code) receives the order, processes the logic (cooking the meat), and asks the Pantry (The Database) for the buns and lettuce.
  1. 4. The Response (The Meal): The Kitchen places the finished hamburger on a beautiful plate (HTML Template) and the Waiter delivers it back to your table.

A web application is just a digital restaurant. The user asks for a page, Flask cooks the data, and returns the finished HTML.

4. The Request-Response Cycle

Every interaction on the internet follows this strict cycle:
  1. 1. HTTP Request: The user's browser (Chrome/Safari) sends a message over the internet to your server. It says: "GET me the file located at /about."
  1. 2. Routing (Werkzeug): Flask receives the message. It looks at the URL (/about) and checks its internal map. It says, "Ah, the /about URL belongs to the about_page() Python function!"
  1. 3. Execution: Flask runs your Python code. Your code might calculate math, check if the user is logged in, or fetch data from a database.
  1. 4. HTTP Response: Your Python code finishes its work and returns a string of HTML. Flask packages this HTML into a formal HTTP Response and sends it back across the internet to the user's browser to be displayed.

5. Flask and the MVC Architecture

Most modern web development follows the Model-View-Controller (MVC) architectural pattern. It forces developers to separate their code into three distinct jobs. While Flask does not *force* you to use MVC, every professional developer structures their Flask app this way.
  1. 1. Model (Data): The code that interacts with your Database. (e.g., Fetching users from MySQL).
  1. 2. View (Presentation): The HTML/CSS files that the user actually sees. (In Flask, these are powered by the Jinja2 template engine).
  1. 3. Controller (Logic): The Python functions that act as the middleman. They receive the Request, ask the Model for data, pass the data to the View, and return the Response. (In Flask, these are called View Functions or Routes).

*Warning: Terminology clash! In MVC, the "View" is the HTML. In Flask terminology, the Python function is often called a "View Function." Do not let this confuse you; the Python function is always the Controller.*

6. The Lightweight Advantage

If you look at frameworks like Django or Ruby on Rails, they enforce MVC strictly. They generate dozens of files and folders the moment you start a project. Flask does not. Flask allows you to write the Model, View, and Controller all inside a single file called app.py. For a 1-page website, this is incredibly fast and efficient. For a 100-page website, this is a disaster. As a Flask developer, it is *your* responsibility to manually organize your code into separate files (which we will learn in Chapter 12: Blueprints).

7. WSGI: The Hidden Layer

You will often see the term WSGI (Web Server Gateway Interface). Python cannot talk directly to the internet. Web servers (like Nginx or Apache) speak HTTP, but they do not speak Python. WSGI is a translator. It sits between the raw internet server and your Flask application, converting HTTP internet traffic into Python dictionaries that Flask can understand. Flask uses the Werkzeug library to handle all WSGI translations seamlessly behind the scenes.

8. Backend Workflow: Statelessness

The internet is stateless. This means every single Request-Response cycle is completely independent. When you ask the Waiter for a hamburger, he brings it. If you ask him for a napkin five minutes later, he has completely forgotten who you are and that you just ordered a hamburger. To make the Waiter "remember" that you are logged in, we must use Cookies and Sessions (which we will cover in Chapter 11).

9. Best Practices

  • Separation of Concerns: Never write database SQL queries directly inside your HTML templates, and try to avoid writing raw HTML strings inside your Python logic. Keep the Model, View, and Controller strictly separated.

10. Common Mistakes

  • Confusing the Client and Server: Beginners often try to run Python code on the user's computer, or try to use JavaScript's window.alert() inside their Python server code. Remember: Python runs strictly on the remote server (The Kitchen). HTML/JavaScript runs strictly on the user's browser (The Dining Table). They can only communicate via Requests and Responses.

11. Exercises

  1. 1. Explain the Restaurant analogy. Who is the Client, who is the Server, and what represents the Request and Response?

12. Coding Challenges

  • Challenge: Draw a flowchart on a piece of paper. Box 1: User's Browser. Box 2: Flask Router. Box 3: Python Controller Function. Box 4: Database Model. Box 5: HTML Template. Draw arrows showing the exact chronological flow of a GET request.

13. MCQs with Answers

Question 1

In the MVC (Model-View-Controller) architectural pattern, which component is responsible for querying the database and representing the raw data?

Question 2

What is the fundamental nature of the HTTP protocol regarding user interactions?

14. Interview Questions

  • Q: Explain the Request-Response cycle. What role does the WSGI interface (Werkzeug) play in bridging the gap between an HTTP server and a Flask application?
  • Q: Because Flask is a microframework, it does not enforce a rigid folder structure like Django. What are the architectural dangers of this freedom, and how should a professional developer mitigate them?

15. FAQs

Q: Do I need to learn WSGI deeply to use Flask? A: No. Werkzeug handles WSGI entirely behind the scenes. You only need to know it exists when you are deploying your app to a live production server (Chapter 19).

16. Summary

In Chapter 3, we explored the theoretical foundation of web development. We broke down the stateless HTTP Request-Response cycle, comparing it to ordering food at a restaurant. We examined the MVC (Model-View-Controller) architectural pattern and learned how Flask functions as the "Controller," catching incoming requests, processing logic, and returning HTML responses. Understanding this flow is essential before writing code.

17. Next Chapter Recommendation

We have the theory and the environment. It's time to build! Proceed to Chapter 4: Creating Your First Flask Application.

Finish this Chapter

Save your progress on your learning path and prepare for coding interview challenges.

Discussion

Join the discussion

Log in or create a free account to participate.

Sort: ·