Python FastAPI 多参数传递
创始人
2024-03-29 17:25:30
0

Python FastAPI请求参数传递

FastAPI多参数传递类型

FastAPI通过模板来匹配URL中的参数列表,大致有如下三类方式传递参数:

  • 路径参数传递:获取自定义的构造URL中的参数
  • GET参数传递:获取一个URL后面带的?param1=1¶m2=2这种类型参数
  • POST参数传递:获取POST请求中的参数,因为POST是加密的,因此更加安全,但有额外开销,测试API使用额外工具或插件或者自己写Request等

路径多参数传递

  • 访问url:
    http://127.0.0.1:8001/uname=goudan/sex=1/age=18

  • 匹配模板:
    http://127.0.0.1:8001/uname=值1/sex=值2/age=值3

  • 对应API代码

    import uvicorn
    from fastapi import FastAPI#构造FastAPI实例
    app = FastAPI(name="mutilParam")""""
    路径多参数传递
    访问url:
    http://127.0.0.1:8001/uname=goudan/sex=1/age=18
    匹配模板:
    http://127.0.0.1:8001/uname=值1/sex=值2/age=值3
    对应API代码:
    """@app.get("/uname={uname}/sex={sex}/age={age}")
    async def api1(uname: str, sex, age: str):return {"uname": uname,"sex": sex,"age": age,}
    

GET请求多参数传递

  • 访问url:
    http://127.0.0.1:8001/get?uname=goudan&sex=1&age=18

  • 匹配模板:
    http://127.0.0.1:8001/get?uname=值1&sex=值2&age=值3

  • 对应API代码

    import uvicorn
    from fastapi import FastAPI#构造FastAPI实例
    app = FastAPI(name="mutilParam")""""
    GET请求多参数传递
    访问url:
    http://127.0.0.1:8001/get?uname=goudan&sex=1&age=18
    匹配模板:
    http://127.0.0.1:8001/get?uname=值1&sex=值2&age=值3
    对应API代码:
    """
    @app.get("/get")
    async def api2(uname=Query(None), sex=Query(...), age=Query(None)):return {"uname": uname,"sex": sex,"age": age,}
    

    注意:

    参数里uname=Query(None):
    uname对应着传入URL里的?uname=xxx
    Query()是导的包from fastapi import Query
    Query(None)里的None是默认值,可以是任意值,当URL里没有传入这个参数时,就会用默认值替代;当None为…,则表示为必须传递参数

POST请求多参数传递

  • 访问url:

    http://127.0.0.1:8001/post
    body中参数:{“uname”:“goudan”,“sex”:“1”,“age”:“18”}

  • 匹配模板:
    http://127.0.0.1:8001/post

    body中参数:{uname=值1, sex=值2, age=值3}

  • 对应API代码

    import uvicorn
    from fastapi import FastAPI#构造FastAPI实例
    app = FastAPI(name="mutilParam")""""
    POST请求多参数传递
    """
    @app.post("/post")
    async def api3(uname=Body(None), sex=Body(...), age=Body(None)):return {"uname": uname,"sex": sex,"age": age,}
    

    注意:

    Post参数传递几乎和GET相似,就是将Query替换成来写,参数里uname=Body(None):
    Body()是导的包from fastapi import Body
    Body的写法与用法和Query相同,括号里是默认值
    uname=Body(None)里的None是默认值,可以是任意值,当URL里没有传入这个参数时,就会用默认值替代;当None为…,则表示为必须传递参数

案例完整代码

三种参数传递API的完整代码如下:

