Flask-Marshmallow হলো Flask অ্যাপ্লিকেশনে Data Serialization এবং Deserialization পরিচালনা করার জন্য একটি জনপ্রিয় এক্সটেনশন। এটি বিশেষভাবে JSON ডেটা নিয়ে কাজ করার জন্য ব্যবহৃত হয়। Flask-Marshmallow ব্যবহার করে আপনি সহজেই Python অবজেক্টগুলোকে JSON ফর্ম্যাটে রূপান্তর (Serialization) এবং JSON ডেটাকে Python অবজেক্টে রূপান্তর (Deserialization) করতে পারেন।
এটি Flask অ্যাপ্লিকেশনে API ডেভেলপমেন্টের জন্য অত্যন্ত কার্যকরী। Marshmallow লাইব্রেরি আপনার ডেটার জন্য স্কিমা (Schema) তৈরি করতে সাহায্য করে, যা JSON ফর্ম্যাটে ডেটা রূপান্তর এবং ভ্যালিডেশন পরিচালনা করতে সক্ষম।
১. Flask-Marshmallow ইনস্টলেশন
প্রথমে, Flask-Marshmallow ইনস্টল করতে হবে। এটি Marshmallow এবং Flask দুইটি লাইব্রেরি একসাথে সরবরাহ করে।
pip install flask-marshmallow
এছাড়া, Marshmallow এবং Flask-SQLAlchemy ইনস্টল করতে হতে পারে, যদি আপনি ডাটাবেস ব্যবহার করতে চান।
pip install marshmallow flask-sqlalchemy
২. Flask-Marshmallow সেটআপ
Flask অ্যাপ তৈরি করা
from flask import Flask, jsonify
from flask_sqlalchemy import SQLAlchemy
from flask_marshmallow import Marshmallow
# Flask অ্যাপ এবং Marshmallow সেটআপ
app = Flask(__name__)
app.config['SQLALCHEMY_DATABASE_URI'] = 'sqlite:///users.db'
db = SQLAlchemy(app)
ma = Marshmallow(app)
এখানে:
SQLAlchemy: ডাটাবেস পরিচালনার জন্য ব্যবহার করা হচ্ছে।Marshmallow: ডেটা সিরিয়ালাইজেশন এবং ডেসিরিয়ালাইজেশন কাজের জন্য ব্যবহৃত হচ্ছে।
৩. Database Model তৈরি করা (Flask-SQLAlchemy)
Flask-SQLAlchemy ব্যবহার করে ডাটাবেস মডেল তৈরি করা যেতে পারে। উদাহরণস্বরূপ, একটি User মডেল তৈরি করা হলো।
# ডাটাবেস মডেল
class User(db.Model):
id = db.Column(db.Integer, primary_key=True)
name = db.Column(db.String(100), nullable=False)
email = db.Column(db.String(100), unique=True, nullable=False)
def __init__(self, name, email):
self.name = name
self.email = email
এখানে User মডেলটি একটি টেবিলের মতো কাজ করবে, যেখানে id, name, এবং email নামক কলাম থাকবে।
৪. Flask-Marshmallow Schema তৈরি করা
Flask-Marshmallow দিয়ে ডেটার স্কিমা (Schema) তৈরি করতে হয়, যা ডেটাকে JSON ফরম্যাটে রূপান্তর করতে সাহায্য করে। উদাহরণস্বরূপ, UserSchema নামের একটি স্কিমা তৈরি করা হলো:
# Marshmallow স্কিমা
class UserSchema(ma.SQLAlchemyAutoSchema):
class Meta:
model = User
load_instance = True # ইনস্ট্যান্স লোড করার জন্য
এখানে:
SQLAlchemyAutoSchemaব্যবহার করা হয়েছে যাতে Marshmallow সরাসরি SQLAlchemy মডেলের ভিত্তিতে স্কিমা তৈরি করতে পারে।load_instance = Trueসেট করা হলে Marshmallow ডেসিরিয়ালাইজেশন (Deserialization) এর সময় SQLAlchemy মডেল অবজেক্ট লোড করতে পারবে।
৫. Serialization (ডেটা রূপান্তর করা)
Flask-Marshmallow ব্যবহার করে Serialization বা ডেটা রূপান্তর খুবই সহজ। Marshmallow স্কিমা ব্যবহার করে ডাটাবেস থেকে প্রাপ্ত Python অবজেক্টকে JSON ফরম্যাটে রূপান্তর করা হয়।
# ইউজার ডেটা সিরিয়ালাইজ করা
@app.route('/user/<id>', methods=['GET'])
def get_user(id):
user = User.query.get(id) # ডাটাবেস থেকে ইউজার অনুসন্ধান করা
user_schema = UserSchema()
return user_schema.jsonify(user) # JSON ফরম্যাটে রিটার্ন
এখানে:
user_schema.jsonify(user): এটিuserঅবজেক্টকে JSON ফরম্যাটে রূপান্তর করবে এবং রেসপন্স হিসেবে পাঠাবে।
৬. Deserialization (ডেটা গ্রহণ করা)
Deserialization হলো JSON ডেটাকে Python অবজেক্টে রূপান্তর করার প্রক্রিয়া। Marshmallow স্কিমা ব্যবহার করে আপনি JSON ডেটা গ্রহণ করে তা Python অবজেক্টে রূপান্তর করতে পারেন।
# নতুন ইউজার তৈরি করা
@app.route('/user', methods=['POST'])
def add_user():
name = request.json['name']
email = request.json['email']
new_user = User(name, email)
db.session.add(new_user)
db.session.commit()
user_schema = UserSchema()
return user_schema.jsonify(new_user) # JSON ফরম্যাটে রিটার্ন
এখানে:
request.json['name']: এটি JSON রিকোয়েস্ট বডি থেকেnameপ্যারামিটার নেয়।user_schema.jsonify(new_user): এটি নতুনuserঅবজেক্টকে JSON রেসপন্স হিসেবে রিটার্ন করে।
৭. Multiple Data Serialization
যখন অনেকগুলো অবজেক্ট সিরিয়ালাইজ করতে হয়, তখন একটি many=True প্যারামিটার ব্যবহার করা হয়।
# একাধিক ইউজারের ডেটা সিরিয়ালাইজ করা
@app.route('/users', methods=['GET'])
def get_users():
users = User.query.all() # সকল ইউজার প্রাপ্তি
users_schema = UserSchema(many=True)
return users_schema.jsonify(users) # একাধিক ইউজার JSON ফরম্যাটে রিটার্ন
এখানে:
many=Trueব্যবহার করলে একটি তালিকা (list) বা একাধিক অবজেক্টকে JSON এ রূপান্তর করা যাবে।
৮. Error Handling
Flask-Marshmallow ব্যবহার করে সহজেই ত্রুটি পরিচালনা করা যায়। উদাহরণস্বরূপ, যদি কোনো ইউজার পাওয়া না যায় তবে একটি ত্রুটি রিটার্ন করা যায়:
@app.route('/user/<id>', methods=['GET'])
def get_user(id):
user = User.query.get(id)
if user is None:
return jsonify({"error": "User not found"}), 404
user_schema = UserSchema()
return user_schema.jsonify(user)
এখানে:
- যদি
userনা পাওয়া যায়, তবে404 Not Foundএর সাথে একটি ত্রুটি মেসেজ পাঠানো হবে।
Flask-Marshmallow একটি শক্তিশালী টুল যা Flask অ্যাপ্লিকেশনগুলিতে Data Serialization এবং Deserialization সহজ করে তোলে। Flask-Marshmallow ব্যবহার করে আপনি সহজে ডেটা ফরম্যাট যেমন JSON-এ রূপান্তর এবং গ্রহণ করতে পারেন, যা API ডেভেলপমেন্টে অত্যন্ত কার্যকর। Marshmallow স্কিমা ব্যবহারের মাধ্যমে আপনি ডেটার কাঠামো নির্ধারণ করতে পারেন এবং সহজে ডেটা ভ্যালিডেশন করতে পারেন।
Read more