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 অ্যাপ্লিকেশনে মিডলওয়্যার ব্যবহারে কোডের পুনঃব্যবহারযোগ্যতা, নিরাপত্তা, এবং কার্যকারিতা অনেক উন্নত হয়।