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 ব্যবহারের মাধ্যমে আপনি প্রয়োজন অনুযায়ী রিকোয়েস্ট হ্যান্ডলিং, অথেনটিকেশন, লগিং এবং অন্যান্য সিস্টেম কার্যক্রমকে কেন্দ্রিক করতে পারেন।