زمانی که فلاسک یک درخواست را از سوی کاربر دریافت می کند، باید برخی اطلاعات و اشیا را برای تابعی که مسئول پاسخگویی به آن درخواست است ارسال یا مهیا نماید. بطور مثال برای تابعی که مسئول پاسخگویی به یک درخواست می باشد باید اطلاعات درخواست HTTP ارسال شده به سرور را مهیا نماییم. 

بدین منظور یک راه ساده این است که فلاسک این اطلاعات را به عنوان پارامتر به تابع مربوط (مسئول پاسخگویی به درخواست) ارسال نماید، اما اگر بخواهیم این کار را انجام دهیم هر یک از توابع باید یکسری پارامترهای ورودی داشته باشد که اصلا معلوم نیست آن تابع قصد استفاده از آن را دارد یا خیر. یک دلیل دیگر برای بد بودن این راه این است که تعداد این اطلاعات که باید به تابع مربوطه ارسال شود ممکن است بسیار زیاد شود. 


برای دوری کردن از این راه از مفهومی به عنوان context استفاده می کنیم که ما را قادر می سازد یکسری اطلاعات را بصورت موقت به شکل globally در دسترس داشته باشیم. بطور مثال کد زیر را در نظر بگیرید‌ :


from flask import request


@app.route(‘/‘)

def index():

user_agent = request.headers.get(‘User-Agent’)

return ‘<p>Your browser is %s</p>’ %user_agent


توجه کنید که ما چطور از request استفاده می کنیم. اگر بخواهیم از مواردی همچون request به عنوان یک متغییر global استفاده کنیم یک مشکل اساسی وجود دارد. ممکن است سروری داشته باشیم که چند نخی باشد و در یک زمان واحد چندین کاربر روی چندین نخ درخواست هایی را ارسال می کنند و هر یک باید request مجزایی داشته باشند. اینجاست که context به فلاسک این امکان را می دهد تا هر نخ بصورت جداگانه متغییرهای global مجزایی داشته باشند. 


بطور کلی دو نوع context در فلاسک داریم که application و request نام دارد. جدول زیر متغییرهایی که توسط هر یک از این دو نوع در دسترس ما قرار می گیرند را شرح می دهد :



قبل از اینکه درخواستی از سمت فلاسک به توابع فرستاده شود دو context موجود فعال می شوند و زمانی که تمامی این درخواست ها مدیریت و پاسخ داده شد این دو از بین خواهند رفت. زمانی که application context فعال شد ما می توانیم به دو متغییر current_app و g دسترسی داشته باشیم. همین ترتیب دسترسی برای request context  نیز صدق می کند، ولی اگر قبل یا بعد از این پروسه بخواهیم به این دو دسترسی داشته باشیم خطایی ایجاد خواهد شد.