Wenn Sie in ihrer Funktion Parameter deklarieren, die nicht Teil der Pfad-Parameter sind, dann werden diese automatisch als „Query“-Parameter interpretiert.
In diesem Fall wird der Funktionsparameter q optional, und standardmäßig None sein.
Check
Beachten Sie auch, dass FastAPI intelligent genug ist, um zu erkennen, dass item_id ein Pfad-Parameter ist und q keiner, daher muss letzteres ein Query-Parameter sein.
Sie können auch bool-Typen deklarieren und sie werden konvertiert:
fromfastapiimportFastAPIapp=FastAPI()@app.get("/items/{item_id}")asyncdefread_item(item_id:str,q:str|None=None,short:bool=False):item={"item_id":item_id}ifq:item.update({"q":q})ifnotshort:item.update({"description":"This is an amazing item that has a long description"})returnitem
fromtypingimportUnionfromfastapiimportFastAPIapp=FastAPI()@app.get("/items/{item_id}")asyncdefread_item(item_id:str,q:Union[str,None]=None,short:bool=False):item={"item_id":item_id}ifq:item.update({"q":q})ifnotshort:item.update({"description":"This is an amazing item that has a long description"})returnitem
Wenn Sie nun zu:
http://127.0.0.1:8000/items/foo?short=1
oder
http://127.0.0.1:8000/items/foo?short=True
oder
http://127.0.0.1:8000/items/foo?short=true
oder
http://127.0.0.1:8000/items/foo?short=on
oder
http://127.0.0.1:8000/items/foo?short=yes
gehen, oder zu irgendeiner anderen Variante der Groß-/Kleinschreibung (Alles groß, Anfangsbuchstabe groß, usw.), dann wird Ihre Funktion den Parameter short mit dem bool-Wert True sehen, ansonsten mit dem Wert False.
Sie können mehrere Pfad-Parameter und Query-Parameter gleichzeitig deklarieren, FastAPI weiß, was welches ist.
Und Sie müssen sie auch nicht in einer spezifischen Reihenfolge deklarieren.
Parameter werden anhand ihres Namens erkannt:
fromfastapiimportFastAPIapp=FastAPI()@app.get("/users/{user_id}/items/{item_id}")asyncdefread_user_item(user_id:int,item_id:str,q:str|None=None,short:bool=False):item={"item_id":item_id,"owner_id":user_id}ifq:item.update({"q":q})ifnotshort:item.update({"description":"This is an amazing item that has a long description"})returnitem
fromtypingimportUnionfromfastapiimportFastAPIapp=FastAPI()@app.get("/users/{user_id}/items/{item_id}")asyncdefread_user_item(user_id:int,item_id:str,q:Union[str,None]=None,short:bool=False):item={"item_id":item_id,"owner_id":user_id}ifq:item.update({"q":q})ifnotshort:item.update({"description":"This is an amazing item that has a long description"})returnitem
Wenn Sie einen Defaultwert für Nicht-Pfad-Parameter deklarieren (Bis jetzt haben wir nur Query-Parameter gesehen), dann ist der Parameter nicht erforderlich.
Wenn Sie keinen spezifischen Wert haben wollen, sondern der Parameter einfach optional sein soll, dann setzen Sie den Defaultwert auf None.
Aber wenn Sie wollen, dass ein Query-Parameter erforderlich ist, vergeben Sie einfach keinen Defaultwert: