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


猜你喜欢
- K-means(K均值)算法是最简单的一种聚类算法,它期望最小化平方误差注:为避免运行时间过长,通常设置一个最大运行轮数或最小调整幅度阈值,
- 本文实例讲述了python处理大数字的方法。分享给大家供大家参考。具体实现方法如下:def getFactorial(n): &
- 发现问题写python的时候出现了这个错,然后网上的教程的解决方案几乎都是——“重新定义下这个变量”,看的我一脸懵逼后来发现原来是我把ret
- 现在大部分网站都使用asp+access构建,这样的话通过下载access数据库简单就可以对网站进行破坏! 而很多的网站都不太重
- 在用python进行图像处理时,二值化是非常重要的一步,现总结了自己遇到过的6种 图像二值化的方法(当然这个绝对不是全部的二值化方法,若发现
- 1. 线程的概念:线程,有时被称为轻量级进程(Lightweight Process,LWP),是程序执行流的最小单元。一个标准的线程由线程
- 1、获取秒级时间戳与毫秒级时间戳、微秒级时间戳import timeimport datetimet = time.time()print
- 前言在想题材之际,打开私信,有许多萌新&小伙伴询问我之前写的一篇《python爬取天气预报数据,并实现数据可视化》中的bug怎么解决
- 服务器之间的http数据传输直接使用python内置的http服务:python -m SimpleHTTPServer 8000此时,输入
- 建造者模式建造者模式用于创建复杂的对象。使用建造者模式可以使复杂的过程层次明了、清晰,把对象的创建以及使用进行了解耦。实际上从代码的角度上看
- 1. jquery.jqzoom.js//*************************************************
- 密钥密码'''如密钥短语密码为: university -> universty明文: abcdefghijk
- 本文实例为大家分享了python实现图书管理系统的具体代码,供大家参考,具体内容如下题目:写一个简单的图书借阅系统
- 传参时传递可变对象,实际上传的是指向内存地址的指针/引用这个标题是我的结论,也是我在做项目过程查到的。学过C的都知道,函数传参可以传值,也可
- 目录一、基本使用与逻辑二、特性三、错误对象四、较好的catch和throw策略五、Promise的错误处理六、性能损耗一、基本使用与逻辑使用
- 1. 基本介绍tensorflow设备内存管理模块实现了一个best-fit with coalescing算法(后文简称bfc算法)。bf
- Python的标准库中的os模块包含普遍的操作系统功能。如果你希望你的程序能够与平台无关的话,这个模块是尤为重要的。即它允许一个程序在编写后
- 程序运行环境code# -*- coding:utf-8 -*-# -----------------------------------#
- 前言最近找几个老友准备聊天发现几个已经被删除好友名单,做为潜水党多年的我已经不知道成为多少人的黑名单,但是好友列表却依然有不是好友的名单,面
- 偶然发现了for…else…这种用法,使用这个实现了break跳出嵌套的for循环In [31]: for i in range(1,5):