返回顶部
首页 > 资讯 > 后端开发 > Python >FastAPI--中间件(6)
  • 679
分享到

FastAPI--中间件(6)

中间件FastAPI 2023-01-31 08:01:28 679人浏览 八月长安

Python 官方文档:入门教程 => 点击学习

摘要

所谓的中间件,其实和我们bottle中的中间件作用是一致。有些方法或操作需要在所有路由之前执行,比如要加一个Http访问的拦截器,可以对部分接口api需要授权才能访问的接口进行验证之类的。FastAPI提供了一个@app.middlewar

所谓的中间件,其实和我们bottle中的中间件作用是一致。有些方法或操作需要在所有路由之前执行,比如要加一个Http访问的拦截器,可以对部分接口api需要授权才能访问的接口进行验证之类的。

FastAPI提供了一个@app.middleware("http")可以做到类似上面的拦截功能。其实和bottle或flask 钩子函数很相似

 

示例如下:

import uvicorn
from fastapi import FastAPI, Request
from fastapi.responses import JSONResponse

import time
from fastapi import FastAPI, HTTPException
from fastapi.exceptions import RequestValidationError
from fastapi.responses import PlainTextResponse
from starlette.exceptions import HTTPException as StarletteHTTPException

app = FastAPI()


@app.exception_handler(StarletteHTTPException)
async def http_exception_handler(request, exc):
    return PlainTextResponse(str(exc.detail), status_code=exc.status_code)


@app.exception_handler(RequestValidationError)
async def validation_exception_handler(request, exc):
    return jsONResponse({'mes': '触发了RequestValidationError错误,,错误信息:%s 你妹的错了!' % (str(exc))})


@app.get("/items/{item_id}")
async def read_item(item_id: int):
    return {"item_id": item_id}


@app.middleware("http")
async def add_process_time_header(request: Request, call_next):
    start_time = time.time()
    response = await call_next(request)
    process_time = time.time() - start_time
    response.headers["X-Process-Time"] = str(process_time)
    return response

if __name__ == '__main__':
    uvicorn.run(app='main:app', host="127.0.0.1", port=8000, reload=True, debug=True)

然后我们请求完成后发现,我们的响应头里多了一个新增的请求头:

http://127.0.0.1:8000/items/2


1.png

 

 

总结

中间件实际上是一个函数,在每个request处理之前被调用,同时又在每个response返回之前被调用。

1、首先接收访问过来的request。

2、然后针对request或其他功能执行自定义逻辑。

3、传递request给应用程序继续处理。

4、接收应用所产生的response。

5、然后针对response或其他功能执行自定义逻辑。

6、返回response。

 

 

本文参考链接:

http://www.zyiz.net/tech/detail-119883.html


--结束END--

本文标题: FastAPI--中间件(6)

本文链接: https://lsjlt.com/news/193708.html(转载时请注明来源链接)

有问题或投稿请发送至: 邮箱/279061341@qq.com    QQ/279061341

