5.7 KiB
Dataclasses کا استعمال
FastAPI Pydantic کے اوپر بنایا گیا ہے، اور میں آپ کو دکھاتا رہا ہوں کہ requests اور responses بیان کرنے کے لیے Pydantic models کیسے استعمال کریں۔
لیکن FastAPI dataclasses استعمال کرنے کی بھی اسی طرح سپورٹ کرتا ہے:
{* ../../docs_src/dataclasses_/tutorial001_py310.py hl[1,6:11,18:19] *}
یہ Pydantic کی بدولت اب بھی سپورٹ ہے، کیونکہ اس میں dataclasses کی اندرونی سپورٹ موجود ہے۔
تو، اوپر والے کوڈ میں بھی جو واضح طور پر Pydantic استعمال نہیں کرتا، FastAPI ان معیاری dataclasses کو Pydantic کے اپنے مخصوص dataclasses میں تبدیل کرنے کے لیے Pydantic استعمال کر رہا ہے۔
اور یقیناً، یہ وہی سب سپورٹ کرتا ہے:
- ڈیٹا validation
- ڈیٹا serialization
- ڈیٹا دستاویزات، وغیرہ۔
یہ Pydantic models کی طرح ہی کام کرتا ہے۔ اور یہ دراصل اندرونی طور پر اسی طرح حاصل کیا جاتا ہے، Pydantic استعمال کرتے ہوئے۔
/// info | معلومات
یاد رکھیں کہ dataclasses وہ سب کچھ نہیں کر سکتیں جو Pydantic models کر سکتے ہیں۔
تو، آپ کو پھر بھی Pydantic models استعمال کرنے کی ضرورت پڑ سکتی ہے۔
لیکن اگر آپ کے پاس بہت سی dataclasses پڑی ہیں تو FastAPI استعمال کر کے web API بنانے کے لیے انہیں استعمال کرنا ایک اچھی تدبیر ہے۔
///
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 میں نظر آئے گا:
نیسٹڈ ڈیٹا ڈھانچوں میں Dataclasses
آپ dataclasses کو دوسری type annotations کے ساتھ ملا کر نیسٹڈ ڈیٹا ڈھانچے بنا سکتے ہیں۔
بعض صورتوں میں، آپ کو پھر بھی Pydantic کے ورژن کی dataclasses استعمال کرنی ہو سکتی ہیں۔ مثال کے طور پر، اگر خود بخود بنائی گئی API دستاویزات میں غلطیاں ہوں۔
اس صورت میں، آپ معیاری dataclasses کو pydantic.dataclasses سے بدل سکتے ہیں، جو ایک متبادل ہے:
{* ../../docs_src/dataclasses_/tutorial003_py310.py hl[1,4,7:10,13:16,22:24,27] *}
-
ہم پھر بھی معیاری
dataclassesسےfieldimport کرتے ہیں۔ -
pydantic.dataclassesdataclassesکا متبادل ہے۔ -
Authordataclass میںItemdataclasses کی فہرست شامل ہے۔ -
Authordataclassresponse_modelparameter کے طور پر استعمال ہوتی ہے۔ -
آپ dataclasses کے ساتھ دیگر معیاری type annotations کو request body کے طور پر استعمال کر سکتے ہیں۔
اس صورت میں، یہ
Itemdataclasses کی فہرست ہے۔ -
یہاں ہم dictionary واپس کر رہے ہیں جس میں
itemsہے جو dataclasses کی فہرست ہے۔FastAPI پھر بھی ڈیٹا کو JSON میں serialize کرنے کے قابل ہے۔
-
یہاں
response_modelAuthordataclasses کی فہرست کی type annotation استعمال کر رہا ہے۔دوبارہ، آپ
dataclassesکو معیاری type annotations کے ساتھ ملا سکتے ہیں۔ -
غور کریں کہ یہ path operation function
async defکی بجائے عامdefاستعمال کرتا ہے۔ہمیشہ کی طرح، FastAPI میں آپ
defاورasync defکو ضرورت کے مطابق ملا سکتے ہیں۔اگر آپ کو یاد دہانی چاہیے کہ کب کون سا استعمال کریں، تو
asyncاورawaitکی دستاویزات میں "جلدی میں ہیں؟" سیکشن دیکھیں۔ -
یہ path operation function dataclasses واپس نہیں کر رہا (حالانکہ کر سکتا ہے)، بلکہ اندرونی ڈیٹا کے ساتھ dictionaries کی فہرست واپس کر رہا ہے۔
FastAPI
response_modelparameter (جس میں dataclasses شامل ہیں) استعمال کرکے response تبدیل کرے گا۔
آپ dataclasses کو دیگر type annotations کے ساتھ بہت سے مختلف مجموعوں میں ملا کر پیچیدہ ڈیٹا ڈھانچے بنا سکتے ہیں۔
مزید مخصوص تفصیلات دیکھنے کے لیے اوپر کوڈ میں موجود annotation مشورے دیکھیں۔
مزید جانیں
آپ dataclasses کو دیگر Pydantic models کے ساتھ بھی ملا سکتے ہیں، ان سے inherit کر سکتے ہیں، انہیں اپنے models میں شامل کر سکتے ہیں، وغیرہ۔
مزید جاننے کے لیے، dataclasses کے بارے میں Pydantic دستاویزات دیکھیں۔
ورژن
یہ FastAPI ورژن 0.67.0 سے دستیاب ہے۔