FastAPI从入门到实战(13)——常见配置项

2023-11-02

这一部分的内容主要是一些常见的配置,包括路由、静态文件等,还包括一些路径和文档的修饰器,包括简介、标签参数等内容。

配置静态文件

from fastapi import FastAPI
from fastapi.staticfiles import StaticFiles

app = FastAPI()

app.mount("/static", StaticFiles(directory="static"), name="static")

配置静态文件需要导入fastapi内对应的staticfiles包,然后利用mount方法将对应的静态文件目录挂载到app应用上即可;

对于参数,参数/static指定挂载的路径,即客户端访问的根路径;参数StaticFiles指定挂载的是静态文件;参数directory="static"指定静态文件的目录;name="static"指定fastapi内部识别的名称;

访问效果如下,直接在浏览器输入ip:端口/路径/文件全名.后缀即可;

image-20221203191947908

路由配置

整体目录结构如下,主应用放在根目录下,其他的应用包放在和主应用同级目录下;

image-20221203194345896

  • 在应用包内新建应用stu01.py,同时在stu01应用内利用fastapi内的APIRouter创建fastapi应用app01,接着针对app01进行代码编写即可;
# -*- coding: utf-8 -*-
# @Time: 2022/11/24 16:24
# @Author: MinChess
# @File: stu01.py
# @Software: PyCharm

from fastapi import APIRouter,Path
from enum import Enum


app01 = APIRouter()


@app01.get("/stu01/parameters")
def path_params01():
    return {"message": "This is a message"}
  • stu包的__init__.py内导入相关的应用
# -*- coding: utf-8 -*-
# @Time: 2022/11/24 16:24
# @Author: MinChess
# @File: __init__.py.py
# @Software: PyCharm

from .stu01 import app01
from .stu02 import app02
from .stu03 import app03
from .stu04 import app04
from .stu05 import app05
from .stu06 import app06
from .stu07 import app07
from .stu08 import app08
  • 在主程序中导入相关的应用from stu import app01, app02, app03, app04, app05, app06, app07, app08,接着利用include_router将子应用挂载到主应用程序上,参数app01指定挂载的子应用,prefix='/stu'表示子应用的访问路径,tags是指定文档内对应应用的标签;tags配置文档标识的,对请求无影响。
from fastapi import FastAPI, Request
from fastapi.responses import JSONResponse, PlainTextResponse, HTMLResponse
from fastapi.exceptions import RequestValidationError
from fastapi.staticfiles import StaticFiles
from stu import app01, app02, app03, app04, app05, app06, app07, app08

app = FastAPI(
    title='FastAPI学习教程文档——title',
    description='这是FastAPI教程的文档——description',
    version='1.0.0',
    docs_url='/docs',
    redoc_url='/redoc',
)

app.include_router(app01, prefix='/stu', tags=['路径参数与数值参数校验'])
app.include_router(app02, prefix='/stu', tags=['查询参数与字符串参数校验'])
app.include_router(app03, prefix="/stu", tags=['请求体与混合参数'])
app.include_router(app04, prefix="/stu", tags=['请求体函数参数设置'])
app.include_router(app05, prefix="/stu", tags=['cookie和header参数设置'])
app.include_router(app06, prefix="/stu", tags=['响应模型与状态码'])
app.include_router(app07, prefix="/stu", tags=['表单请求与上传文件'])
app.include_router(app08, prefix="/stu", tags=['错误处理和更新请求体'])

配置路由是比较简单的,新建python包,在python包内利用APIRouter创建应用,再将应用挂载到主应用上即可;

image-20221203192516716

文档配置

app = FastAPI(
    # 创建一个FastAPI实例\这里的变量 app 会是 FastAPI 类的一个「实例」。\这个实例将是创建你所有 API 的主要交互对象。\这个 app 同样在命令中被 uvicorn 所引用:
    title='FastAPI学习教程文档——title',
    description='这是FastAPI教程的文档——description',
    version='1.0.0',
    docs_url='/docs',
    redoc_url='/redoc',
)

