Python FastAPI 多参数传递的示例详解
作者:Aidon-东哥博客 发布时间:2023-07-03 01:21:05
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=xxx
Query()是导的包from fastapi import Query
Query(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"}
{"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请求多参数测试
到此测试就完毕了,关于可传参数和必传参数,大家自行减少参数键值对即可。
参考资料:
https://blog.csdn.net/weixin_35757704/article/details/123392281
来源:https://blog.csdn.net/u010839779/article/details/128253025
猜你喜欢
- 前言最近参加了datawhale的组队学习活动,在组队学习动员下,开始通过强迫自己输出来实现更好的输入与处理,6-15开始自己的第一次文章发
- 我的朋友没在服务器上设置DSN,可他一样访问数据库,他是怎样做到的? 其实,只要我们知道数据库文件名(比如Access、Parad
- 代码如下:'===================================== '获取内容中所有图片 '==
- Python批量替换文件内容,支持嵌套文件夹import ospath="./"for root,dirs,files
- 本文实例为大家分享了python+pygame实现坦克大战的具体代码,供大家参考,具体内容如下一、首先导入pygame库二、源码分享#cod
- 问题描述:被搜索名字为:andy这时搜索andy正常,但是搜索a就搜不到。解决办法,在索引配置文件中的index中添加min_infix_l
- 1、给定的日期格式相同,则使用简单的比较运算符来比较日期。<?php//声明两个日期、初始化$date1 = "2021-1
- 一.问题描述python 中使用open打开某个文件写入时,往往会发现需要写入的文件不在同级目录下。这样就需要根据文件的路径来找到并打开。但
- 本文实例讲述了Django框架自定义session处理操作。分享给大家供大家参考,具体如下:django有自己的一套session框架,有他
- 子类里访问父类的同名属性,而又不想直接引用父类的名字,因为说不定什么时候会去修改它,所以数据还是只保留一份的好。其实呢,还有更好的理由不去直
- Python 很强大其原因就是因为它庞大的三方库 , 资源是非常的丰富 , 当然也不会缺少关于音频的库关于音频, PyAudio 这个库,
- 前言相比java,python的异常和java中不同,python主要是防止程序异常被中止。一旦被catch后它还行往下执行。一、异常1.1
- 介绍Matplotlib是Python中使用最广泛的数据可视化库之一。Matplotlib的受欢迎程度大部分来自其自定义选项。您可以调整其对
- 关于python 性能提升的一些方案。一、函数调用优化(空间跨度,避免访问内存) 程序的优化核心点在于尽量减少操作跨度,包括代码执
- 从内部来看,每个session都只是一个普通的Django model(在 django.contrib.sessions.models 中
- php多进程实现PHP有一组进程控制函数(编译时需要–enable-pcntl与posix扩展),使得php能在nginx系统中实现跟c一样
- Linux终端里面可谓是奇妙无限,很多优秀的软件都诞生在终端里面。相较之下,Windows本身的理念和Linux就不一致,所以,你懂得。 下
- Microsoft Access 数据库 (.mdb) 文件大小2 G 字节。不
- 前言接着上一篇的故事工厂模式继续,手机要出厂,显然光一个手机肯定是不行的,还需要包装盒、充电器等等东西。我们按照上一篇提到的工厂模式,去建立
- 先给大家介绍下python中format函数,在文章下面给大家介绍python.format()函数的简单使用---恢复内容开始---pyt