FastApi学习(二)
前言
继续学习
此为第二篇, 还差些知识点就可以结束, 更多的比如用户的身份校验/ swagger 文档修改等以后会单独写
正文
使用枚举来限定参数
可以使用枚举的方式来限定参数为某几个值之内才通过
from fastapi import FastAPI
from enum import Enum
class ModelName(str, Enum):
alexnet = "alexnet"
resnet = "resnet"
lenet = "lenet"
app = FastAPI()
@app.get("/model/{model_name}")
async def get_model(model_name: ModelName): # 限定参数必须是ModelName枚举中的
if model_name == ModelName.alexnet: # 枚举判断方法1
return {
"model_name": model_name
}
if model_name.value == "lenet": # 枚举判断方法2
return {
"model_name": model_name
}
return {
"model_name": model_name
}
Fast错误返回
以上面为例, 如果你传递了不在枚举中的参数, Fast 会返回错误给客户端, 例如
{
"detail": [
{
"loc": [
"path", # 出错的地方
"model_name" # 具体的参数
],
"msg": "value is not a valid enumeration member; permitted: 'alexnet', 'resnet', 'lenet'", # 出错信息
"type": "type_error.enum", # 出错type
"ctx": {
"enum_values": [
"alexnet",
"resnet",
"lenet"
]
}
}
]
}
URL传递路径参数
有时候需要传递路径参数给后端, 如果使用灵活的方式
@app.get("/files/{file_path:path}")
async def read_file(file_path: str):
return {
"file_path": file_path
}
设置参数为 path 即可,注意 : 后不能加空格否则会404
因为我们匹配的 URL files本身后面加了 /, 如果我们想在传递时读取到的参数本身前面就带有 /, 写 // 即可, 例如: http://127.0.0.1:8000/files//home/johndoe/myfile.txt 读取到的就是 /home/johndoe/myfile.txt
参数默认值
对于需要分页的接口来说,通常需要传递 page 和 page_size , 而通常, 为了提高代码健壮性, 我们需要给 page 和 page_size 指定一个默认值, 在(一)中我们介绍了如何设置某个字段为可传, 现在我们在FastApi 中指定参数默认值的方法如下
@app.get("/log")
async def get_logs(page: int = 1, page_size: int = 20):
return {
"page": page,
"page_size": page_size
}
测试不带参数 http://127.0.0.1:8000/log
返回默认值
{
"page": 1,
"page_size": 20
}
测试带参数 http://127.0.0.1:8000/log?page=2
返回
{
"page": 2,
"page_size": 20
}
Form表单传参
我们之前讲了从 body 的 JSON 里获取参数, 这里说一下从传统的 Form 表单里获取数据(application/x-www-form-urlencoded/multipart/form-data)
想要从 Form 中获取数据,需要导入 Form 模块, 并且安装 python-multipart 包
from fastapi import FastAPI, Form
app = FastAPI()
@app.post("/login")
async def login(*, name: str = Form(...), pwd: str = Form(...)): # 函数的接受参数第一个是 * 代表此函数只接受关键字传参
# Form(...) 必写
return {
"name": name,
"pwd": pwd
}
FastApi学习(二)的更多相关文章
- FastAPI 学习之路(十二)接口几个额外信息和额外数据类型
系列文章: FastAPI 学习之路(一)fastapi--高性能web开发框架 FastAPI 学习之路(二) FastAPI 学习之路(三) FastAPI 学习之路(四) FastAPI 学习之 ...
- FastAPI 学习之路(二十)接口文档配置相关
系列文章: FastAPI 学习之路(一)fastapi--高性能web开发框架 FastAPI 学习之路(二) FastAPI 学习之路(三) FastAPI 学习之路(四) FastAPI 学习之 ...
- FastAPI 学习之路(四十六)WebSockets(二)
上一篇文章,我们分享了WebSockets一些入门的,我们这节课,在原来的基础上,对于讲解的进行一个演示.我们最后分享了依赖token等.首先我们对上次的代码进行调整. 我们之前分享FastAPI 学 ...
- FastAPI 学习之路(六)查询参数,字符串的校验
系列文章: FastAPI 学习之路(一)fastapi--高性能web开发框架 FastAPI 学习之路(二) FastAPI 学习之路(三) FastAPI 学习之路(四) FastAPI 学习之 ...
- FastAPI 学习之路(三)
系列文章: FastAPI 学习之路(一)fastapi--高性能web开发框架 FastAPI 学习之路(二) 之前的文章分享了如何去创建一个简单的路径的请求.那么我们这次分享的如何在请求路径中,增 ...
- FastAPI 学习之路(四)
系列文章: FastAPI 学习之路(一)fastapi--高性能web开发框架 FastAPI 学习之路(二) FastAPI 学习之路(三) 之前的文章分享了如何去在请求中增加参数,本文我们将分享 ...
- FastAPI 学习之路(五)
系列文章: FastAPI 学习之路(一)fastapi--高性能web开发框架 FastAPI 学习之路(二) FastAPI 学习之路(三) FastAPI 学习之路(四) 我们之前的文章分享了 ...
- FastAPI 学习之路(七)字符串的校验
系列文章: FastAPI 学习之路(一)fastapi--高性能web开发框架 FastAPI 学习之路(二) FastAPI 学习之路(三) FastAPI 学习之路(四) FastAPI 学习之 ...
- FastAPI 学习之路(八)路径参数和数值的校验
系列文章: FastAPI 学习之路(一)fastapi--高性能web开发框架 FastAPI 学习之路(二) FastAPI 学习之路(三) FastAPI 学习之路(四) FastAPI 学习之 ...
随机推荐
- 【Dotnet9-01】从0开始搭建开源项目-lqclass.com
行文目录 一. 前言 1.1 我的现有网站 1.2 想法:新开发一个网站 1.3 目前开发计划 二. 行动了 2.1 Github创建项目 2.2 使用 WTM 搭建后台框架 2.3 项目演示 2.4 ...
- jquery 执行a 标签 点击事件 跳转href 路径
<a href="./export.pdf" id="pdfdown" download="文件名.pdf">下载</a& ...
- win 7 MongoDB 下载安装
准备: 1.mongodb-win32-x86_64-2008plus-ssl-3.4.3-signed.msi 官方下载 2.1.建立数据存放目录 F:\MongoDB\ 2.建立日志文件 ...
- PHP与Mysql之间的纠缠(超详细)
目录 第一章 PHP操作mysql数据库 index.html代码 connect.php代码如下: list.php代码如下: 第二章 PHP 会话管理和控制 一.php 会话控制 之 PHP中的C ...
- django 初始化项目 和modelviewset 使用
django初始化项目 1.初始化项目结构└─shiyanlou_project │ .gitignore│ README.en.md # 英文│ README.md # 中文项目简介│├─celer ...
- 超详细分析Bootloader到内核的启动流程(万字长文)
@ 目录 Bootloader启动流程分析 Bootloader第一阶段的功能 硬件设备初始化 为加载 Bootloader的第二阶段代码准备RAM空间(初始化内存空间) 复制 Bootloader的 ...
- js下 Day05、DOM案例
一.简易购物车 效果图: 功能思路分析: 功能一:数量加减 \1. 找到所有的加号按钮,循环绑定点击事件.点击加号时让对应的数量+1 (找清楚加号和数量的关系,让数量标签的内容++) \2. 找到所有 ...
- 我用 go-zero 一周实现了一个中台系统,已开源!
作者:Jack 最近发现golang社区里出了一个新星的微服务框架,来自好未来,光看这个名字,就很有奔头,之前,也只是玩过go-micro,其实真正的还没有在项目中运用过,只是觉得 微服务,grpc ...
- 详解Python Google Protocol Buffer
为什么要使用PB? PB(Protocol Buffer)是 Google 开发的用于结构化数据交换格式,作为腾讯云日志服务标准写入格式.因此用于写入日志数据前,需要将日志原始数据序列化为 PB 数据 ...
- JavaScript实现自定义右键菜单
JavaScript实现自定义右键菜单,思路如下: 1. 屏蔽默认右键事件: 2. 隐藏自定义的菜单模块(如div.ul等): 3. 右键点击特定或非特定区域,显示菜单模块: 4. 再次点击,隐藏菜单 ...