The idea is that if Flask didn't do what it does with the request objects and other variables that are request specific, you will have to receive a bunch of arguments. The way flask handles that is that it makes those available as context variables. They're present in every request. You don't get the mass argument. You see them as global variables. And I said they're magical because even though they look like global variables or not, they're really thread-specific global variables. That's a little bit magic that a lot of people get confused about.