विषय पर बढ़ें

Form Data

🌐 एआई और मनुष्यों द्वारा किया गया अनुवाद

यह अनुवाद मनुष्यों के मार्गदर्शन में एआई द्वारा किया गया है। 🤝

इसमें मूल अर्थ को गलत समझने या अप्राकृतिक लगने आदि जैसी गलतियाँ हो सकती हैं। 🤖

आप हमें एआई LLM को बेहतर मार्गदर्शन करने में मदद करके इस अनुवाद को बेहतर बना सकते हैं।

अंग्रेज़ी संस्करण

जब आपको JSON के बजाय form fields प्राप्त करने हों, तो आप Form का उपयोग कर सकते हैं।

नोट

forms का उपयोग करने के लिए, पहले python-multipart install करें।

सुनिश्चित करें कि आप एक virtual environment बनाते हैं, उसे activate करते हैं, और फिर इसे install करते हैं, उदाहरण के लिए:

$ pip install python-multipart

Form Import करें

fastapi से Form import करें:

from typing import Annotated

from fastapi import FastAPI, Form

app = FastAPI()


@app.post("/login/")
async def login(username: Annotated[str, Form()], password: Annotated[str, Form()]):
    return {"username": username}
🤓 Other versions and variants

Tip

Prefer to use the Annotated version if possible.

from fastapi import FastAPI, Form

app = FastAPI()


@app.post("/login/")
async def login(username: str = Form(), password: str = Form()):
    return {"username": username}

Form parameters परिभाषित करें

form parameters उसी तरह बनाएं जैसे आप Body या Query के लिए बनाते:

from typing import Annotated

from fastapi import FastAPI, Form

app = FastAPI()


@app.post("/login/")
async def login(username: Annotated[str, Form()], password: Annotated[str, Form()]):
    return {"username": username}
🤓 Other versions and variants

Tip

Prefer to use the Annotated version if possible.

from fastapi import FastAPI, Form

app = FastAPI()


@app.post("/login/")
async def login(username: str = Form(), password: str = Form()):
    return {"username": username}

उदाहरण के लिए, OAuth2 specification का उपयोग जिन तरीकों से किया जा सकता है उनमें से एक में (जिसे "password flow" कहा जाता है) username और password को form fields के रूप में भेजना required है।

spec के अनुसार fields के नाम बिल्कुल username और password होने चाहिए, और उन्हें JSON नहीं, बल्कि form fields के रूप में भेजा जाना चाहिए।

Form के साथ आप वही configurations declare कर सकते हैं जो Body (और Query, Path, Cookie) के साथ करते हैं, जिसमें validation, examples, alias (जैसे username के बजाय user-name), आदि शामिल हैं।

नोट

Form एक class है जो सीधे Body से inherit करती है।

टिप

form bodies declare करने के लिए, आपको स्पष्ट रूप से Form का उपयोग करना होगा, क्योंकि इसके बिना parameters को query parameters या body (JSON) parameters के रूप में समझा जाएगा।

"Form Fields" के बारे में

HTML forms (<form></form>) आमतौर पर data को server पर भेजने के लिए उस data के लिए एक "special" encoding का उपयोग करते हैं, यह JSON से अलग होता है।

FastAPI यह सुनिश्चित करेगा कि उस data को JSON के बजाय सही जगह से पढ़ा जाए।

तकनीकी विवरण

forms से आने वाला data आमतौर पर "media type" application/x-www-form-urlencoded का उपयोग करके encoded होता है।

लेकिन जब form में files शामिल होती हैं, तो इसे multipart/form-data के रूप में encoded किया जाता है। files को handle करने के बारे में आप अगले chapter में पढ़ेंगे।

अगर आप इन encodings और form fields के बारे में अधिक पढ़ना चाहते हैं, तो POST के लिए MDN web docs देखें।

चेतावनी

आप एक path operation में कई Form parameters declare कर सकते हैं, लेकिन आप साथ में ऐसे Body fields declare नहीं कर सकते जिन्हें आप JSON के रूप में प्राप्त करने की उम्मीद करते हैं, क्योंकि request में body application/json के बजाय application/x-www-form-urlencoded का उपयोग करके encoded होगी।

यह FastAPI की limitation नहीं है, यह HTTP protocol का हिस्सा है।

Recap

form data input parameters declare करने के लिए Form का उपयोग करें।