Pydantic Model তৈরি এবং ভ্যালিডেশন

FastAPI এর সাথে Data Validation এবং Pydantic - ফাস্টএপিআই (FastAPI) - Web Development

337

FastAPI তে Pydantic Model ব্যবহার করে ডাটা ভ্যালিডেশন এবং টাইপ চেকিং খুবই সহজ এবং শক্তিশালী। Pydantic একটি Python লাইব্রেরি যা ডাটা যাচাই (validation) এবং টাইপ এনোটেশনকে সহজ করে তোলে। FastAPI Pydantic মডেল ব্যবহার করে ইনপুট ডাটার টাইপ যাচাই এবং ভ্যালিডেশন কার্যকরভাবে সম্পন্ন করে।

এখানে আমরা দেখব কিভাবে Pydantic Model তৈরি এবং ভ্যালিডেশন করতে হয়, এবং কিভাবে FastAPI-তে এই মডেল ব্যবহার করা যায়।


Step 1: Pydantic Model তৈরি করা

Pydantic মডেল তৈরি করতে BaseModel ক্লাসকে ইনহেরিট করতে হয়। এর মধ্যে আপনি ডাটা টাইপ এবং বিভিন্ন ভ্যালিডেশন রুলস নির্ধারণ করতে পারেন।

Pydantic Model উদাহরণ

from pydantic import BaseModel

class Item(BaseModel):
    name: str
    description: str | None = None
    price: float
    tax: float | None = None

এখানে:

  • name: একটি স্ট্রিং (string) টাইপ ফিল্ড, যা বাধ্যতামূলক।
  • description: একটি ঐচ্ছিক স্ট্রিং (string) টাইপ ফিল্ড।
  • price: একটি ফ্লোট (float) টাইপ ফিল্ড, যা বাধ্যতামূলক।
  • tax: একটি ঐচ্ছিক ফ্লোট (float) টাইপ ফিল্ড।

Step 2: FastAPI-তে Pydantic Model ব্যবহার করা

এখন FastAPI-তে Pydantic মডেলটি ব্যবহার করে একটি API এন্ডপয়েন্ট তৈরি করা হবে, যা একটি POST রিকোয়েস্ট গ্রহণ করবে।

উদাহরণ: Pydantic Model ব্যবহার করে FastAPI এন্ডপয়েন্ট

from fastapi import FastAPI
from pydantic import BaseModel

app = FastAPI()

# Pydantic Model
class Item(BaseModel):
    name: str
    description: str | None = None
    price: float
    tax: float | None = None

@app.post("/items/")
def create_item(item: Item):
    return {"item_name": item.name, "item_price": item.price, "item_tax": item.tax}

এখানে, /items/ এন্ডপয়েন্ট একটি POST রিকোয়েস্ট গ্রহণ করবে এবং Item মডেলটি Request Body হিসেবে গ্রহণ করবে।

রিকোয়েস্ট উদাহরণ (JSON Body):

POST /items/
Body:

{
  "name": "Laptop",
  "description": "A high-performance laptop",
  "price": 1500.00,
  "tax": 120.00
}

রেসপন্স:

{
  "item_name": "Laptop",
  "item_price": 1500.00,
  "item_tax": 120.00
}

এখানে, Request Body JSON আকারে পাঠানো হয়েছে এবং FastAPI এই ডাটা Item মডেল দিয়ে স্বয়ংক্রিয়ভাবে ভ্যালিডেট করেছে।


Step 3: Pydantic Model-এ Validation (ভ্যালিডেশন)

Pydantic মডেল ব্যবহার করে FastAPI-তে ইনপুট ডাটা ভ্যালিডেশন করা যায়। আপনি Field কনস্ট্রেইন্ট (constraints) ব্যবহার করে ইনপুট ডাটার সীমাবদ্ধতা নির্ধারণ করতে পারেন, যেমন min_length, max_length, gt, lt, regex ইত্যাদি।

উদাহরণ: Validation কনস্ট্রেইন্ট সহ Pydantic Model

from pydantic import BaseModel, Field

class Item(BaseModel):
    name: str = Field(..., min_length=3)  # নামের কমপক্ষে ৩টি অক্ষর থাকতে হবে
    description: str | None = Field(None, max_length=300)  # বর্ণনা সর্বোচ্চ ৩০০টি অক্ষর
    price: float = Field(..., gt=0)  # দাম শূন্যের বেশি হতে হবে
    tax: float | None = None

