Python FastAPI 多参数传递

news2025/1/10 11:56:12

Python FastAPI请求参数传递

FastAPI多参数传递类型

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

  • 路径参数传递:获取自定义的构造URL中的参数
  • GET参数传递:获取一个URL后面带的?param1=1&param2=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"}
    
  • 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

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/75445.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

ubuntu20.04+anaconda+yolov5训练kitti数据集

yolov5安装流程 一、Anaconda安装 1.Anaconda官网:https://www.anaconda.com/products/distribution 2.点击Download,下载For Linux版本 3.到下载的文件夹,输入: bash ~/Downloads/Anaconda3-xxxxxxxxx.sh # 根据下载的文件不同&#xff…

火爆全网的ChatGPT机器人,你玩了吗?

最近几天,由OpenAI公司发布的ChatGPT聊天机器人火了,小杨也怀着对新鲜事物的好奇,亲自体验了一下这个火爆全网,让人沉迷其中无法自拔的ChatGPT聊天机器人,经过体验,我只想用一个字来表达我的感受&#xff0…

⚡通信管理模块⚡

目录 🌳.通信管理模块的介绍 🌳.通信模块的设计 🌳.ListShow函数 🌳.UpLoad函数 🌳.DownLoad函数 下载的断点续传 🌳.通信管理模块的介绍 通信管理模块管理着服务器与浏览器之间的通信: 当服务器收…

猿如意工具-【SwitchHosts】详情介绍

一、什么是猿如意? 在发表文章的契机下,看到了【猿如意】这个名词。处于好奇,点击进行了解。 发现是我们熟悉的CSDN提供的一个面向开发者的辅助开发工具箱,猿如意的意思是-程序猿(员)的如意兵器。 它提供…

Elasticsearch与spring data整合api变化

记录 spring-data-elasticsearch 版本api变化 https://blog.csdn.net/zlpzlpzyd/article/details/128255792 spring boot 2.7.x 对应 spring-data-elasticsearch 4.4.x 排查问题之前先看一下上述链接中版本的对应关系 org.springframework.data.elasticsearch.core.Elastics…

如何搭建真实的性能测试环境?

在编写脚本的同时,执行场景之前需要完成测试环境的搭建工作,这里包括硬件和软件环境的搭建。根据性能测试计划中的测试环境规划,完成对整个测试环境的搭建。由于性能测试的特殊性,整个测试环境需要在严格的独立监控下管理&#xf…

微信建群怎么建?2个方法,快速学会!

​如果你想建立一个微信群来提高工作效率,你该怎么办?微信建群怎么建,找了很长一段时间不到。下面小编分享2个微信建群的方法,可以让您快速学习如何建立微信群!感兴趣的小伙伴可以来看看哦! 微信建群方法一…

JDBC第一章节(从概念到操作)

一、数据持久化存储回顾 1、持久化概述 2. JAVA中的数据存储 二、JDBC概述 1.概述 1.1 概述: 1.2 没有jdbc之前存在一些问题 1.3 有jdbc 之后 1.4 JDBC本质 1.5 优点 三、JDBC API 四、初始JDBC 操作数据库 1、操作步骤概述 2、实操步骤 2.1 导入MySQ…

Vue 实现拖拽模块(三)自定义拖拽组件的样式

上文介绍了 自定义拖拽组件位置 的简单实现,本文将继续给大家分享如何自定义拖拽组件位置的简单实现,文中通过示例代码介绍,感兴趣的小伙伴们可以了解一下 本文主要介绍了 Vue 自定义拖拽组件的样式,具体如下: 支持通过…

番外-LogParser(IIS日志分析)

编写原因:在线的那个信息管理系统,总有人添加空白数据,一加就是很多条,用这个分析一下,再发现之后将其IP拉入黑名单 1,下载安装 网盘下载链接 提取码:229e 文件下载后解压,解压后为…

Lecture5:卷积层、池化层、全连接层

目录 1.卷积层、池化层、全连接层 1.1 全连接层 1.2 卷积层 1.3 池化层 1.卷积层、池化层、全连接层 1.1 全连接层 对全连接层而言,我们要做的就是在这些向量上进行操作,比如我们有一张RGB-D图片,它的大小为32*32*3,我们将所…

vue3 几款值得推荐的UI组件库

推荐几个比较流行的VUE3 UI框架,同时提供出色的开发人员体验,合理利用,又或者学习借鉴都是不错的选择,排名不分先后。 Ant Design Vue 官方网站:https://2x.antdv.com/components/overview/ Ant Design Vue 是一个非…

PingCAP 成为中国唯一入选 Forrester Wave 数据库厂商,被评为卓越表现者

2022 年 12 月 6 日,国际权威研究机构 Forrester 发布了「Forrester Wave™: Translytical Data Platforms, Q4 2022 」报告,企业级开源分布式数据库厂商 PingCAP 作为中国唯一入围的数据库厂商,首次参评该报告即获评“卓越表现者&#xff08…

微服务框架 SpringCloud微服务架构 29 ES 集群 29.3 集群职责及脑裂

微服务框架 【SpringCloudRabbitMQDockerRedis搜索分布式,系统详解springcloud微服务技术栈课程|黑马程序员Java微服务】 SpringCloud微服务架构 文章目录微服务框架SpringCloud微服务架构29 ES 集群29.3 集群职责及脑裂29.3.1 ES 集群的节点角色29.3.2 ES集群的分…

RAID图解

RAID图解什么是RAID各种 RAID 详解RAID 0RAID 1RAID 2(已淘汰)RAID 3RAID 4RAID 5RAID 6RAID 7RAID 01RAID 10RAID 10和RAID 01有何区别?实操教程其他问题最近在涉及到服务器安装系统这块才了解到RAID这个知识点,上网了解该知识&a…

Nginx 动静分离相关配置解析

Nginx 动静分离相关配置解析 本篇主要介绍nginx 动静分离相关配置解析 概述 动静分离是让动态网站里的动态网页根据一定规则把不变的资源和经常变的资源区分开来,动静资源做好了拆分以后,我们就可以根据静态资源的特点将其做缓存操作,这就是…

基于jsp+mysql+ssm智慧仓库进销存系统-计算机毕业设计

项目介绍 企业仓库库存系统的设计在SSM的框架下,采用JAVA编程语言和JSP技术,,并使用Mysql作为系统的数据库。该系统设计了强大的功能模块,考虑了企业库存管理的各个方面。这些主要功能模块分别是系统用户管理、用户信息管理、商品…

CUDNN与CUDA的踩坑与记录

CUDNN与CUDA的踩坑与记录 CUDA的安装 nvidia-smi看显卡驱动能够安装的最高版本的CUDA下载CUDA–>点击安装过程去掉显卡驱动安装完成的结果如下:Summary Driver: Not Selected Toolkit: Installed in /usr/local/cuda-10.2/ Samples: Installed in /home/g…

【世界杯中的安全思考】工控设备

目录 1、总述 2、半自动越位技术:人工智能辅助裁判 3、卡塔尔的智能道路 4、体育场的冷却技术 5、医疗援助的可穿戴设备 6、实时导航 7、照明系统 8、感官观察室 1、总述 从世界杯带来的科技感,可以看出大到球场,小到足球,…

厨房装修竟然有这么多你不知道的事

每个家庭的厨房大小、形状不同,厨房的建筑结构在房子中往往也是比较复杂的,橱柜等设施如何安置,都要因地制宜,很难说怎样做最好。但这并不意味着厨房的布局没有规律可循。在规划厨房布局时,最简单的办法就是按照做饭的…