猜你喜欢
  • FastAPI--中间件(6)
    所谓的中间件,其实和我们bottle中的中间件作用是一致。有些方法或操作需要在所有路由之前执行,比如要加一个http访问的拦截器,可以对部分接口API需要授权才能访问的接口进行验证之类的。FastAPI提供了一个@app.middlewar...
    99+
    2023-01-31
    中间件 FastAPI
  • .NET 6中间件Http Logging怎么使用
    这篇文章主要介绍“.NET 6中间件Http Logging怎么使用”,在日常操作中,相信很多人在.NET 6中间件Http Logging怎么使用问题上存在疑惑,小编查阅了各式资料,整理出简单好用的...
    99+
    2023-06-22
  • .NET 6中间件Http Logging使用介绍
    Intro .NET 6 会引入一个 Http logging 的中间件,可以用来帮助我们比较方便记录请求和响应的信息 Sample 废话不多说,直接来看示例吧 var build...
    99+
    2024-04-02
  • Python利用fastapi实现上传文件
    目录使用File实现文件上传使用UploadFile实现文件上传UploadFile的属性设置上传文件是可选的上传多个文件知识点补充使用File实现文件上传 使用Form表单上传文件...
    99+
    2024-04-02
  • .NET 6 中的隐式命名空间引用
    目录1、历史变化2、新版本介绍3、More usage4、More前言: 之前写过一篇隐式命名空间引用的大概介绍,在一些小的测试项目中也有在用,一直没作为示例给大家分享,主要原因在...
    99+
    2024-04-02
  • 超实用vue中组件间通信的6种方式(最新推荐)
    目录前言1、 props / $emit2、ref / $refs3、eventBus事件总线($emit / $on)4、依赖注入(provide / inject)5、$pare...
    99+
    2022-11-13
    vue组件间通信 vue组件间通信方式
  • Python--6 文件操作
    文件通常用于存储数据或应用系统的参数。Python 提供了 OS、 os.path、 shutil 等模块处理文件, 其中包括打开文件、 读写文件、 复制和删除文件等函数。 python文件操作基本流程:   1.打开文件,或者新建立一个...
    99+
    2023-01-30
    操作 文件 Python
  • linux设置日志文件保存时间为6个月(/etc/logrotate.conf)
    编辑/etc/logrotate.conf文件 将全局的weekly下的rotate 4改为rotate 24,表示6个月; 将指定文件的monthly下的rotate 1改为rotate 6,表示6个月。  2、重启日志服务 servi...
    99+
    2023-09-01
    linux 运维 服务器
  • 以PHP代码为实例详解RabbitMQ消息队列中间件的6种模式
    目录RabbitMQ 6种工作模式安装6种模式最后RabbitMQ 6种工作模式 对RabbitMQ 6种工作模式(简单模式、工作模式、订阅模式、路由模式、主题模式、RPC模式)进行...
    99+
    2023-05-19
    RabbitMQ模式php实例 RabbitMQ消息队列中间件
  • FastAPI中怎么防止SQL注入攻击
    要防止SQL注入攻击,可以通过以下方法在FastAPI中进行防御: 使用ORM(Object Relational Mappin...
    99+
    2024-05-10
    FastAPI
  • ASP.NETCore中间件
    目录1.前言2.使用中间件2.1 Run2.2 Use2.3 Map和MapWhen3.顺序4.编写中间件(重点)4.1中间件类4.2中间件扩展方法5.按每次请求创建依赖注入(DI)...
    99+
    2024-04-02
  • Express中间件
    1.创建最基本的中间件 const express = require('express');const send = require('send');const app = express()const mw = function (re...
    99+
    2023-09-21
    中间件
  • Django 中间件
    目录 一.中间件 二.中间件用途 三.中间件方法 四.自定义中间件 process_view proc...
    99+
    2023-01-30
    中间件 Django
  • [Android studio] 第6节 Button控件
    目录 一、Button是什么? 二、使用步骤 1.demo 一、Button是什么? Button控件具有许多属性可以用来自定义其外观和行为。以下是Button控件常用的参数属性及其详解: android:id:设置Button的唯一...
    99+
    2023-10-03
    android studio android ide
  • ElasticSearch 6.x head插件安装
    ElasticSearch-head是一个H5编写的ElasticSearch集群操作和管理工具,可以对集群进行傻瓜式操作。显示集群的拓扑,并且能够执行索引和节点级别操作搜索接口能够查询集群中原始json或表格格式的检索数据能够快速访问并显...
    99+
    2023-01-31
    插件 ElasticSearch head
  • .Net Core中间件
    目录 一、什么是中间件 二、中间件的用途 三、中间件的三个概念 四、自定义中间件 五、ASP.NET Core附带中间件组件 六、中间件和过滤器的区别 一、什么是中间件          在浏览网站或者使用手机App加载内容的时候,浏览...
    99+
    2023-09-20
    前端 restful 服务器
  • Django之中间件
    中间件介绍   中间件是一个用来处理Django的请求和响应的框架级别的钩子。它是一个轻量、低级别的插件系统,用于在全局范围内改变Django的输入和输出。每个中间件组件都负责做一些特定的功能。   但是由于其影响的是全局,所以需要谨慎使...
    99+
    2023-01-30
    中间件 Django
  • django中间件-12
    目录 自定义中间件 函数定义 类定义 中间件的执行顺序 在django中,中间件其实...
    99+
    2023-01-30
    中间件 django
  • 230902-部署Gradio到已有FastAPI及服务器中
    1. 官方例子 run.py from fastapi import FastAPIimport gradio as grCUSTOM_PATH = "/gradio"app = FastAPI()...
    99+
    2023-09-25
    fastapi
  • 在.NET 6中使用日志组件log4net的方法
    本文将简单介绍在.NET 6中使用log4net的方法,具体见下文范例。 1.首先新建一个ASP.NET Core空项目 2.通过Nuget包管理器安装下面两个包 log4net...
    99+
    2024-04-02
软考高级职称资格查询
编程网,编程工程师的家园,是目前国内优秀的开源技术社区之一,形成了由开源软件库、代码分享、资讯、协作翻译、讨论区和博客等几大频道内容,为IT开发者提供了一个发现、使用、并交流开源技术的平台。
  • 官方手机版

  • 微信公众号

  • 商务合作