import uvicorn
from fastapi import FastAPI
from fastapi import Query
from fastapi import Body#构造FastAPI实例
app = FastAPI(name="mutilParam")""""
路径多参数传递
访问url:
http://127.0.0.1:8001/uname=goudan/sex=1/age=18
匹配模板:
http://127.0.0.1:8001/uname=值1/sex=值2/age=值3
对应API代码:
"""@app.get("/uname={uname}/sex={sex}/age={age}")
async def api1(uname: str, sex, age: str):return {"uname": uname,"sex": sex,"age": age,}""""
GET请求多参数传递
访问url:
http://127.0.0.1:8001/get?uname=goudan&sex=1&age=18
匹配模板:
http://127.0.0.1:8001/get?uname=值1&sex=值2&age=值3
对应API代码:
参数里uname=Query(None):uname对应着传入URL里的?uname=xxxQuery()是导的包from fastapi import QueryQuery(None)里的None是默认值,可以是任意值,当URL里没有传入这个参数时,就会用默认值替代;当None为...,则表示为必须传递参数
"""
@app.get("/get")
async def api2(uname=Query(None), sex=Query(...), age=Query(None)):return {"uname": uname,"sex": sex,"age": age,}""""
POST请求多参数传递
访问url:
http://127.0.0.1:8001/post
{"uname":"goudan","sex":"1","age":"18"}
匹配模板:
http://127.0.0.1:8001/post
{"uname":"xxx","age":"x"}
对应API代码:Post参数传递几乎和GET相似,就是将Query替换成来写:
参数里uname=Body(None):
Body()是导的包from fastapi import Body
Body的写法与用法和Query相同,括号里是默认值
uname=Body(None)里的None是默认值,可以是任意值,当URL里没有传入这个参数时,就会用默认值替代;当None为...,则表示为必须传递参数
"""
@app.post("/post")
async def api3(uname=Body(None), sex=Body(...), age=Body(None)):return {"uname": uname,"sex": sex,"age": age,}#主函数
if __name__ == '__main__':#启动服务uvicorn.run(app='MutilParamOfAPI:app', host="127.0.0.1", port=8001, reload=False)

案例完整测试

启动服务

在完整代码案例中任何位置—>右键—>Run MutilParamOfAPI—>信息如下:

/Users/liyadong/PycharmProjects/MyAPI/MutilParamOfAPI.py 
INFO:     Started server process [31526]
INFO:     Waiting for application startup.
INFO:     Application startup complete.
INFO:     Uvicorn running on http://127.0.0.1:8001 (Press CTRL+C to quit)
访问测试
  • 路径多参数测试

    浏览器访问输入地址栏如下:

    http://127.0.0.1:8001/uname=goudan/sex=1/age=18

    浏览器页面信息如下:

    {"uname":"goudan","sex":"1","age":"18"}
    
  • GET请求多参数测试

    浏览器访问输入地址:http://127.0.0.1:8001/get?uname=goudan&sex=1&age=18

    浏览器页面信息如下:

    {"uname":"goudan","sex":"1","age":"18"}
    
  • POST请求多参数测试

    image-20221209143847436

到此测试就完毕了,关于可传参数和必传参数,大家自行减少参数键值对即可。

参考:
https://blog.csdn.net/weixin_35757704/article/details/123392281

相关内容

热门资讯

保存时出现了1个错误,导致这篇... 当保存文章时出现错误时,可以通过以下步骤解决问题:查看错误信息:查看错误提示信息可以帮助我们了解具体...
汇川伺服电机位置控制模式参数配... 1. 基本控制参数设置 1)设置位置控制模式   2)绝对值位置线性模...
不能访问光猫的的管理页面 光猫是现代家庭宽带网络的重要组成部分,它可以提供高速稳定的网络连接。但是,有时候我们会遇到不能访问光...
表格中数据未显示 当表格中的数据未显示时,可能是由于以下几个原因导致的:HTML代码问题:检查表格的HTML代码是否正...
本地主机上的图像未显示 问题描述:在本地主机上显示图像时,图像未能正常显示。解决方法:以下是一些可能的解决方法,具体取决于问...
表格列调整大小出现问题 问题描述:表格列调整大小出现问题,无法正常调整列宽。解决方法:检查表格的布局方式是否正确。确保表格使...
不一致的条件格式 要解决不一致的条件格式问题,可以按照以下步骤进行:确定条件格式的规则:首先,需要明确条件格式的规则是...
Android|无法访问或保存... 这个问题可能是由于权限设置不正确导致的。您需要在应用程序清单文件中添加以下代码来请求适当的权限:此外...
【NI Multisim 14...   目录 序言 一、工具栏 🍊1.“标准”工具栏 🍊 2.视图工具...
银河麒麟V10SP1高级服务器... 银河麒麟高级服务器操作系统简介: 银河麒麟高级服务器操作系统V10是针对企业级关键业务...