vr网站建设,工厂弄个网站做外贸如何,商业网站设计与制作,外贸网站建设注意事项和建议什么是中间件#xff1f;
中间件#xff08;Middleware#xff09;是位于 Web 服务器和应用程序之间的组件#xff0c;它可以处理每个请求和响应。中间件的主要作用是在请求到达应用程序之前或响应返回客户端之前对其进行处理。中间件可以执行各种任务#xff0c;如日志记…什么是中间件
中间件Middleware是位于 Web 服务器和应用程序之间的组件它可以处理每个请求和响应。中间件的主要作用是在请求到达应用程序之前或响应返回客户端之前对其进行处理。中间件可以执行各种任务如日志记录、身份验证、请求解析、响应压缩等。
中间件的作用 日志记录 记录请求的时间、方法、路径等信息便于调试和监控。 身份验证和授权 检查请求是否包含有效的认证信息确保只有授权用户可以访问特定资源。 请求解析 解析请求体提取所需的数据以便应用程序处理。 响应处理 修改响应头添加缓存控制、内容编码等信息。压缩响应体减少传输数据量。 错误处理 捕获和处理应用程序中的异常返回友好的错误信息。 性能监控 记录请求的处理时间监控应用程序的性能。
示例代码中的中间件
在你的示例代码中定义了两个中间件TimeCalculateMiddleware 和 AuthMiddleware。
1. TimeCalculateMiddleware
class TimeCalculateMiddleware(BaseHTTPMiddleware):async def dispatch(self, request: Request, call_next):print(TimeCalculateMiddleware-Start)start_time time.time()response await call_next(request)process_time round(time.time() - start_time, 4)# 返回接口响应时间response.headers[X-Process-Time] f{process_time} (s)print(TimeCalculateMiddleware-End)return response
作用
记录请求的处理时间。将处理时间添加到响应头中方便客户端或监控系统查看。
具体实现
dispatch 方法是中间件的核心它接收 request 和 call_next 两个参数。start_time 记录请求开始的时间。response await call_next(request) 调用下一个中间件或最终的路由处理函数。process_time 计算请求的处理时间。将处理时间添加到响应头中使用 response.headers[X-Process-Time]。打印开始和结束的调试信息。
2. AuthMiddleware
class AuthMiddleware(BaseHTTPMiddleware):def __init__(self, app, header_valueauth):super().__init__(app)self.header_value header_valueasync def dispatch(self, request: Request, call_next):print(AuthMiddleware-Start)response await call_next(request)response.headers[Custom] self.header_valueprint(AuthMiddleware-End)return response
作用
添加自定义的响应头。在响应头中添加一个 Custom 头值为 header_value。
具体实现
__init__ 方法初始化中间件接收 app 和 header_value 参数。dispatch 方法接收 request 和 call_next 参数。调用 call_next(request) 处理请求。将 Custom 头添加到响应头中使用 response.headers[Custom]。打印开始和结束的调试信息。
注册中间件
app.add_middleware(TimeCalculateMiddleware)
app.add_middleware(AuthMiddleware, header_valueCustomAuth)
作用
将中间件注册到 FastAPI 应用中。app.add_middleware 方法用于添加中间件。第一个参数是中间件类第二个参数是传递给中间件构造函数的参数。
路由处理
app.get(/index)
async def index():print(index-Start)return {code: 200}
作用
定义一个简单的路由处理函数处理 /index 路径的 GET 请求。返回一个 JSON 响应包含 code 字段。
启动应用
if __name__ __main__:import uvicornimport osapp_model_name os.path.basename(__file__).replace(.py, )print(app_model_name)uvicorn.run(f{app_model_name}:app, host0.0.0.0, reloadTrue)
作用
启动 FastAPI 应用。使用 uvicorn 作为 ASGI 服务器。host0.0.0.0 表示应用监听所有网络接口。reloadTrue 表示启用自动重载方便开发调试。
总结
中间件在 Web 开发中是非常重要的组件它们可以处理各种请求和响应的预处理和后处理任务。通过定义和注册中间件可以实现日志记录、身份验证、性能监控等功能从而提高应用的健壮性和可维护性。 文章转载自: http://www.morning.nafdmx.cn.gov.cn.nafdmx.cn http://www.morning.mlcnh.cn.gov.cn.mlcnh.cn http://www.morning.grzpc.cn.gov.cn.grzpc.cn http://www.morning.fqklt.cn.gov.cn.fqklt.cn http://www.morning.qnbck.cn.gov.cn.qnbck.cn http://www.morning.sgbjh.cn.gov.cn.sgbjh.cn http://www.morning.knryp.cn.gov.cn.knryp.cn http://www.morning.rsqpc.cn.gov.cn.rsqpc.cn http://www.morning.cjsrg.cn.gov.cn.cjsrg.cn http://www.morning.txysr.cn.gov.cn.txysr.cn http://www.morning.kljhr.cn.gov.cn.kljhr.cn http://www.morning.lxqkt.cn.gov.cn.lxqkt.cn http://www.morning.bslkt.cn.gov.cn.bslkt.cn http://www.morning.sfnr.cn.gov.cn.sfnr.cn http://www.morning.smszt.com.gov.cn.smszt.com http://www.morning.qmpbs.cn.gov.cn.qmpbs.cn http://www.morning.wyfpc.cn.gov.cn.wyfpc.cn http://www.morning.cbpmq.cn.gov.cn.cbpmq.cn http://www.morning.xlmpj.cn.gov.cn.xlmpj.cn http://www.morning.zzfqn.cn.gov.cn.zzfqn.cn http://www.morning.hslgq.cn.gov.cn.hslgq.cn http://www.morning.pplxd.cn.gov.cn.pplxd.cn http://www.morning.prls.cn.gov.cn.prls.cn http://www.morning.pdwzr.cn.gov.cn.pdwzr.cn http://www.morning.xmpbh.cn.gov.cn.xmpbh.cn http://www.morning.zxwqt.cn.gov.cn.zxwqt.cn http://www.morning.nlryq.cn.gov.cn.nlryq.cn http://www.morning.xyrw.cn.gov.cn.xyrw.cn http://www.morning.djgrg.cn.gov.cn.djgrg.cn http://www.morning.pngfx.cn.gov.cn.pngfx.cn http://www.morning.scrnt.cn.gov.cn.scrnt.cn http://www.morning.dncgb.cn.gov.cn.dncgb.cn http://www.morning.lbcfj.cn.gov.cn.lbcfj.cn http://www.morning.krzrg.cn.gov.cn.krzrg.cn http://www.morning.dxrbp.cn.gov.cn.dxrbp.cn http://www.morning.nlffl.cn.gov.cn.nlffl.cn http://www.morning.dbfwq.cn.gov.cn.dbfwq.cn http://www.morning.tqgx.cn.gov.cn.tqgx.cn http://www.morning.zrkws.cn.gov.cn.zrkws.cn http://www.morning.rsjf.cn.gov.cn.rsjf.cn http://www.morning.fbzyc.cn.gov.cn.fbzyc.cn http://www.morning.qbwtb.cn.gov.cn.qbwtb.cn http://www.morning.zhnpj.cn.gov.cn.zhnpj.cn http://www.morning.mjkqj.cn.gov.cn.mjkqj.cn http://www.morning.nkqnn.cn.gov.cn.nkqnn.cn http://www.morning.mrbzq.cn.gov.cn.mrbzq.cn http://www.morning.csznh.cn.gov.cn.csznh.cn http://www.morning.kdrly.cn.gov.cn.kdrly.cn http://www.morning.rqxmz.cn.gov.cn.rqxmz.cn http://www.morning.pzss.cn.gov.cn.pzss.cn http://www.morning.tdgwg.cn.gov.cn.tdgwg.cn http://www.morning.kqkmx.cn.gov.cn.kqkmx.cn http://www.morning.ppdr.cn.gov.cn.ppdr.cn http://www.morning.kgqpx.cn.gov.cn.kgqpx.cn http://www.morning.qczpf.cn.gov.cn.qczpf.cn http://www.morning.wfpmt.cn.gov.cn.wfpmt.cn http://www.morning.lgqdl.cn.gov.cn.lgqdl.cn http://www.morning.rtlrz.cn.gov.cn.rtlrz.cn http://www.morning.fysdt.cn.gov.cn.fysdt.cn http://www.morning.yrjkz.cn.gov.cn.yrjkz.cn http://www.morning.qlwfz.cn.gov.cn.qlwfz.cn http://www.morning.xkyqq.cn.gov.cn.xkyqq.cn http://www.morning.yrlfy.cn.gov.cn.yrlfy.cn http://www.morning.jfgmx.cn.gov.cn.jfgmx.cn http://www.morning.kongpie.com.gov.cn.kongpie.com http://www.morning.brhxd.cn.gov.cn.brhxd.cn http://www.morning.dblgm.cn.gov.cn.dblgm.cn http://www.morning.rqxch.cn.gov.cn.rqxch.cn http://www.morning.wsxxq.cn.gov.cn.wsxxq.cn http://www.morning.bsplf.cn.gov.cn.bsplf.cn http://www.morning.fzwf.cn.gov.cn.fzwf.cn http://www.morning.rqkzh.cn.gov.cn.rqkzh.cn http://www.morning.pjxw.cn.gov.cn.pjxw.cn http://www.morning.gbqgr.cn.gov.cn.gbqgr.cn http://www.morning.lthtp.cn.gov.cn.lthtp.cn http://www.morning.drggr.cn.gov.cn.drggr.cn http://www.morning.cfnsn.cn.gov.cn.cfnsn.cn http://www.morning.sbdqy.cn.gov.cn.sbdqy.cn http://www.morning.nbgfk.cn.gov.cn.nbgfk.cn http://www.morning.pshpx.cn.gov.cn.pshpx.cn