এখানে:

  • name: কমপক্ষে ৩টি অক্ষর থাকতে হবে।
  • description: সর্বাধিক ৩০০টি অক্ষর থাকতে হবে।
  • price: ০ এর বেশি হওয়া উচিত।

রিকোয়েস্ট উদাহরণ:

{
  "name": "Laptop",
  "description": "A high-end laptop",
  "price": 1500.00
}

রেসপন্স:

{
  "item_name": "Laptop",
  "item_price": 1500.00
}

ভুল ইনপুট উদাহরণ (যেমন: price <= 0):

{
  "name": "Laptop",
  "description": "A high-end laptop",
  "price": -10.00
}

রেসপন্স (ত্রুটি):

{
  "detail": [
    {
      "loc": ["body", "price"],
      "msg": "ensure this value is greater than 0",
      "type": "value_error.number.gt"
    }
  ]
}

এখানে, price ফিল্ডে -10.00 মানটি ভুল কারণ এটি ০ এর কম, এবং FastAPI সেই অনুযায়ী ত্রুটি দেখাবে।


Step 4: Default Values এবং Optional Fields

Pydantic মডেলে আপনি Optional Fields এবং Default Values নির্ধারণ করতে পারেন।

উদাহরণ: Optional Fields এবং Default Values

from pydantic import BaseModel

class Item(BaseModel):
    name: str
    description: str | None = "No description provided"  # Default value
    price: float
    tax: float | None = 0.0  # Default value

এখানে:

  • description: ঐচ্ছিক ফিল্ড এবং এর ডিফল্ট মান "No description provided"
  • tax: ঐচ্ছিক ফিল্ড এবং এর ডিফল্ট মান 0.0

রিকোয়েস্ট উদাহরণ:

{
  "name": "Laptop",
  "price": 1500.00
}

রেসপন্স:

{
  "item_name": "Laptop",
  "item_price": 1500.00,
  "item_tax": 0.0,
  "description": "No description provided"
}

এখানে, description ফিল্ডের ডিফল্ট মান "No description provided" ব্যবহার করা হয়েছে কারণ এটি পাঠানো হয়নি।


Step 5: Nested Models (নেস্টেড মডেল)

FastAPI তে Pydantic মডেল ব্যবহার করে আপনি nested models তৈরি করতে পারেন, যা জটিল ডাটা স্ট্রাকচারকে সমর্থন করে।

উদাহরণ: Nested Models

from pydantic import BaseModel
from typing import List

class Manufacturer(BaseModel):
    name: str
    country: str

class Item(BaseModel):
    name: str
    price: float
    manufacturer: Manufacturer  # Nested Model

@app.post("/items/")
def create_item(item: Item):
    return {"item_name": item.name, "item_price": item.price, "manufacturer": item.manufacturer}

এখানে, Item মডেলের মধ্যে Manufacturer মডেলকে nested হিসেবে অন্তর্ভুক্ত করা হয়েছে।

রিকোয়েস্ট উদাহরণ:

{
  "name": "Laptop",
  "price": 1500.00,
  "manufacturer": {
    "name": "TechCorp",
    "country": "USA"
  }
}

রেসপন্স:

{
  "item_name": "Laptop",
  "item_price": 1500.00,
  "manufacturer": {
    "name": "TechCorp",
    "country": "USA"
  }
}

এখানে, manufacturer একটি nested model হিসেবে Item মডেলে অন্তর্ভুক্ত করা হয়েছে।


FastAPI-তে Pydantic Model ব্যবহার করে Request Body তৈরি এবং ভ্যালিডেশন করা খুবই সহজ এবং কার্যকর। আপনি Pydantic মডেলের মাধ্যমে ইনপুট ডাটা টাইপ, ভ্যালিডেশন কনস্ট্রেইন্ট এবং ডিফল্ট মান খুব সহজে নির্ধারণ করতে পারেন। এছাড়া, আপনি নেস্টেড মডেল ব্যবহার করে জটিল ডাটা স্ট্রাকচারও তৈরি করতে পারেন, যা আপনার API-এর কার্যক্ষমতা এবং নিরাপত্তা বাড়ায়।

Content added By
Promotion

Are you sure to start over?

Loading...