Interview question
What is middleware and how do you use it? Middleware क्या है और कैसे use करते हैं?
Answer
# Flask middleware
from flask import Flask, request, g
import time
app = Flask(__name__)
# Request/response hook
@app.before_request
def before_request():
g.start_time = time.time()
print(f'Request: {request.method} {request.path}')
@app.after_request
def after_request(response):
duration = time.time() - g.start_time
print(f'Response: {response.status_code} ({duration:.2f}s)')
return response
# Custom middleware
class TimingMiddleware:
def __init__(self, app):
self.app = app
def __call__(self, environ, start_response):
start = time.time()
result = self.app(environ, start_response)
duration = time.time() - start
print(f'Request took {duration:.2f}s')
return result
app.wsgi_app = TimingMiddleware(app.wsgi_app)
# Django middleware
class CustomMiddleware:
def __init__(self, get_response):
self.get_response = get_response
def __call__(self, request):
print(f'Processing request: {request.path}')
response = self.get_response(request)
print(f'Generating response with status {response.status_code}')
return response
# In settings.py
MIDDLEWARE = [
'django.middleware.security.SecurityMiddleware',
'myapp.middleware.CustomMiddleware',
]
# FastAPI middleware
from fastapi import FastAPI
from starlette.middleware.base import BaseHTTPMiddleware
import time
app = FastAPI()
class TimingMiddleware(BaseHTTPMiddleware):
async def dispatch(self, request, call_next):
start = time.time()
response = await call_next(request)
duration = time.time() - start
response.headers['X-Process-Time'] = str(duration)
return response
app.add_middleware(TimingMiddleware)
# CORS middleware
from fastapi.middleware.cors import CORSMiddleware
app.add_middleware(
CORSMiddleware,
allow_origins=['http://localhost:3000'],
allow_credentials=True,
allow_methods=['*'],
allow_headers=['*'],
)Flask:
@app.before_request
@app.after_request
Custom WSGI middleware
Django:
Middleware class
__init__ and __call__ methods
Add to MIDDLEWARE setting
FastAPI:
BaseHTTPMiddleware
app.add_middleware()
CORSMiddleware for CORSWas this answer clear?