尧图网站建设 尧图网络
  • 首页
  • 关于我们
  • 服务项目
  • 案例展示
  • 建站流程
  • 资讯中心
  • 联系我们
首页/资讯中心/详情

fastapi: 多个子应用时判断全局异常的处理形式

fastapi: 多个子应用时判断全局异常的处理形式
📅 发布时间:2026/7/23 18:56:14

一,代码

场景:

fastapi项目下面有两个子应用,一个是api: 接口站,另一个是admin:管理后台,
api接口站,处理异常后返回json,
admin.管理后台,有传统的页面请求也有ajax方式访问,
要求非ajax时,返回到一个错误信息页面,
ajax访问时,当然是返回json

代码:

# 返回异常信息,根据子应用和是否ajax分别进行处理,管理后非ajax请求,跳到错误页面
def response_exception(request: Request,err_data):path = request.url.path# --- 状况 A:如果是 API 子应用的请求,一律返回 JSON ---if path.startswith("/api"):return JSONResponse(status_code=err_data['status_code'],content={"data": {}, "msg": err_data['detail'], "code": err_data['status_code']})# --- 状况 B:如果是 Admin 子应用的请求,需要分情况讨论 ---elif path.startswith("/admin"):accept_header = request.headers.get("accept", "")requested_with = request.headers.get("x-requested-with", "")# 判断是否为 Ajax 请求:# 1. 检查 X-Requested-With 是否为 XMLHttpRequest (传统 Ajax)# 2. 或者检查 Accept 头是否更倾向于接收 JSON (现代 fetch/axios 请求)is_ajax = (requested_with.lower() == "xmlhttprequest" or("application/json" in accept_header and "text/html" not in accept_header))if is_ajax:# 管理后台的 Ajax 请求出错 -> 返回 JSON 方便前端弹窗提示(如 ElementUI/AntDesign)return JSONResponse(status_code=err_data['status_code'],content={"data": {}, "msg": err_data['detail'], "code": err_data['status_code']})else:# 传统的浏览器地址栏直接访问或表单提交出错 -> 渲染精美的错误 HTML 页面# 传入 request 和 错误信息 供模板渲染return templates.TemplateResponse(name="error/error.html",context={"request": request, "status_code": err_data['status_code'], "detail": err_data['detail']},status_code=err_data['status_code'],request=request,)

error.html:

<!DOCTYPE html>
<html lang="zh-CN">
<head><meta charset="UTF-8"><title>出错了 - {{ status_code }}</title>
</head>
<body><div style="text-align: center; margin-top: 100px;"><h1>抱歉,系统响应异常 ({{ status_code }})</h1><p style="color: red;">错误原因:{{ detail }}</p><a href="/admin/dashboard">返回管理后台首页</a></div>
</body>
</html>

 

 

二,测试效果 :

页面

image

json

image

相关新闻

  • 丹摩平台 | 如何在丹摩平台创建一个自己的GPU云实例
  • 【Rust自学】11.4. 用should_panic检查恐慌
  • 基于ddddocr与Hu矩的验证码识别技术实践

最新新闻

  • 强强联合,共拓数字化新蓝海|河南花仙子网络与金正集团(经营帮)达成战略合作
  • GEE中的几个小技巧
  • 算法第一题:两数之和(第一次接触)
  • Spring Boot Profile 多环境切换实战 —— 以 springboot-properties 为例(含踩坑)
  • 零基础小白如何去SRC平台挖漏洞赚钱?全网最全最强的干货教程一定要收藏!
  • 深入解析Tiva TM4C129X时钟与电源管理:从PLL、LDO到低功耗唤醒实战

日新闻

  • 亨得利盐城维修点在哪里?手表维修保养地址指南**公示(2026年7月最新) - 亨得利官方
  • 提升.NET API安全性:Boxed.AspNetCore.Swagger认证授权最佳实践
  • 帝舵佛山**网点地址更新:2026年7月售后热线电话与服务客户指南 - 帝舵中国官方服务中心

周新闻

  • SaaS软件行业GEO实践:AI搜索时代的品牌可见性与获客新路径
  • 什么是PCTFE?医药高端包装的“防潮王牌“材料
  • 【JVM调优实战】16-可视化利器-JConsole-VisualVM-JMC

月新闻

  • 2026年6月公司网站搭建最新热门渠道测评:四大低成本/零代码平台对比+避坑
  • 【Linux】Linux arm 编译QT程序,出现expected “}“报错
  • 【MATLAB例程】四基站二维AOA定位与距离辅助增强对比仿真。基于角度观测和测距修正的固定目标平面定位精度分析

关于尧图

  • 公司简介
  • 团队介绍
  • 企业文化
  • 荣誉资质

服务项目

  • 定制开发
  • 电商建站
  • UI 设计
  • 运维服务

快速链接

  • 案例展示
  • 建站流程
  • 常见问题
  • 资讯中心

联系方式

  • 📍北京市朝阳区互联网产业园 A 座 10 层
  • 📞400-888-8888
  • ✉️contact@rkmt.cn
  • 🕐周一至周日 9:00-21:00

© 2024 北京尧图网络科技有限公司 版权所有 | 京 ICP 备 XXXXXXXX 号