Flask অ্যাপ্লিকেশনগুলিতে Global Error Handling একটি গুরুত্বপূর্ণ অংশ, যা অ্যাপ্লিকেশনটি বিভিন্ন ধরনের ত্রুটি বা অপ্রত্যাশিত পরিস্থিতিতে সঠিকভাবে সাড়া দিতে সক্ষম করে। Flask ত্রুটি বা এরর হ্যান্ডলিংকে খুব সহজ করে দিয়েছে, যেখানে আপনি কাস্টম Error Handlers তৈরি করতে পারেন যা বিশেষ HTTP স্ট্যাটাস কোড (যেমন 404, 500) এর জন্য কাস্টম রেসপন্স প্রদান করবে।
Flask এর Global Error Handling কনফিগার করার জন্য কিছু সহজ পদক্ষেপ অনুসরণ করা হয়, যেখানে আপনার অ্যাপ্লিকেশন যে ধরনের ত্রুটি পাবে, তার জন্য প্রপার রেসপন্স ফেরত দেওয়া হয়।
১. Flask Error Handling এর মূল ধারণা
Flask-এ Error Handling একটি ইন্টারনাল প্রক্রিয়া যা ব্যবহারকারীর জন্য উপযুক্ত ত্রুটি পেজ তৈরি করে এবং ত্রুটির ধরন অনুযায়ী একটি কাস্টম রেসপন্স প্রদান করে।
Flask Error Handling Syntax:
@app.errorhandler(404)
def not_found_error(error):
return render_template('404.html'), 404
@app.errorhandler(500)
def internal_error(error):
db.session.rollback() # যদি ডাটাবেসে কোনো সমস্যা থাকে
return render_template('500.html'), 500
এখানে:
@app.errorhandler(status_code): এই ডেকোরেটরটি ত্রুটি কোড অনুসারে কাস্টম হ্যান্ডলার তৈরি করতে ব্যবহৃত হয়।error: এটি ত্রুটির বিস্তারিত তথ্য প্রদান করে।
২. Global Error Handling কনফিগার করা
ধাপ ১: app.errorhandler() ব্যবহার করে কাস্টম Error Handlers তৈরি করা
Flask-এ errorhandler() ডেকোরেটরের মাধ্যমে আপনি যেকোনো ধরনের HTTP স্ট্যাটাস কোডের জন্য কাস্টম ত্রুটি হ্যান্ডলার তৈরি করতে পারেন।
উদাহরণ:
from flask import Flask, render_template
app = Flask(__name__)
# 404 - Page Not Found Error Handler
@app.errorhandler(404)
def not_found_error(error):
return render_template('404.html'), 404
# 500 - Internal Server Error Handler
@app.errorhandler(500)
def internal_error(error):
return render_template('500.html'), 500
# 403 - Forbidden Error Handler
@app.errorhandler(403)
def forbidden_error(error):
return render_template('403.html'), 403
# 400 - Bad Request Error Handler
@app.errorhandler(400)
def bad_request_error(error):
return render_template('400.html'), 400
if __name__ == "__main__":
app.run(debug=True)
এখানে:
- 404 Error: পেজ না পাওয়ার ত্রুটির জন্য কাস্টম রেসপন্স।
- 500 Error: সার্ভার সমস্যা বা ইন্টারনাল সার্ভার ত্রুটির জন্য কাস্টম রেসপন্স।
- 403 Error: ব্যবহারকারী অনুমতি না থাকলে ত্রুটি।
- 400 Error: ভুল রিকোয়েস্ট বা Bad Request ত্রুটি।
এভাবে, আপনি প্রতিটি ত্রুটির জন্য পৃথক HTML পেজ তৈরি করতে পারেন যা ব্যবহারকারীর জন্য আরও তথ্য বা নির্দেশনা প্রদান করবে।
ধাপ ২: কাস্টম টেমপ্লেট তৈরি করা
আপনি 404.html, 500.html এবং অন্যান্য ত্রুটি পেজের জন্য কাস্টম HTML টেমপ্লেট তৈরি করতে পারেন।
404.html:
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<title>Page Not Found</title>
</head>
<body>
<h1>404 - Page Not Found</h1>
<p>Sorry, the page you are looking for does not exist.</p>
</body>
</html>
500.html:
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<title>Internal Server Error</title>
</head>
<body>
<h1>500 - Internal Server Error</h1>
<p>Oops! Something went wrong on the server.</p>
</body>
</html>
এভাবে আপনি যেকোনো ত্রুটি বা সমস্যার জন্য কাস্টম পেজ তৈরি করতে পারবেন এবং ব্যবহারকারীদের আরও কার্যকরভাবে সমস্যাগুলির সমাধান দিতে পারবেন।
৩. Flask এর Default Error Handling কাস্টমাইজ করা
Flask ডিফল্ট ত্রুটি পেজগুলো প্রদর্শন করে, কিন্তু আপনি চাইলে সেগুলিকে কাস্টমাইজ করতে পারেন।
উদাহরণ:
@app.errorhandler(Exception)
def handle_unexpected_error(error):
return render_template('error.html', error=error), 500
এখানে:
Exception: এটি সমস্ত অপ্রত্যাশিত ত্রুটি বা এক্সেপশনকে কভার করবে এবং কাস্টমerror.htmlটেমপ্লেটের মাধ্যমে রেসপন্স প্রদান করবে।handle_unexpected_error: কোনো অপ্রত্যাশিত ত্রুটি ঘটলে এই ফাংশনটি চলবে এবং ত্রুটির বিবরণ সহ একটি কাস্টম পেজ দেখাবে।
৪. Logging এর মাধ্যমে Error Handling
Flask অ্যাপ্লিকেশনে লগিং সিস্টেম সেটআপ করা খুবই গুরুত্বপূর্ণ, বিশেষত যখন আপনি একটি প্রোডাকশন অ্যাপ্লিকেশন তৈরি করছেন। Flask এর লগিং ব্যবস্থাপনা logging লাইব্রেরি ব্যবহার করে করা যায়।
উদাহরণ:
import logging
from logging import FileHandler
@app.before_first_request
def setup_logging():
if not app.debug:
file_handler = FileHandler('error.log')
file_handler.setLevel(logging.ERROR)
app.logger.addHandler(file_handler)
@app.errorhandler(500)
def internal_error(error):
app.logger.error(f"Server Error: {error}, route: {request.url}")
return render_template('500.html'), 500
এখানে:
app.logger.error(): এটি ত্রুটি বা সমস্যার লগিং তৈরি করে, যা সার্ভার লোগ ফাইলে স্টোর করা হবে।FileHandler: এটি একটি ফাইল তৈরি করে যেখানে সমস্ত ত্রুটি লগ থাকবে।
এভাবে আপনি সমস্ত ত্রুটি ট্র্যাক করতে পারেন এবং পরে তা বিশ্লেষণ করে দ্রুত সমাধান করতে পারবেন।
৫. Custom Error Response with JSON
আপনি যদি API তৈরি করে থাকেন এবং JSON ফরম্যাটে ত্রুটি রেসপন্স পাঠাতে চান, তাহলে Flask-এ JSON Error Handling সহজেই কাস্টমাইজ করা যায়।
উদাহরণ:
from flask import jsonify
@app.errorhandler(404)
def not_found_error(error):
return jsonify({"message": "Resource not found", "status": 404}), 404
@app.errorhandler(500)
def internal_error(error):
return jsonify({"message": "Internal server error", "status": 500}), 500
এখানে:
- 404 এবং 500 ত্রুটির জন্য JSON রেসপন্স দেওয়া হচ্ছে।
Flask অ্যাপ্লিকেশনে Global Error Handling খুবই গুরুত্বপূর্ণ একটি অংশ, যা অ্যাপ্লিকেশনকে রেসপন্সযোগ্য এবং ব্যবহারকারী-বান্ধব করে তোলে। Flask-এ @app.errorhandler() ডেকোরেটরের মাধ্যমে কাস্টম ত্রুটি হ্যান্ডলার তৈরি করা, কাস্টম টেমপ্লেট ব্যবহার করে ত্রুটির জন্য স্পষ্ট বার্তা প্রদর্শন করা এবং লগিং সিস্টেমের মাধ্যমে ত্রুটির রেকর্ড রাখা আপনার অ্যাপ্লিকেশনকে আরও শক্তিশালী ও সুরক্ষিত করবে।
Read more