Flask একটি মাইক্রোফ্রেমওয়ার্ক হিসেবে কাজ করে, এবং এতে Middleware ব্যবহারের মাধ্যমে অ্যাপ্লিকেশন প্রক্রিয়াগুলির মধ্যে প্রক্রিয়া বা ট্রান্সফরমেশন যুক্ত করা যায়। Middleware হলো একটি ইন্টারমিডিয়েট প্রসেস যা একটি HTTP রিকোয়েস্ট আসার পূর্বে এবং তার রেসপন্স যাওয়ার পর কাস্টম অপারেশন বা কার্যাবলী সম্পাদন করতে ব্যবহৃত হয়।
১. Flask Middleware কী?
Middleware হলো এক বা একাধিক ফাংশন বা ক্লাস যা Flask অ্যাপ্লিকেশনের Request এবং Response সাইকেলের মধ্যবর্তী অংশে প্রবাহিত হয়। এটি সাধারণত রিকোয়েস্ট বা রেসপন্সের ওপর কোনো বিশেষ প্রক্রিয়া প্রয়োগ করার জন্য ব্যবহৃত হয়, যেমন লগিং, অথেন্টিকেশন, রেট লিমিটিং, বা নিরাপত্তা সুরক্ষা।
Flask নিজে WSGI (Web Server Gateway Interface) ভিত্তিক, এবং Flask অ্যাপ্লিকেশনও WSGI অ্যাপ্লিকেশন হিসেবে কাজ করে। Flask-এ Middleware-এর মতো কার্যকারিতা প্রয়োগ করতে, আপনি WSGI middleware ব্যবহার করতে পারেন।
২. Flask Middleware ব্যবহারের পদ্ধতি
Flask-এর মধ্যে middleware কিভাবে কাজ করে, তা বোঝার জন্য একটি সাধারণ উদাহরণ:
উদাহরণ: Basic Middleware
from flask import Flask, request, jsonify
import time
app = Flask(__name__)
# Basic Middleware - রিকোয়েস্ট প্রসেসিংয়ের আগে লগ করা হবে
@app.before_request
def log_request():
print(f"Request URL: {request.url}")
print(f"Request Method: {request.method}")
print(f"Request Time: {time.time()}")
@app.after_request
def log_response(response):
print(f"Response Status: {response.status}")
return response
@app.route("/")
def home():
return jsonify({"message": "Hello, Flask Middleware!"})
if __name__ == "__main__":
app.run(debug=True)
এখানে:
@app.before_request: এটি Flask-এ একটি ডেকোরেটর, যা রিকোয়েস্ট আসার আগে কোনো ফাংশন চালানোর জন্য ব্যবহৃত হয়।@app.after_request: এটি রেসপন্স ফিরে যাওয়ার আগে কোনো কার্যকরী ফাংশন চালানোর জন্য ব্যবহৃত হয়।
এই কোডে, রিকোয়েস্ট আসার আগে এবং রেসপন্স ফেরত যাওয়ার আগে কিছু লগিং করা হবে।
৩. Custom Middleware তৈরি করা
Flask-এ কাস্টম middleware তৈরি করতে হলে, WSGI middleware ব্যবহার করা হয়। এটি আপনার Flask অ্যাপ্লিকেশনের মধ্যে কাস্টম ফাংশনালিটি যুক্ত করতে সাহায্য করে।
উদাহরণ: Custom Middleware তৈরি করা
from flask import Flask, request, jsonify
import time
app = Flask(__name__)
# Custom Middleware
class CustomMiddleware:
def __init__(self, app):
self.app = app
def __call__(self, environ, start_response):
start_time = time.time()
# Request Logging
print(f"Request URL: {environ.get('PATH_INFO')}")
print(f"Request Method: {environ.get('REQUEST_METHOD')}")
# Call the next middleware or Flask app
response = self.app(environ, start_response)
# Response Logging
duration = time.time() - start_time
print(f"Response Duration: {duration:.2f} seconds")
return response
# Apply Custom Middleware
app.wsgi_app = CustomMiddleware(app.wsgi_app)
@app.route("/")
def home():
return jsonify({"message": "Hello from Custom Middleware!"})
if __name__ == "__main__":
app.run(debug=True)
এখানে:
CustomMiddlewareক্লাসটি WSGI middleware হিসেবে কাজ করছে।__call__মেথডটি WSGI অ্যাপ্লিকেশন হিসেবে কাজ করে এবং এখানে রিকোয়েস্টের সময় এবং রেসপন্সের সময় লগ করা হচ্ছে।app.wsgi_app = CustomMiddleware(app.wsgi_app): এখানে Flask অ্যাপ্লিকেশনের WSGI অ্যাপকে কাস্টম middleware দ্বারা র্যাপ করা হয়েছে।
৪. Flask Middleware ব্যবহারের সুবিধা
- লগিং: আপনি রিকোয়েস্ট এবং রেসপন্স লগ করতে পারেন।
- অথেন্টিকেশন: ফর্ম বা টোকেন যাচাইয়ের মতো কাজ রিকোয়েস্ট আসার আগে করতে পারেন।
- রেট লিমিটিং: একই ব্যবহারকারীর একাধিক রিকোয়েস্ট প্রতিরোধ করা যেতে পারে।
- নিরাপত্তা: CSRF, CORS বা অন্যান্য নিরাপত্তা ব্যবস্থা প্রয়োগ করতে পারেন।
- প্রতিক্রিয়া পরিবর্তন: রেসপন্স ফিরে যাওয়ার আগে প্রক্রিয়া পরিবর্তন করা।
৫. Flask Middleware ডেভেলপমেন্টের প্রক্রিয়া
১. WSGI Middleware:
Flask WSGI middleware-এর মাধ্যমে কাস্টম কনফিগারেশন, লগিং বা অন্য কোন ফাংশনালিটি অ্যাপ্লিকেশনে যোগ করা যায়। এই middleware ডেভেলপমেন্ট সহজ এবং অত্যন্ত শক্তিশালী।
২. Flask-এ before_request এবং after_request:
Flask-এ before_request এবং after_request ডেকোরেটরগুলি মূলত এক ধরনের middleware হিসেবে কাজ করে। তবে এগুলি সরাসরি WSGI স্তরের middleware নয়, বরং Flask রিকোয়েস্ট লাইফ সাইকেল সাথেই যুক্ত থাকে।
৩. কমপ্লেক্স ওয়েব অ্যাপ্লিকেশন:
মাঝেমধ্যে Flask অ্যাপ্লিকেশন বড় হতে পারে, যেখানে একাধিক রিকোয়েস্ট হ্যান্ডলিং এবং রেসপন্স হ্যান্ডলিং প্রক্রিয়া যুক্ত থাকে। এই সময় WSGI middleware ব্যবহার করলে আপনি অ্যাপ্লিকেশনটির কার্যক্ষমতা এবং সিকিউরিটি অনেকটা উন্নত করতে পারবেন।
৬. Flask-এ Middleware ব্যবহার করার ক্ষেত্রে কিছু পরামর্শ
- Performant Middleware: Middleware রিকোয়েস্ট হ্যান্ডলিং প্রক্রিয়ার অংশ, সুতরাং এটি দ্রুত এবং কার্যকরী হওয়া উচিত।
- Logging: রিকোয়েস্ট এবং রেসপন্স সম্পর্কিত তথ্য লগ করতে হলে middleware ব্যবহার করা যেতে পারে।
- Error Handling: Middleware মাধ্যমে অ্যাপ্লিকেশনের সাধারণ ত্রুটির তথ্য এবং অন্যান্য ভ্যালিডেশন প্রক্রিয়া হ্যান্ডেল করা যায়।
Flask-এ middleware ব্যবহারের মাধ্যমে আপনি রিকোয়েস্ট এবং রেসপন্স সাইকেলের মধ্যে বিভিন্ন প্রক্রিয়া যুক্ত করতে পারেন। এটি নিরাপত্তা, অথেন্টিকেশন, রেট লিমিটিং, লগিং ইত্যাদি কার্যাবলীর জন্য উপযুক্ত। Flask অ্যাপ্লিকেশনটির কার্যক্ষমতা এবং নিরাপত্তা উন্নত করার জন্য কাস্টম WSGI middleware একটি শক্তিশালী টুল হিসেবে ব্যবহৃত হতে পারে।
Middleware হলো একটি সফটওয়্যার কম্পোনেন্ট যা HTTP রিকোয়েস্ট এবং রেসপন্স প্রসেসের মধ্যে কাজ করে। এটি সাধারণত অ্যাপ্লিকেশনের কার্যকারিতা বাড়াতে ব্যবহৃত হয়, যেমন লগিং, সেশন ম্যানেজমেন্ট, অথেনটিকেশন, বা রিকোয়েস্ট/রেসপন্স প্রক্রিয়ায় পরিবর্তন করা। Flask-এ, middleware সাধারণত before request এবং after request হ্যান্ডলার হিসেবে কাজ করে।
Flask প্রকৃতপক্ষে middleware এর জন্য ডিফল্ট সাপোর্ট সরবরাহ করে না, তবে আপনি Flask এর বিউটিন হুকস এবং before_request, after_request, বা teardown_request ডেকোরেটর ব্যবহার করে middleware তৈরি করতে পারেন।
Middleware কী?
Middleware হলো একটি স্তর যা সার্ভার রিকোয়েস্ট এবং রেসপন্সের মধ্যে কাজ করে। এটি সাধারণত বিভিন্ন কাজ সম্পাদন করে, যেমন:
- রিকোয়েস্টের ডেটা পর্যালোচনা করা।
- ইউজার অথেনটিকেশন চেক করা।
- রিকোয়েস্টের লোগিং।
- রেসপন্স মডিফাই করা।
Flask অ্যাপ্লিকেশনের কাস্টম মেথড বা ফাংশনগুলোকে middleware হিসেবে ব্যবহার করা যেতে পারে, যা রিকোয়েস্টের পরবর্তী স্টেপে যাওয়ার আগে বা রেসপন্স তৈরি হওয়ার পরে কার্যকরী হয়।
Flask-এ Middleware কিভাবে কাজ করে?
Flask-এ middleware সাধারণত before request এবং after request হুকের মাধ্যমে কাজ করে। before_request হুক রিকোয়েস্টের আগের যে কোনো প্রক্রিয়া সম্পাদন করতে ব্যবহৃত হয়, এবং after_request হুক রেসপন্স তৈরি হওয়ার পরে কার্যকরী হয়।
উদাহরণ ১: Before Request Middleware
from flask import Flask, request
app = Flask(__name__)
@app.before_request
def before_request():
print("রিকোয়েস্ট আসছে:", request.url)
@app.route("/")
def home():
return "স্বাগতম হোমপেজে!"
if __name__ == "__main__":
app.run(debug=True)
এখানে:
@app.before_requestডেকোরেটর রিকোয়েস্ট আসার আগে before_request ফাংশনটি চালু করবে। এটি লগিং, অথেনটিকেশন বা অন্যান্য কাজ করতে ব্যবহৃত হতে পারে।
উদাহরণ ২: After Request Middleware
@app.after_request
def after_request(response):
print("রেসপন্স পাঠানো হচ্ছে:", response.status)
return response
এখানে:
@app.after_requestডেকোরেটর রেসপন্সের পরবর্তী প্রক্রিয়া সম্পাদন করতে ব্যবহৃত হয়, যেমন লোগিং বা রেসপন্স মডিফাই করা।
Flask-এ Middleware তৈরি করতে before_request এবং after_request হুক ব্যবহার
Flask-এ middleware তৈরি করার সবচেয়ে সাধারণ উপায় হলো before_request এবং after_request হুক ব্যবহার করা।
before_request:
এটি এমন একটি ফাংশন যা রিকোয়েস্ট আসার আগে চালানো হয়। এটি সাধারনত রিকোয়েস্ট ভ্যালিডেশন, অথেনটিকেশন, লগিং ইত্যাদি কাজের জন্য ব্যবহৃত হয়।
@app.before_request
def before_request():
print("Before request: Performing authentication or other tasks.")
after_request:
এটি রেসপন্স তৈরি হওয়ার পরে চালানো হয়। এটি সাধারনত রেসপন্সের হেডার বা কনটেন্ট মডিফাই করতে ব্যবহৃত হয়।
@app.after_request
def after_request(response):
print("After request: Modifying the response.")
response.headers["X-Custom-Header"] = "This is a custom header"
return response
teardown_request:
teardown_request একটি বিশেষ ফাংশন, যা রিকোয়েস্ট সম্পন্ন হওয়ার পর এবং রেসপন্স ফেরত দেওয়ার আগে চালানো হয়। এটি সাধারনত কনেকশন ক্লোজ বা ক্লিনআপের জন্য ব্যবহৃত হয়।
@app.teardown_request
def teardown_request(exception):
print("Tearing down the request.")
Flask-এ Middleware এর কিছু সাধারণ ব্যবহার
- Authentication Middleware: ব্যবহারকারীর অথেনটিকেশন যাচাই করা।
- Logging Middleware: প্রতিটি রিকোয়েস্টের জন্য লগ তৈরি করা।
- Error Handling Middleware: রিকোয়েস্ট প্রক্রিয়া করার সময় ত্রুটি ধরতে এবং সঠিক রেসপন্স দিতে সাহায্য করে।
- CORS (Cross-Origin Resource Sharing): CORS হেডার যোগ করা।
- Request Modification: রিকোয়েস্টের ডেটা বা প্যারামিটার পরিবর্তন করা।
উদাহরণ: Authentication Middleware
@app.before_request
def check_authentication():
if not request.headers.get('Authorization'):
return "Unauthorized", 401
এখানে, যদি রিকোয়েস্টে Authorization হেডার না থাকে, তাহলে 401 Unauthorized রেসপন্স ফেরত যাবে।
Flask-এ Middleware মূলত before_request, after_request, এবং teardown_request হুকের মাধ্যমে তৈরি করা হয়। এটি রিকোয়েস্টের প্রক্রিয়ার মধ্যে বিভিন্ন ধরনের কাস্টম লজিক যুক্ত করতে সহায়ক। Flask এর এই flexibility ব্যবহারের মাধ্যমে আপনি আপনার অ্যাপ্লিকেশনকে আরো শক্তিশালী এবং নিয়ন্ত্রিত করতে পারেন। Middleware ব্যবহারের মাধ্যমে আপনি প্রয়োজন অনুযায়ী রিকোয়েস্ট হ্যান্ডলিং, অথেনটিকেশন, লগিং এবং অন্যান্য সিস্টেম কার্যক্রমকে কেন্দ্রিক করতে পারেন।
Flask-এ Middleware এমন একটি প্রক্রিয়া যা অ্যাপ্লিকেশনের রিকোয়েস্ট এবং রেসপন্স সাইকেলের মধ্যে কোনো কাজ সম্পাদন করার জন্য ব্যবহৃত হয়। এটি অ্যাপ্লিকেশন লজিকের উপর নির্ভরশীল না হয়ে, HTTP রিকোয়েস্ট গ্রহণের আগে এবং রেসপন্স পাঠানোর আগে কিছু অতিরিক্ত ফিচার বা কার্যকলাপ যুক্ত করতে সাহায্য করে।
Flask-এ সাধারণত Middleware তৈরি করতে before_request এবং after_request হ্যান্ডলার ব্যবহার করা হয়। তবে Flask-এ কাস্টম Middleware তৈরি করার জন্য আপনাকে একটি Wsgi Middleware ক্লাস তৈরি করতে হয়, যা Flask অ্যাপ্লিকেশন চলার সময় বিভিন্ন ধরনের ম্যানিপুলেশন করতে সক্ষম।
১. Flask Middleware কী?
Flask অ্যাপ্লিকেশনে Middleware এমন একটি উপাদান যা অ্যাপ্লিকেশনের রিকোয়েস্ট/রেসপন্স সাইকেলকে প্রসেস করার সময় অতিরিক্ত কাজ বা যাচাই (validation), লগিং (logging), বা অন্যান্য কার্যক্রম সম্পাদন করতে ব্যবহৃত হয়। Flask নেটিভভাবে WSGI middleware সাপোর্ট করে, যা Flask অ্যাপ্লিকেশন চলানোর জন্য ব্যবহৃত হয়।
২. Flask-এ Custom Middleware তৈরি করা
Flask-এ Custom Middleware তৈরি করতে আপনি একটি কাস্টম ক্লাস তৈরি করতে পারেন, যেটি WSGI অ্যাপ্লিকেশনের মধ্যে ইনটেরসেপ্ট করে এবং রিকোয়েস্ট এবং রেসপন্সের সাথে কাজ করে। Flask-এ Middleware কনফিগার করা হয় অ্যাপ্লিকেশনের __call__ মেথডের মাধ্যমে।
উদাহরণ: Custom Middleware তৈরি করা
from flask import Flask, request, jsonify
import time
app = Flask(__name__)
# Custom Middleware তৈরি করা
class CustomMiddleware:
def __init__(self, app):
self.app = app
def __call__(self, environ, start_response):
# রিকোয়েস্টের সময় নোট করা (Request Time)
start_time = time.time()
def custom_start_response(status, headers, exc_info=None):
# রেসপন্সের সময় বের করা (Response Time)
end_time = time.time()
elapsed_time = end_time - start_time
# এক্সট্রা হেডার যোগ করা
headers.append(('X-Processing-Time', str(elapsed_time)))
return start_response(status, headers, exc_info)
return self.app(environ, custom_start_response)
# Middleware অ্যাপ্লিকেশনের সাথে যুক্ত করা
app.wsgi_app = CustomMiddleware(app.wsgi_app)
@app.route("/")
def home():
return jsonify({"message": "Hello, Flask!"})
if __name__ == "__main__":
app.run(debug=True)
এখানে:
CustomMiddlewareক্লাস একটি কাস্টম WSGI middleware তৈরি করেছে।__call__মেথডের মাধ্যমে রিকোয়েস্ট আসার সময় এবং রেসপন্স ফেরত দেওয়ার সময় হিসাব করা হচ্ছে।X-Processing-Timeহেডার রেসপন্সে যোগ করা হচ্ছে, যা HTTP রেসপন্সের প্রসেসিং টাইম জানাবে।
এই কোডটি চালানোর পরে:
- আপনি যদি ব্রাউজারে বা API ক্লায়েন্টে রিকোয়েস্ট করেন, তাহলে রেসপন্সের সাথে একটি কাস্টম হেডার
X-Processing-Timeথাকবে যা প্রসেসিং টাইম দেখাবে।
৩. Flask Middleware Using before_request and after_request
Flask তে before_request এবং after_request ডেকোরেটর ব্যবহার করে খুব সহজে কাস্টম Middleware তৈরি করা যায়। এখানে before_request রিকোয়েস্ট আসার আগে কার্যকর হয়, এবং after_request রিকোয়েস্ট সম্পন্ন হওয়ার পরে কার্যকর হয়।
উদাহরণ: before_request এবং after_request ব্যবহার করা
from flask import Flask, request, jsonify
app = Flask(__name__)
# before_request middleware
@app.before_request
def before_request_func():
print(f"Request Method: {request.method}, Request URL: {request.url}")
# after_request middleware
@app.after_request
def after_request_func(response):
print(f"Response Status: {response.status}")
return response
@app.route("/")
def home():
return jsonify({"message": "Hello from Flask!"})
if __name__ == "__main__":
app.run(debug=True)
এখানে:
before_request_func(): এটি প্রতিটি রিকোয়েস্ট আসার আগে চালিত হবে, এবং রিকোয়েস্টের তথ্য যেমনrequest.methodএবংrequest.urlলগ করবে।after_request_func(): এটি প্রতিটি রিকোয়েস্ট শেষে চালিত হবে এবং রেসপন্সের স্ট্যাটাস কোডresponse.statusলগ করবে।
ফলস্বরূপ:
before_requestএবংafter_requestউভয় ফাংশন রিকোয়েস্ট এবং রেসপন্স সাইকেল সম্পর্কে তথ্য সংগ্রহ করবে।
৪. Flask Middleware ব্যবহারের সুবিধা
- গ্লোবাল কার্যকলাপ: Middleware অ্যাপ্লিকেশনের গ্লোবাল কার্যকলাপ যেমন লগিং, সিকিউরিটি চেক, অথবা অথেনটিকেশন কার্যকর করার জন্য ব্যবহৃত হতে পারে।
- কাস্টম হেডার যোগ করা: Middleware ব্যবহার করে আপনি HTTP রেসপন্সে কাস্টম হেডার যোগ করতে পারেন।
- প্রোফাইলিং এবং টাইমিং: অ্যাপ্লিকেশনের পারফরম্যান্স ট্র্যাক করতে এবং রিকোয়েস্ট/রেসপন্সের জন্য সময় গণনা করতে Middleware ব্যবহার করা যেতে পারে।
- অথেনটিকেশন এবং অথোরাইজেশন: Middleware এর মাধ্যমে প্রি-অথেনটিকেশন বা অথোরাইজেশন চেক করা যেতে পারে।
৫. Flask Middleware Error Handling
Middleware ব্যবহার করে আপনি ত্রুটি হ্যান্ডলিংও করতে পারেন। যেমন, যদি কোনো রিকোয়েস্টের জন্য অ্যানথেন্টিকেশন বা অথোরাইজেশন চেক করতে চান, তবে আপনি Middleware ব্যবহার করে ত্রুটি হ্যান্ডল করতে পারবেন।
from flask import Flask, jsonify
app = Flask(__name__)
class AuthMiddleware:
def __init__(self, app):
self.app = app
def __call__(self, environ, start_response):
if environ.get('HTTP_AUTHORIZATION') is None:
start_response('401 Unauthorized', [('Content-Type', 'application/json')])
return [b'{"error": "Unauthorized"}']
return self.app(environ, start_response)
app.wsgi_app = AuthMiddleware(app.wsgi_app)
@app.route("/")
def home():
return jsonify({"message": "Hello, you are authorized!"})
if __name__ == "__main__":
app.run(debug=True)
এখানে:
AuthMiddlewareকাস্টম Middleware যা চেক করে যদিAuthorizationহেডার উপস্থিত না থাকে তবে 401 Unauthorized রেসপন্স পাঠানো হবে।
Flask-এ Custom Middleware তৈরি এবং ব্যবহার করা খুবই সহজ এবং শক্তিশালী। আপনি Flask-এ before_request এবং after_request ডেকোরেটর ব্যবহার করে সহজ Middleware তৈরি করতে পারেন, অথবা কাস্টম WSGI Middleware তৈরি করতে পারেন যা রিকোয়েস্ট এবং রেসপন্স সাইকেলে অতিরিক্ত কার্যকলাপ সম্পাদন করতে পারে। Middleware ব্যবহারের মাধ্যমে আপনি লগিং, অথেনটিকেশন, পারফরম্যান্স প্রোফাইলিং, ত্রুটি হ্যান্ডলিং ইত্যাদি কার্যক্রম সহজে করতে পারেন।
Flask-এ Middleware হলো একটি ফাংশন বা ক্লাস যা রিকোয়েস্ট এবং রেসপন্সের উপর কিছু প্রক্রিয়া বা কাস্টম লজিক প্রয়োগ করতে সাহায্য করে। এটি মূলত ফ্লাস্ক অ্যাপ্লিকেশনের রিকোয়েস্ট সার্ভিং চেইনের মধ্যবর্তী অংশ হিসেবে কাজ করে। Flask-এ সাধারণত Request Middleware এবং Response Middleware ব্যবহৃত হয়।
- Request Middleware: রিকোয়েস্টের আগে কিছু প্রক্রিয়া বা লজিক প্রয়োগ করতে ব্যবহৃত হয়।
- Response Middleware: রেসপন্সের পরে কিছু প্রক্রিয়া বা লজিক প্রয়োগ করতে ব্যবহৃত হয়।
Flask-এ middleware সাধারণত before_request, after_request, এবং teardown_request হুক ফাংশন ব্যবহার করে হ্যান্ডল করা হয়।
১. Request Middleware (before_request)
Flask-এ before_request হুক ফাংশন ব্যবহার করা হয়, যা একটি রিকোয়েস্ট আসার আগে চালিত হয়। এটি সাধারণত রিকোয়েস্টের যাচাই, লগিং, বা অন্যান্য প্রস্তুতি কাজের জন্য ব্যবহৃত হয়।
উদাহরণ:
from flask import Flask, request
app = Flask(__name__)
@app.before_request
def before_request_func():
print(f"নতুন রিকোয়েস্ট আসছে: {request.url}")
# আপনি এখানে লগিং, অথেনটিকেশন বা রিকোয়েস্ট যাচাই করতে পারেন
@app.route('/')
def home():
return "হ্যালো, Flask!"
if __name__ == "__main__":
app.run(debug=True)
এখানে:
@app.before_request: এই ডেকোরেটরটি রিকোয়েস্ট প্রক্রিয়াকরণের আগে ফাংশনbefore_request_func()কে কল করবে।
ব্যবহার:
- অথেনটিকেশন চেক: রিকোয়েস্টে কোনও বিশেষ হেডার বা টোকেন না থাকলে ব্যবহারকারীকে অনুমতি না দেওয়ার জন্য।
- রিকোয়েস্ট লগিং: রিকোয়েস্টের বিস্তারিত লগ রাখা।
২. Response Middleware (after_request)
Flask-এ after_request হুক ফাংশন ব্যবহার করা হয়, যা একটি রিকোয়েস্ট প্রক্রিয়াকরণের পরে রেসপন্স তৈরি হওয়ার পর চলিত হয়। এটি সাধারণত রেসপন্স মডিফিকেশন বা রেসপন্সের পরবর্তী কার্যক্রমের জন্য ব্যবহৃত হয়।
উদাহরণ:
@app.after_request
def after_request_func(response):
print(f"রেসপন্স স্ট্যাটাস কোড: {response.status_code}")
# আপনি এখানে রেসপন্স মডিফিকেশন বা রেসপন্স হেডার যোগ করতে পারেন
response.headers['X-Custom-Header'] = 'Custom value'
return response
এখানে:
@app.after_request: এই ডেকোরেটরটি রিকোয়েস্ট প্রক্রিয়া শেষ হওয়ার পর এবং রেসপন্স তৈরি হওয়ার পরafter_request_func()ফাংশনটি কল করবে।response: রেসপন্স অবজেক্টটি রিটার্ন করে এবং আপনি এতে কাস্টম হেডার বা অন্যান্য পরিবর্তন করতে পারেন।
ব্যবহার:
- রেসপন্স হেডার পরিবর্তন: রেসপন্সের সাথে কাস্টম হেডার যোগ করা।
- রেসপন্স লগিং: প্রতিটি রেসপন্সের জন্য লগ তৈরি করা।
৩. Teardown Middleware (teardown_request)
Flask-এ teardown_request হুক ফাংশন ব্যবহৃত হয়, যা রিকোয়েস্টের পরে এবং রেসপন্স ক্লোজ হওয়ার আগে সম্পাদিত হয়। এটি সাধারণত রিসোর্স ক্লোজ বা কোন ক্লিন-আপ কাজের জন্য ব্যবহৃত হয়, যেমন ডাটাবেস কনেকশন বন্ধ করা।
উদাহরণ:
@app.teardown_request
def teardown_request_func(exception):
print("রিকোয়েস্ট সম্পন্ন হয়েছে, ক্লিন-আপ করা হচ্ছে...")
# এখানে আপনি ডাটাবেস কানেকশন বন্ধ বা অন্যান্য রিসোর্স ক্লোজ করতে পারেন
if hasattr(g, 'db_connection'):
g.db_connection.close()
এখানে:
@app.teardown_request: রিকোয়েস্ট প্রক্রিয়াকরণ শেষে এটি কল হবে।exception: যদি রিকোয়েস্ট প্রক্রিয়া চলাকালীন কোনো ত্রুটি ঘটে, তবেexceptionআর্গুমেন্টে ত্রুটির তথ্য পাওয়া যাবে।
ব্যবহার:
- ডাটাবেস কনেকশন বন্ধ করা: একাধিক ডাটাবেস কনেকশন ব্যবহারের পর সেগুলি ক্লোজ করা।
- সার্ভার রিসোর্স মুক্ত করা: রিকোয়েস্টের শেষে অপ্রয়োজনীয় রিসোর্স ক্লিন-আপ করা।
৪. Custom Middleware (Custom Function)
Flask-এ কাস্টম মিডলওয়্যার তৈরি করার জন্য আপনি নিজের ফাংশন তৈরি করে তা before_request বা after_request ফাংশনের মধ্যে কল করতে পারেন।
উদাহরণ:
from flask import Flask, jsonify, request
app = Flask(__name__)
# কাস্টম মিডলওয়্যার
def custom_middleware():
print("কাস্টম মিডলওয়্যার কার্যকরী হচ্ছে!")
# এখানে আপনি রিকোয়েস্ট হেডার যাচাই, রিকোয়েস্ট লগিং ইত্যাদি করতে পারেন
@app.before_request
def before_request_func():
custom_middleware() # কাস্টম মিডলওয়্যার কল করা
@app.route('/')
def home():
return jsonify({"message": "Flask Middleware Example"})
if __name__ == "__main__":
app.run(debug=True)
এখানে:
custom_middleware()একটি কাস্টম মিডলওয়্যার ফাংশন, যা রিকোয়েস্ট প্রক্রিয়া শুরুর আগে কল হচ্ছে।
৫. Error Handling Middleware
Flask-এ আপনি কাস্টম ত্রুটি হ্যান্ডলিং মিডলওয়্যারও তৈরি করতে পারেন, যা রিকোয়েস্ট প্রক্রিয়া চলাকালীন কোনো ত্রুটি ঘটলে তা ক্যাচ এবং প্রোসেস করতে সহায়ক।
উদাহরণ:
@app.errorhandler(404)
def not_found(error):
return jsonify({"error": "পেজটি পাওয়া যায়নি!"}), 404
এখানে:
@app.errorhandler(404): এটি 404 ত্রুটি হলে একটি কাস্টম রেসপন্স প্রদান করবে।not_found(): এই ফাংশনটি 404 ত্রুটি হলে চালু হবে এবং JSON আউটপুট রিটার্ন করবে।
Flask-এ Request এবং Response Middleware ব্যবস্থাপনা অত্যন্ত নমনীয় এবং শক্তিশালী। আপনি before_request, after_request, এবং teardown_request হুক ফাংশন ব্যবহার করে রিকোয়েস্ট এবং রেসপন্সের উপর বিভিন্ন কাস্টম প্রক্রিয়া প্রয়োগ করতে পারেন। এই মিডলওয়্যারগুলো আপনাকে রিকোয়েস্ট যাচাই, লগিং, ত্রুটি হ্যান্ডলিং, এবং রেসপন্স মডিফিকেশন এর মতো কাজগুলো সহজে করার সুযোগ দেয়। Flask অ্যাপ্লিকেশনে মিডলওয়্যার ব্যবহারে কোডের পুনঃব্যবহারযোগ্যতা, নিরাপত্তা, এবং কার্যকারিতা অনেক উন্নত হয়।
Read more