前言

继续学习

此为第二篇, 还差些知识点就可以结束, 更多的比如用户的身份校验/ swagger 文档修改等以后会单独写

正文

使用枚举来限定参数

可以使用枚举的方式来限定参数为某几个值之内才通过

  1. from fastapi import FastAPI
  2. from enum import Enum
  3. class ModelName(str, Enum):
  4. alexnet = "alexnet"
  5. resnet = "resnet"
  6. lenet = "lenet"
  7. app = FastAPI()
  8. @app.get("/model/{model_name}")
  9. async def get_model(model_name: ModelName): # 限定参数必须是ModelName枚举中的
  10. if model_name == ModelName.alexnet: # 枚举判断方法1
  11. return {
  12. "model_name": model_name
  13. }
  14. if model_name.value == "lenet": # 枚举判断方法2
  15. return {
  16. "model_name": model_name
  17. }
  18. return {
  19. "model_name": model_name
  20. }

Fast错误返回

以上面为例, 如果你传递了不在枚举中的参数, Fast 会返回错误给客户端, 例如

  1. {
  2. "detail": [
  3. {
  4. "loc": [
  5. "path", # 出错的地方
  6. "model_name" # 具体的参数
  7. ],
  8. "msg": "value is not a valid enumeration member; permitted: 'alexnet', 'resnet', 'lenet'", # 出错信息
  9. "type": "type_error.enum", # 出错type
  10. "ctx": {
  11. "enum_values": [
  12. "alexnet",
  13. "resnet",
  14. "lenet"
  15. ]
  16. }
  17. }
  18. ]
  19. }

URL传递路径参数

有时候需要传递路径参数给后端, 如果使用灵活的方式

  1. @app.get("/files/{file_path:path}")
  2. async def read_file(file_path: str):
  3. return {
  4. "file_path": file_path
  5. }

设置参数为 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 中指定参数默认值的方法如下

  1. @app.get("/log")
  2. async def get_logs(page: int = 1, page_size: int = 20):
  3. return {
  4. "page": page,
  5. "page_size": page_size
  6. }

测试不带参数 http://127.0.0.1:8000/log

返回默认值

  1. {
  2. "page": 1,
  3. "page_size": 20
  4. }

测试带参数 http://127.0.0.1:8000/log?page=2

返回

  1. {
  2. "page": 2,
  3. "page_size": 20
  4. }

Form表单传参

我们之前讲了从 body 的 JSON 里获取参数, 这里说一下从传统的 Form 表单里获取数据(application/x-www-form-urlencoded/multipart/form-data)

想要从 Form 中获取数据,需要导入 Form 模块, 并且安装 python-multipart

  1. from fastapi import FastAPI, Form
  2. app = FastAPI()
  3. @app.post("/login")
  4. async def login(*, name: str = Form(...), pwd: str = Form(...)): # 函数的接受参数第一个是 * 代表此函数只接受关键字传参
  5. # Form(...) 必写
  6. return {
  7. "name": name,
  8. "pwd": pwd
  9. }

