Dataclasses का उपयोग¶
🌐 एआई और मनुष्यों द्वारा किया गया अनुवाद
यह अनुवाद मनुष्यों के मार्गदर्शन में एआई द्वारा किया गया है। 🤝
इसमें मूल अर्थ को गलत समझने या अप्राकृतिक लगने आदि जैसी गलतियाँ हो सकती हैं। 🤖
आप हमें एआई LLM को बेहतर मार्गदर्शन करने में मदद करके इस अनुवाद को बेहतर बना सकते हैं।
FastAPI Pydantic के ऊपर बनाया गया है, और मैंने आपको दिखाया है कि requests और responses घोषित करने के लिए Pydantic models का उपयोग कैसे करें।
लेकिन FastAPI उसी तरह dataclasses का उपयोग भी support करता है:
from dataclasses import dataclass
from fastapi import FastAPI
@dataclass
class Item:
name: str
price: float
description: str | None = None
tax: float | None = None
app = FastAPI()
@app.post("/items/")
async def create_item(item: Item):
return item
यह अभी भी Pydantic की वजह से support किया जाता है, क्योंकि इसमें dataclasses के लिए internal support है।
इसलिए, ऊपर दिए गए code में भी, जो Pydantic का स्पष्ट रूप से उपयोग नहीं करता, FastAPI उन standard dataclasses को Pydantic की अपनी तरह की dataclasses में बदलने के लिए Pydantic का उपयोग कर रहा है।
और निश्चित रूप से, यह इन्हें भी support करता है:
- data validation
- data serialization
- data documentation, आदि।
यह Pydantic models की तरह ही काम करता है। और अंदर से यह वास्तव में उसी तरह, Pydantic का उपयोग करके हासिल किया जाता है।
नोट
ध्यान रखें कि dataclasses वह सब कुछ नहीं कर सकतीं जो Pydantic models कर सकते हैं।
इसलिए, आपको अभी भी Pydantic models का उपयोग करना पड़ सकता है।
लेकिन अगर आपके पास बहुत सारी dataclasses पहले से मौजूद हैं, तो FastAPI का उपयोग करके web API को power देने के लिए उनका उपयोग करने की यह एक अच्छी तरकीब है। 🤓
response_model में Dataclasses¶
आप response_model parameter में भी dataclasses का उपयोग कर सकते हैं:
from dataclasses import dataclass, field
from fastapi import FastAPI
@dataclass
class Item:
name: str
price: float
tags: list[str] = field(default_factory=list)
description: str | None = None
tax: float | None = None
app = FastAPI()
@app.get("/items/next", response_model=Item)
async def read_next_item():
return {
"name": "Island In The Moon",
"price": 12.99,
"description": "A place to be playin' and havin' fun",
"tags": ["breater"],
}
dataclass अपने आप Pydantic dataclass में बदल जाएगी।
इस तरह, उसका schema API docs के user interface में दिखाई देगा:

Nested Data Structures में Dataclasses¶
आप nested data structures बनाने के लिए dataclasses को अन्य type annotations के साथ भी जोड़ सकते हैं।
कुछ मामलों में, आपको अभी भी Pydantic के dataclasses वाले version का उपयोग करना पड़ सकता है। उदाहरण के लिए, अगर automatically generated API documentation में errors हों।
उस स्थिति में, आप standard dataclasses को बस pydantic.dataclasses से बदल सकते हैं, जो एक drop-in replacement है:
from dataclasses import field # (1)
from fastapi import FastAPI
from pydantic.dataclasses import dataclass # (2)
@dataclass
class Item:
name: str
description: str | None = None
@dataclass
class Author:
name: str
items: list[Item] = field(default_factory=list) # (3)
app = FastAPI()
@app.post("/authors/{author_id}/items/", response_model=Author) # (4)
async def create_author_items(author_id: str, items: list[Item]): # (5)
return {"name": author_id, "items": items} # (6)
@app.get("/authors/", response_model=list[Author]) # (7)
def get_authors(): # (8)
return [ # (9)
{
"name": "Breaters",
"items": [
{
"name": "Island In The Moon",
"description": "A place to be playin' and havin' fun",
},
{"name": "Holy Buddies"},
],
},
{
"name": "System of an Up",
"items": [
{
"name": "Salt",
"description": "The kombucha mushroom people's favorite",
},
{"name": "Pad Thai"},
{
"name": "Lonely Night",
"description": "The mostests lonliest nightiest of allest",
},
],
},
]
-
हम अभी भी standard
dataclassesसेfieldimport करते हैं। -
pydantic.dataclasses,dataclassesके लिए एक drop-in replacement है। -
Authordataclass मेंItemdataclasses की एक list शामिल है। -
Authordataclass कोresponse_modelparameter के रूप में उपयोग किया गया है। -
आप request body के रूप में dataclasses के साथ अन्य standard type annotations का उपयोग कर सकते हैं।
इस मामले में, यह
Itemdataclasses की एक list है। -
यहाँ हम एक dictionary return कर रहे हैं जिसमें
itemsहै, जो dataclasses की एक list है।FastAPI अभी भी data को JSON में serialize करने में सक्षम है।
-
यहाँ
response_model,Authordataclasses की list के type annotation का उपयोग कर रहा है।फिर से, आप
dataclassesको standard type annotations के साथ जोड़ सकते हैं। -
ध्यान दें कि यह path operation function
async defकी बजाय सामान्यdefका उपयोग करता है।हमेशा की तरह, FastAPI में आप आवश्यकता के अनुसार
defऔरasync defको जोड़ सकते हैं।अगर आपको यह याद दिलाने की आवश्यकता है कि किसे कब उपयोग करना है, तो
asyncऔरawaitके docs में "जल्दी में हैं?" section देखें। -
यह path operation function dataclasses return नहीं कर रहा है (हालाँकि कर सकता था), बल्कि internal data वाली dictionaries की list return कर रहा है।
FastAPI response को बदलने के लिए
response_modelparameter (जिसमें dataclasses शामिल हैं) का उपयोग करेगा।
आप जटिल data structures बनाने के लिए dataclasses को कई अलग-अलग combinations में अन्य type annotations के साथ जोड़ सकते हैं।
अधिक विशिष्ट विवरण देखने के लिए ऊपर दिए गए in-code annotation tips देखें।
और जानें¶
आप dataclasses को अन्य Pydantic models के साथ भी जोड़ सकते हैं, उनसे inherit कर सकते हैं, उन्हें अपने models में शामिल कर सकते हैं, आदि।
अधिक जानने के लिए, dataclasses के बारे में Pydantic docs देखें।
Version¶
यह FastAPI version 0.67.0 से उपलब्ध है। 🔖