美文网首页想法@IT·互联网
一文搞定 FastAPI 查询参数

一文搞定 FastAPI 查询参数

作者: shengjk1 | 来源:发表于2024-03-25 18:39 被阅读0次

    你好,我是 shengjk1,多年大厂经验,努力构建 通俗易懂的、好玩的编程语言教程。 欢迎关注!你会有如下收益:

    1. 了解大厂经验
    2. 拥有和大厂相匹配的技术等

    希望看什么,评论或者私信告诉我!

    一、查询参数定义

    路径操作函数中,不是路径参数的其他参数,就是查询参数。比如:

    from fastapi import FastAPI
    
    app = FastAPI()
    
    @app.get( "/items" )
    def read_item(item_id:int,item_name:str):
        return { "item_id" : item_id,"item_name":item_name}
         
        
    if __name__ == "__main__" :
        import uvicorn
        uvicorn.run( "quickstart.demo:app" ,reload=True ,port= 8001)
    

    item_id,item_name 都不是路径参数,所以它就是查询参数。

    二、查询参数作用

    方便给 路径操作函数 传参

    三、查询参数基本使用

    3.1. URL拼接和必需参数

    查询参数,一般是在 URL 的 ? 后,并以 & 分割,比如:

    from fastapi import FastAPI
    
    app = FastAPI()
    
    @app.get( "/items" )
    def read_item(item_id:int,item_name:str):
        return { "item_id" : item_id,"item_name":item_name}
         
        
    if __name__ == "__main__" :
        import uvicorn
        uvicorn.run( "quickstart.demo:app" ,reload=True ,port= 8001)
    

    此时 item_iditem_name 都是必需的,URL必须传这两个参数。启动程序,然后在浏览器中访问 http://127.0.0.1:8001/items?item_id=1&item_name=xiaoming,响应为:

    {"item_id":1,"item_name":"xiaoming"}
    

    3.2. 默认值

    查询参数可以设置默认值,如:item_name 默认值为 xiaoming

    from fastapi import FastAPI
    
    app = FastAPI()
    
    @app.get( "/items" )
    def read_item(item_id:int,item_name:str='xiaoming'):
        return { "item_id" : item_id,"item_name":item_name}
         
        
    if __name__ == "__main__" :
        import uvicorn
        uvicorn.run( "quickstart.demo:app" ,reload=True ,port= 8001)
    

    访问 http://127.0.0.1:8001/items?item_id=1&item_name=xiaoming 和访问 http://127.0.0.1:8001/items?item_id=1 他们的结果都是一样的。因为URL 中不设置 item_name 的值,它会用默认值来填充。

    3.3. 可选参数

    查询参数可以设置为可选参数,如 item_name=None 可选参数的意思:URL中可以不包含这个参数,属于可有可无

    from fastapi import FastAPI
    
    app = FastAPI()
    
    @app.get( "/items" )
    def read_item(item_id:int,item_name:str=None):
        if item_name:
            return { "item_id" : item_id,"item_name":item_name}
        else:
            return { "item_id" : item_id}
         
        
    if __name__ == "__main__" :
        import uvicorn
        uvicorn.run( "quickstart.demo:app" ,reload=True ,port= 8001)
    

    访问 http://127.0.0.1:8001/items?item_id=1&item_name=xiaoming 响应为:

    {"item_id":1,"item_name":"xiaoming"}
    

    和访问 http://127.0.0.1:8001/items?item_id=1 响应为:

    {"item_id":1}
    

    3.4. Pydantic 模型( 请求体 )作为查询参数

    from fastapi import FastAPI
    from pydantic import BaseModel
    
    app = FastAPI()
    
    class Item(BaseModel):
        name: str
        price: float
        
    @app.put( "/items/{item_id}" )
    def  put_item(item_id:int,item:Item):
        return { "item_id" : item_id, "item" :item}
    
    if __name__ == "__main__" :
        import uvicorn
        uvicorn.run( "quickstart.demo:app" , reload=True, port=8001)
    

    Client端:

    import requests
    
    data={ "name" : "flow" , "price" :2.3}
    
    respone=requests.put( "http://127.0.0.1:8001/items/1" ,json=data)
    print(respone.json())
    

    respone的结果:

    {'item_id': 1, 'item': {'name': 'flow', 'price': 2.3}}
    

    三、总结

    本文详细介绍了查询参数在FastAPI中的基本使用方法,包括URL拼接和必需参数、默认值、可选参数和Pydantic模型作为查询参数的使用。通过这些方法,可以灵活地处理和传递查询参数,实现更丰富的功能需求。

    相关文章

      网友评论

        本文标题:一文搞定 FastAPI 查询参数

        本文链接:https://www.haomeiwen.com/subject/fdcjtjtx.html