Request Body এর জন্য ভ্যালিডেশন এবং ডিফল্ট মান

Web Development - ফাস্টএপিআই (FastAPI) - Request Body এবং Form Handling
159

FastAPI তে Request Body এর জন্য ভ্যালিডেশন এবং ডিফল্ট মান ব্যবস্থাপনা করা অত্যন্ত সহজ। Pydantic মডেল ব্যবহার করে আপনি ইনপুট ডাটার টাইপ, সীমাবদ্ধতা (constraints), এবং ডিফল্ট মান সেট করতে পারেন, যা FastAPI স্বয়ংক্রিয়ভাবে চেক করে এবং অ্যাপ্লিকেশনকে আরও নিরাপদ ও কার্যকর করে তোলে।

এখানে, আমরা Request Body এর জন্য ভ্যালিডেশন এবং ডিফল্ট মান কিভাবে ব্যবহৃত হয় তা ব্যাখ্যা করব।


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

FastAPI তে Request Body ভ্যালিডেশন করার জন্য Pydantic মডেল ব্যবহার করা হয়। Pydantic একটি Python লাইব্রেরি যা টাইপ সেফটি এবং ডাটা ভ্যালিডেশন সরবরাহ করে।

Pydantic মডেল উদাহরণ:

from pydantic import BaseModel, Field

class Item(BaseModel):
    name: str = Field(..., min_length=3, max_length=100)  # Name ফিল্ডের জন্য ভ্যালিডেশন
    description: str | None = Field(None, max_length=300)  # Description ঐচ্ছিক, 300 অক্ষরের মধ্যে
    price: float = Field(..., gt=0)  # Price 0 এর বেশি হতে হবে
    tax: float | None = Field(None, ge=0)  # Tax ঐচ্ছিক, 0 এর সমান বা বেশি হতে হবে

এখানে:

  • name: একটি স্ট্রিং ফিল্ড, যার দৈর্ঘ্য কমপক্ষে ৩ এবং সর্বাধিক ১০০ অক্ষর হতে হবে।
  • description: একটি ঐচ্ছিক স্ট্রিং ফিল্ড, যার দৈর্ঘ্য সর্বাধিক ৩০০ অক্ষর।
  • price: একটি ফ্লোট টাইপ ফিল্ড, যার মান অবশ্যই ০ এর বেশি হবে।
  • tax: একটি ঐচ্ছিক ফ্লোট টাইপ ফিল্ড, যার মান ০ এর সমান বা বেশি হতে হবে।

Step 2: Request Body তৈরির সময় ভ্যালিডেশন এবং ডিফল্ট মান প্রয়োগ

FastAPI তে Request Body (যেমন JSON) পাঠানোর সময়, Pydantic মডেলটি ইনপুট ডাটার জন্য স্বয়ংক্রিয়ভাবে ভ্যালিডেশন এবং ডিফল্ট মান অ্যাপ্লাই করবে।

উদাহরণ: Request Body তৈরি

from fastapi import FastAPI
from pydantic import BaseModel, Field

app = FastAPI()

class Item(BaseModel):
    name: str = Field(..., min_length=3, max_length=100)
    description: str | None = Field(None, max_length=300)
    price: float = Field(..., gt=0)
    tax: float | None = Field(None, ge=0)

@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):

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
}

Step 3: ডিফল্ট মান নির্ধারণ

FastAPI তে Request Body মডেলগুলিতে আপনি ডিফল্ট মান (Default Value) সেট করতে পারেন। এটি ঐচ্ছিক ফিল্ডের জন্য ব্যবহৃত হয় এবং ডিফল্ট মান না পাঠানো হলে সেই মানটি ব্যবহৃত হবে।

উদাহরণ: ডিফল্ট মান সহ Pydantic Model

from pydantic import BaseModel, Field

class Item(BaseModel):
    name: str = Field(..., min_length=3, max_length=100)
    description: str | None = Field("No description provided", max_length=300)  # ডিফল্ট মান
    price: float = Field(..., gt=0)
    tax: float | None = Field(0.0, ge=0)  # ডিফল্ট মান 0.0

এখানে:

  • 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 এবং tax ফিল্ডগুলি পাঠানো হয়নি, তাই তাদের ডিফল্ট মান ব্যবহার করা হয়েছে।


Step 4: Validation Error Handling (ভ্যালিডেশন ত্রুটি)

যদি Request Body তে কোনও প্যারামিটার সঠিকভাবে না পাঠানো হয় বা যদি কোনো ভ্যালিডেশন শর্ত পূর্ণ না হয়, তবে FastAPI স্বয়ংক্রিয়ভাবে একটি ত্রুটি (error) রিটার্ন করবে।

উদাহরণ: Validation Error

{
  "name": "A",
  "price": -500.00
}

এখানে, name প্যারামিটারটি min_length=3 শর্ত পূর্ণ করতে পারেনি, এবং price প্যারামিটারটি gt=0 শর্ত পূর্ণ করতে পারেনি।

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

{
  "detail": [
    {
      "loc": ["body", "name"],
      "msg": "ensure this value has at least 3 characters",
      "type": "value_error.any_str.min_length"
    },
    {
      "loc": ["body", "price"],
      "msg": "ensure this value is greater than 0",
      "type": "value_error.number.gt"
    }
  ]
}

এখানে, name এবং price প্যারামিটারগুলোর জন্য ভ্যালিডেশন ত্রুটি দেখানো হয়েছে।


Step 5: Custom Validation (কাস্টম ভ্যালিডেশন)

আপনি Pydantic মডেল-এ কাস্টম ভ্যালিডেশনও সংজ্ঞায়িত করতে পারেন, যা নির্দিষ্ট শর্ত পূর্ণ না হলে ত্রুটি দেখাবে।

উদাহরণ: কাস্টম ভ্যালিডেশন

from pydantic import BaseModel, root_validator, ValidationError

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

    @root_validator
    def check_price_and_tax(cls, values):
        price = values.get("price")
        tax = values.get("tax")
        if tax and tax > price:
            raise ValueError("Tax cannot be greater than price")
        return values

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

এখানে, check_price_and_tax কাস্টম ভ্যালিডেটর ব্যবহার করে নিশ্চিত করা হয়েছে যে tax কখনো price এর চেয়ে বেশি হতে পারে না।

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

{
  "name": "Laptop",
  "price": 1000.00,
  "tax": 1200.00
}

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

{
  "detail": [
    {
      "loc": ["body"],
      "msg": "Tax cannot be greater than price",
      "type": "value_error"
    }
  ]
}

FastAPI তে Request Body এর জন্য ভ্যালিডেশন এবং ডিফল্ট মান ব্যবস্থাপনা অত্যন্ত সহজ এবং শক্তিশালী। Pydantic মডেল ব্যবহার করে ইনপুট ডাটার টাইপ যাচাই, ভ্যালিডেশন কন্ডিশন (যেমন: gt, lt, min_length, max_length) এবং ডিফল্ট মান নির্ধারণ করতে পারেন। এটি ডেভেলপারদের কাজকে আরও সহজ করে তোলে এবং অ্যাপ্লিকেশনকে নিরাপদ এবং কার্যকর করে তোলে।

Content added By
Promotion
NEW SATT AI এখন আপনাকে সাহায্য করতে পারে।

Are you sure to start over?

Loading...