【FastAPI】P3 请求与响应

目录

  • 请求
    • 路径参数
    • 查询参数
  • 响应
    • JSON 响应
    • 文本响应
    • 返回 Pydantic 模型

在网络通讯中,请求(Request)响应(Response) 扮演着至关重要的角色,它们构成了客户端与服务器间互动的根本理念。

  • 请求,指的是客户端向服务器请求数据;
  • 响应,指的是服务器发送给客户端的 HTTP 响应;

总的来说,当客户端向服务器发送一个 HTTP 请求时,服务器会处理这个请求,并返回一个 HTTP 响应。


请求

FastAPI,支持多种类型的请求数据,如路径参数、查询参数等。

路径参数

把参数设置在路径上,识别资源的具体实例。

# 参数 user_id 放在路径上,识别资源的具体实例。
@app.get("/users/{user_id}")

实现步骤:

1. 运行完整代码:

from fastapi import FastAPIapp = FastAPI()@app.get("/users/{user_id}")
def get_user(user_id: int):return {"user_id": user_id}

2. 部署 uvicorn 服务器:

uvicorn main:app --reload

在这里插入图片描述

3. 通过网址访问:

http://127.0.0.1:8000/users/10010


查询参数

通过在路径后面添加问号(?)来附加查询参数,以提供额外的信息或者过滤条件。

@app.get("/users")
# 网址如下:
http://127.0.0.1:8000/users?user_id=10010&user_name=xuhongduo

实现步骤:

1. 运行完整代码:

from fastapi import FastAPIapp = FastAPI()@app.get("/users/")
def get_user(user_id: int, user_name: str):return {"user_id": user_id, "user_name": user_name}

2. 部署 uvicorn 服务器:

# 如果已部署,那么无需重启,reload在代码修改时自动重启服务器
uvicorn main:app --reload

3. 通过网址访问:

http://127.0.0.1:8000/users/?user_id=10010&user_name=xuhongduo


响应

响应一般包含:

  • 状态码:200表示成功,404表示未找到,500表示服务器错误等;
  • 响应体:文本、JSON、二进制文本等;

FastAPI 支持多种类型的响应,包括 JSON 响应、文本响应、文件响应、重定向响应和错误响应。

JSON 响应

JSON 响应是最常用的响应类型,用于传输结构化数据。

return {"user_id": user_id, "user_name": user_name}

文本响应

文本响应发送纯文本数据。

return "Hello, World!"

返回 Pydantic 模型

路由处理函数返回一个 Pydantic 模型实例,FastAPI 将自动将其转换为 JSON 格式,并作为响应发送给客户端:

1. 运行完整代码:

from pydantic import BaseModel
from typing import Optionalclass User(BaseModel):id: intname: stremail: Optional[str] = Nonefrom fastapi import FastAPI, HTTPExceptionapp = FastAPI()users = {1: {"name": "Alice", "email": "alice@example.com"},2: {"name": "Bob"},
}@app.get("/users/{user_id}")
def read_user(user_id: int):user = users.get(user_id)if user:return userelse:raise HTTPException(status_code=404, detail="User not found")

2. 通过网址访问:

http://127.0.0.1:8000/users/1

3. FastAPI 自动将 Pydantic 模型实例转换为 JSON 格式:

在这里插入图片描述

有关 FastAPI Pydantic 模型,请看 【FastAPI】P4 FastAPI Pydantic


以上
如有任何问题,请联系或留言,谢谢

2024.2.19

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

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

相关文章

代码随想录训练营第三十期|第三十七天|贪心算法 part06|● 738.单调递增的数字 ● 968.监控二叉树 ● 总结