FastApi学习(二)的更多相关文章

  1. FastAPI 学习之路(十二)接口几个额外信息和额外数据类型

    系列文章: FastAPI 学习之路(一)fastapi--高性能web开发框架 FastAPI 学习之路(二) FastAPI 学习之路(三) FastAPI 学习之路(四) FastAPI 学习之 ...

  2. FastAPI 学习之路(二十)接口文档配置相关

    系列文章: FastAPI 学习之路(一)fastapi--高性能web开发框架 FastAPI 学习之路(二) FastAPI 学习之路(三) FastAPI 学习之路(四) FastAPI 学习之 ...

  3. FastAPI 学习之路(四十六)WebSockets(二)

    上一篇文章,我们分享了WebSockets一些入门的,我们这节课,在原来的基础上,对于讲解的进行一个演示.我们最后分享了依赖token等.首先我们对上次的代码进行调整. 我们之前分享FastAPI 学 ...

  4. FastAPI 学习之路(六)查询参数,字符串的校验

    系列文章: FastAPI 学习之路(一)fastapi--高性能web开发框架 FastAPI 学习之路(二) FastAPI 学习之路(三) FastAPI 学习之路(四) FastAPI 学习之 ...

  5. FastAPI 学习之路(三)

    系列文章: FastAPI 学习之路(一)fastapi--高性能web开发框架 FastAPI 学习之路(二) 之前的文章分享了如何去创建一个简单的路径的请求.那么我们这次分享的如何在请求路径中,增 ...

  6. FastAPI 学习之路(四)

    系列文章: FastAPI 学习之路(一)fastapi--高性能web开发框架 FastAPI 学习之路(二) FastAPI 学习之路(三) 之前的文章分享了如何去在请求中增加参数,本文我们将分享 ...

  7. FastAPI 学习之路(五)

    系列文章: FastAPI 学习之路(一)fastapi--高性能web开发框架 FastAPI 学习之路(二) FastAPI 学习之路(三) FastAPI 学习之路(四)  我们之前的文章分享了 ...

  8. FastAPI 学习之路(七)字符串的校验

    系列文章: FastAPI 学习之路(一)fastapi--高性能web开发框架 FastAPI 学习之路(二) FastAPI 学习之路(三) FastAPI 学习之路(四) FastAPI 学习之 ...

  9. FastAPI 学习之路(八)路径参数和数值的校验

    系列文章: FastAPI 学习之路(一)fastapi--高性能web开发框架 FastAPI 学习之路(二) FastAPI 学习之路(三) FastAPI 学习之路(四) FastAPI 学习之 ...

随机推荐

  1. vue结合element-ui实现二级复选框checkbox

    vue结合element-ui实现二级复选框checkbox 话不多说先上效果 交互:1.点击按钮全选,所有的checkbox全部选中:点击清空,所有的checkbox框都不选:点击确定获取选中的ch ...

  2. Codeforces Edu Round 60 A-E

    A. Best Subsegment 显然,选择数列中的最大值当做区间(长度为\(1\)).只要尝试最大值这个区间是否能扩展(左右两边值是否跟它一样就行了) #include <cstdio&g ...

  3. java试用静态图片制作gif

    参考博客:https://www.cnblogs.com/dreammyle/p/4843365.html 代码中需要的依赖: <!-- gif --> <dependency> ...

  4. hive实例的使用

    一.hive用本地文件进行词频统计 1.准备本地txt文件 2.启动hadoop,启动hive 3.创建数据库,创建文本表 4.映射本地文件的数据到文本 5.hql语句进行词频统计交将结果保存到结果表 ...

  5. 00-JAVA语法基础

    1. 原码为数的二进制数,反码是将其二进制数每一位按位取反.补码则不同,正数的补码是其原码本身,负数的补码是其除符号位以外其他每一位按位取反再加一,符号位不变. int a=100; a=a>& ...

  6. 设置RAC DB归档

    1.关闭集群数据库 srvctl stop database -d RAC 2.将节点一设置为归档模式 sqlplus / as sysdba startup mount alter database ...

  7. Spring自带的定时任务框架Schedule的优缺点及使用

    spring自带的定时任务框架的有点:简单,拆箱即用 spring自带的定时任务框架的缺点: 不支持集群:为避免重复执行的问题 不支持生命周期统一管理:不重启服务情况下关闭,启动任务 不支持分片任务: ...

  8. Struts2-059 漏洞复现

    0x00 漏洞简介 Apache Struts框架, 会对某些特定的标签的属性值,比如id属性进行二次解析,所以攻击者可以传递将在呈现标签属性时再次解析的OGNL表达式,造成OGNL表达式注入.从而可 ...

  9. [水题日常]Luogu1113 杂务

    这几天又在颓. 我的blog难度目前还比较低,主要面向像我这样子的新手(当然内容也会尽量讲得具体清楚一些)x 如果有错误还请指出~ 写完随笔之后才去翻了一下这题题解之后才注意到这题是有序的 QAQ完全 ...

  10. 多任务-python实现-进程(2.1.7)

    @ 目录 1.进程是什么 2.进程的生命周期 3.Python中多进程的实现 4.进程和线程的区别 1.进程是什么 进程(Process)是计算机中的程序关于某数据集合上的一次运行活动,是系统进行资源 ...