7.0 KiB
Dataclasses का उपयोग
FastAPI Pydantic के ऊपर बनाया गया है, और मैंने आपको दिखाया है कि requests और responses घोषित करने के लिए Pydantic models का उपयोग कैसे करें।
लेकिन FastAPI उसी तरह dataclasses का उपयोग भी support करता है:
{* ../../docs_src/dataclasses_/tutorial001_py310.py hl[1,6:11,18:19] *}
यह अभी भी Pydantic की वजह से support किया जाता है, क्योंकि इसमें dataclasses के लिए internal support है।
इसलिए, ऊपर दिए गए code में भी, जो Pydantic का स्पष्ट रूप से उपयोग नहीं करता, FastAPI उन standard dataclasses को Pydantic की अपनी तरह की dataclasses में बदलने के लिए Pydantic का उपयोग कर रहा है।
और निश्चित रूप से, यह इन्हें भी support करता है:
- data validation
- data serialization
- data documentation, आदि।
यह Pydantic models की तरह ही काम करता है। और अंदर से यह वास्तव में उसी तरह, Pydantic का उपयोग करके हासिल किया जाता है।
/// note | नोट
ध्यान रखें कि dataclasses वह सब कुछ नहीं कर सकतीं जो Pydantic models कर सकते हैं।
इसलिए, आपको अभी भी Pydantic models का उपयोग करना पड़ सकता है।
लेकिन अगर आपके पास बहुत सारी dataclasses पहले से मौजूद हैं, तो FastAPI का उपयोग करके web API को power देने के लिए उनका उपयोग करने की यह एक अच्छी तरकीब है। 🤓
///
response_model में Dataclasses
आप response_model parameter में भी dataclasses का उपयोग कर सकते हैं:
{* ../../docs_src/dataclasses_/tutorial002_py310.py hl[1,6:12,18] *}
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 है:
{* ../../docs_src/dataclasses_/tutorial003_py310.py hl[1,4,7:10,13:16,22:24,27] *}
-
हम अभी भी 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 से उपलब्ध है। 🔖