738. 单调递增的数字 - 力扣(LeetCode) class Solution {public int monotoneIncreasingDigits(int n) {String s String.valueOf(n);char[] chars s.toCharArray();int start s.length();for (int i s.length() - 2; i > 0; i--) {if (chars[i]…

60秒表达力训练法:快速提高表达能力,摆脱嘴笨带来的困扰

60秒表达力训练法:快速提高表达能力,摆脱嘴笨带来的困扰 很多人由于缺乏结构意识,总是很难把一部电影、一件刚看到的事,说得清清楚楚,这往往并不是逻辑能力的问题。 比如,很多程序员逻辑能力非常强&#…

Linux编辑器——Vim详解

目录 ⭐前言 ⭐vim的基本概念 ⭐vim的基本操作 ⭐vim命令模式命令集 ⭐vim末行模式命令集 ⭐简单vim配置 ⭐配置文件的位置 ⭐常用配置选项 ⭐前言 vi/vim的区别简单点来说,它们都是多模式编辑器,不同的是vim是vi的升级版本,它不仅兼容…

LeetCode刷题笔记之二叉树(二)

一、二叉树的翻转 1. 226【翻转二叉树】 题目: 给你一棵二叉树的根节点 root ,翻转这棵二叉树,并返回其根节点。代码: class Solution {public TreeNode invertTree(TreeNode root) {//翻转二叉树,实际上就是交换左…

CMake的简单使用

一、一个最简单的CMake项目 在Ubuntu上使用CMake构建一个最简单的项目。 1. 安装CMake 首先安装CMake,这里使用的是Ubuntu系统。 sudo apt-get install cmake2. 编写源程序 编写代码,新建文件main.c。 // main.c #include "stdio.h"int …

Java学习笔记2024/2/20

今日作业: 题目1 完成课堂上所有练习 package test.test1; ​ import java.util.Random; ​ public class Test3 { ​public static void main(String[] args) {//键盘输入任意字符串,打乱里面的内容 ​//1.键盘输入任意字符串String str "abcd…

安卓adb调试备忘录

由于 MAC 的 USB 口全被占用着,采用无线连接刚方便,记录一下,以防忘记~ ADB原理 adb devices -l ## 列出连接的设备adb tcpip [端口号] adb tcpip 6666 # 将当前已连接USB上的Mobile端切换为TCP/IP模式,以6666端口进行监听. adb…

你真的了解—————NumPy吗

🌈个人主页:小田爱学编程 🔥 系列专栏:opencv 🏆🏆关注博主,随时获取更多关于IT的优质内容!🏆🏆 😀欢迎来到小田代码世界~ 😁 喜欢的…

【大厂AI课学习笔记】【2.2机器学习开发任务实例】(8)模型训练

好吧,搞了半天,都是围绕数据在干活,这也就验证了,我们说的,数据准备等工作,要占到机器学习项目一半以上的工作量和时间。而且数据决定了模型的天花板,算法只是去达到上限。 我们今天来学习模型…

Java实现Redis延时队列

“如何实现Redis延时队列”这个面试题应该也是比较常见的,解答如下: 使用sortedset(有序集合) ,拿时间戳作为 score ,消息内容作为key 调用 zadd 来生产消息,消费者用zrangebyscore 指令获取 N …

暴力枚举刷题2

题目来源:烤鸡 - 洛谷 参考书目:参考书籍:《深入浅出程序设计竞赛(基础篇)》 解题思路:这道题可以用暴力枚举的方法解决,用10层for循环,再if判断就能找到所有符合的情况。因为 n 的…

2、windows环境下vscode开发c/c++环境配置(一)

前言:VSCode是微软出的一款轻量级编辑器,它本身只是一款文本编辑器而已,并不是一个集成开发环境(IDE),几乎所有功能都是以插件扩展的形式所存在的。因此,我们想用它编程,不只是把vscode下载下来就行&#x…

数据分析 — 电商用户分析和用户 RFM 模型

目录 一、电商用户分析1、数据字段信息2、数据读取3、数据清洗4、可视化分析1、每年销售额的增长情况2、各个地区分店的销售额3、每个分店每一年的销售额4、销售淡旺季5、新增用户 二、RFM 模型1、RFM 模型的三个维度2、RFM 的客户类型标签3、RFM 模型的二分法思想4、代码 一、…

【C#小知识】c#中的delegate(委托)和event(事件)

今天来介绍一下delegate和event。delegate在c#中可以定义一个函数类型,可以将函数作为一个对象来使用。event在c#中则可以看做一个函数的集合,event中包含了一个或多个函数。 delegate using System;public class MyClass {//定义委托public delegate v…

计网day6

七 应用层 7.1 网络应用模型 7.2 DNS系统 7.3 文件传输协议FTP 7.4 电子邮件 7.5 万维网和HTTP协议

细数高德地图的发展史

根据2023年自然资源部公布的名单显示,以下公司通过“地图甲级测绘资质”换证审核,也就意味着,以下这些公司可以继续从事电子地图的采集和制作、商业合作等相关业务。 而这一点,对于以电子地图导航为主要业务支撑的企业至关重要。…

Sql Server 视图

USE [数据库名称] GO /****** Object: View [dbo].[视图名称] Script Date: 2024/2/19 10:08:13 ******/ SET ANSI_NULLS ON GO SET QUOTED_IDENTIFIER ON GO CREATE VIEW [dbo].[视图名称:V_XXXXX] AS SELECT FILED1, FILED2, FILED3, FILED4 FROM dbo.表名…

【编程题】跳石板

跳石板 分析后可知 要在众多解中寻找最优解 因此用动态规划 比如: 4-6只需跳一步,而6-8也只需一步,因此在刚才跳了一步的基础上再加1 8到10一步,8到12一步,9到12一步,8-10-12两步,因此到12位置…

Hash哈希

当需要快速查询数据的记录时: 手动按某规则为数据建立索引,利用数组维护数据若1中需要开大数组爆内存,利用官方库的Hash集合,可以将最好情况下的时间复杂度优化到O(1)避免T和M。 1. LC 2036 最大好子数组和 VP双周赛123T3。一开…

新增长100人研讨会:快消零售专场探讨招商加盟数字化转型实战

2024年2月2日下午,一场由纷享销客与杨国福集团联合主办的招商加盟数字化转型研讨会在上海成功举办。本次研讨会汇聚了众多快消零售业界的领军人物,共同探讨行业未来的新增长点。 会议伊始,杨国福集团数字化中心负责人王林林发表了主题演讲&a…