这个在项目开始中就提到了,这些元数据也都是设置文档的信息的,具体的效果参看下面的图片;

image-20221203193212996

路径配置

@app.get("/hello/{name}", tags=["默认"], summary="这个是summary")
async def say_hello(name: str):
    """
    这里是文档字符串,可以用MarkDown
    - 序号
    - 序号
    ## 二级标题
    ```
    @app.exception_handler(StarletteHTTPException)
    async def http_exception_handler(request, exc):
        print(f"全局异常:{request.method}URL{request.url}Headers:{request.headers}{traceback.format_exc()}")
        return PlainTextResponse(str(exc.detail), status_code=exc.status_code)
    ```
    """
    return {"message": f"Hello {name}"}

同文档配置,这些数据也都是针对每个请求的路径操作添加信息,是直接传递给路径装饰器函数的,并不能传递给路径操作函数,主要也是文档内的展示信息;

这里的docstring就是上面代码中"""包裹的内容,注意这部分内容不能和description同时展示,description会覆盖docstring,其中docstring支持解析MarkDown格式内容,但是缩进需要控制;

image-20221203193438599

响应描述配置

@app01.get(
    "/stu01/parameters",
    summary="响应summary",
    response_description="响应description"
           )
def path_params01():
    return {"message": "This is a message"}

和其他设置方法一样,直接在路径操作装饰器内设置元数据就行,具体的都可以参看源码。

image-20221203201820448

弃用路径操作

同上面的响应描述配置,在路径装饰器内设置deprecated=True即可:

@app01.get("/stu01/{str}", deprecated=True)

这样的配置只是在文档中展示为弃用状态,实际上这个请求依旧能用!

image-20221203202204038

另外,对于参数(路径参数、查询参数…)的设置,在前面第4小节中设置过,方法都大同小异:

https://blog.jiumoz.com/archives/fastapi-cong-ru-men-dao-shi-zhan-lu-jing-can-shu-yu-shu-zhi-xiao-yan#%E5%85%83%E6%95%B0%E6%8D%AE


感谢阅读!

九陌斋地址:https://blog.jiumoz.com/archives/fastapi-cong-ru-men-dao-shi-zhan-13-chang-jian-pei-zhi-xiang

欢 迎 关 注 博 主 个 人 小 程 序!
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

FastAPI从入门到实战(13)——常见配置项 的相关文章

随机推荐

  • 51单片机PWM输出

    PWM输出 学期快结束了 51单片机的学习也差不多告一段落 也快要转入新的学习阶段 寒假找个时间看看32 小白哈哈哈 下面是我学习51定时器弄出来的小东西 一个PWM的输出 还请大神指点 刚开始觉得PWM输出应该不难 很容易做的 但是后面越
  • Spring Boot使用Scheduled完成自动任务

    说明 Scheduled注解可以控制方法定时执行 其中有三个参数可选择 1 fixedDelay控制方法执行的间隔时间 是以上一次方法执行完开始算起 如上一次方法执行阻塞住了 那么直到上一次执行完 并间隔给定的时间后 执行下一次 2 fix
  • layui php phpexcel导出,Yii2 基于 layui 的 Excel 上传并导入数据(含分页)

    安装命令 composer require phpoffice phpexcel 引入layui包 我这里用的是2 4 5的版本 请自行下载对应版本 layui前台页面 导入文件 卡号信息 layui use form element up
  • 【python随笔】之【将doc、docx文件保存为txt文件】

    import win32com client def change word to txt word path save path print 读取中 word win32com client Dispatch Word Applicati
  • vector 操作

    C 内置的数组支持容器的机制 但是它不支持容器抽象的语义 要解决此问题我们自己实现这样的类 在标准C 中 用容器向量 vector 实现 容器向量也是一个类模板 标准库vector类型使用需要的头文件 include
  • 汇编语言笔记-keil5软件仿真及调试

    目录 keil5调试功能 软件仿真设置 硬件调试设置 调试方法 调试选项及介绍 调试窗口 Command Disassembly Symbols Registers Call Stack Locals Watch Memory Serial
  • 赶快进来!!!手把手教你贪吃蛇

    一 大体框架 这里和前面写过的游戏一样 大体框架都是这样 有个简要的目录 我们主要是对play 函数进行封装 由于我们引用了自己的头文件 game h 所以我们可以把所要引用的库函数的预处理指令都放在 game h 的头文件中 如果你细心的
  • Vue3中vuex的基本使用

    一 基本结构 src store index js中 代码如下 vue3中创建store实例对象的方法createStore 按需引入 import createStore from vuex export default createSt
  • pywt 安装学习

    安装 conda install c conda forge pywavelets github地址 里面有demo https github com PyWavelets pywt 这个是学习笔记 https blog csdn net
  • UPC--扑克牌

    题目描述 从一副含有n n 10000 张的扑克牌 显然每张扑克牌都不相同 中 分给m m 100 个人 第i个人得到ai 0 ai 100 张牌 求一共有几种分法 这个数可能非常大 请输出此数模10007后的结果 输入 第一行两个整数 为
  • HDU1874 单源最短路经 dijkstra或者floyd

    include
  • 3、域渗透详解

    在渗透测试过程中 我们经常会遇到以下场景 某处于域中的服务器通过路由做端口映射 对外提供web服务 我们通过web脚本漏洞获得了该主机的system权限 如果甲方有进一步的内网渗透测试需求 以证明企业所面临的巨大风险 这个时候就需要做内网的
  • 模拟IC应届生都这么牛,我想到了崩溃

    再过两个月就到学弟学妹找工作的高峰期了 做为一个2007年的毕业生 能为学弟学妹做的 就是把我去年到今年找工作的经历和经验与他们分享 希望大家都能找到合适的工作 因为本人是模拟ic设计方向的 所以只能介绍些模拟ic设计方面的找工作经验 其实
  • SVM如何避免过拟合

    过拟合 Overfitting 表现为在训练数据上模型的预测很准 在未知数据上预测很差 过拟合主要是因为训练数据中的异常点 这些点严重偏离正常位置 我们知道 决定SVM最优分类超平面的恰恰是那些占少数的支持向量 如果支持向量中碰巧存在异常点
  • pyside6中QcommandLinkButton 控件qss有哪些用法和案例

    QCommandLinkButton 是 Qt GUI 框架中的一个功能按钮类 而 Qt Style Sheets QSS 提供了一种强大的方式来自定义 Qt 控件的外观 以下是 QCommandLinkButton 常用的 QSS 用法
  • 比亚迪半导体IPO再生波折:又被中止审核 红杉小米是股东

    雷递网 雷建平 4月1日报道 2022年1月底刚刚过会的比亚迪半导体上市再生波折 于2022年3月31日的审核再度被中止 这不是比亚迪半导体IPO审核第一次被深交所中止 2021年8月8日 因律师北京市天元律师事务所被中国证监会立案调查 比
  • [从零开始学DeepFaceLab-16]: 使用-命令行八大操作步骤-第6步:模型的选择与训练 - 进阶 - SAEHD模型训练参数详解与优化

    目录 前言 第1章 SAEHD模型训练参数详解 1 1 SAEHD参数汇总 默认 1 2 参数详解
  • 手把手教你:解决python UnicodeDecodeError: 'gb2312' codec can't decode问题

    问题 UnicodeDecodeError gb2312 codec can t decode bytes in position 2 3 illegal multibyte sequence 原因 python在做将普通字符串转换为uni
  • 【Github Action】使用ssh-deploy上传文件的小坑

    可以使用这个Github Action上传文件到服务器 https github com easingthemes ssh deploy README中描述了使用方法 name Deploy to Staging server uses e
  • FastAPI从入门到实战(13)——常见配置项

    这一部分的内容主要是一些常见的配置 包括路由 静态文件等 还包括一些路径和文档的修饰器 包括简介 标签参数等内容 配置静态文件 from fastapi import FastAPI from fastapi staticfiles imp