当前位置: 首页 > news >正文

Flask 第十二课 -- 错误处理

目录

一. 前言

二. 处理 HTTP 错误

三. 使用蓝图中的错误处理

四. 处理自定义错误

五. 全局错误处理

六. 使用 abort 函数

七. 渲染自定义错误页面


一. 前言

Flask 提供了灵活的错误处理机制,可以捕获并处理应用中的各种错误。

以下是详细的说明,涵盖了如何定义和处理错误,如何处理 HTTP 状态码以及如何处理自定义错误。

  1. 处理 HTTP 错误:使用 @app.errorhandler 装饰器定义针对特定 HTTP 状态码的错误处理函数。
  2. 蓝图中的错误处理:在蓝图中定义错误处理函数,允许模块化的错误处理。
  3. 自定义错误:定义自定义异常类,并在应用中捕获和处理这些异常。
  4. 全局错误处理:使用全局错误处理函数捕获所有未处理的异常。
  5. 使用 abort 函数:在视图函数中主动触发 HTTP 错误。
  6. 渲染自定义错误页面:为每个错误码创建自定义的 HTML 错误页面。

二. 处理 HTTP 错误

Flask 允许你定义针对特定 HTTP 状态码的错误处理函数。这些处理函数可以用于捕获并处理应用中的常见错误,如 404 页面未找到错误、500 服务器内部错误等。

app.py 文件代码:

from flask import Flask, render_templateapp = Flask(__name__)@app.route('/')
def index():return 'Welcome to the homepage!'@app.errorhandler(404)
def page_not_found(error):return render_template('404.html'), 404@app.errorhandler(500)
def internal_server_error(error):return render_template('500.html'), 500if __name__ == '__main__':app.run(debug=True)

@app.errorhandler(404):捕获 404 错误,并返回自定义的 404 错误页面。

@app.errorhandler(500):捕获 500 错误,并返回自定义的 500 错误页面。

三. 使用蓝图中的错误处理

蓝图(Blueprints)也可以定义自己的错误处理函数。这使得每个模块可以有自己的错误处理逻辑。

auth/routes.py 文件代码:

from flask import Blueprint, render_templateauth = Blueprint('auth', __name__)@auth.errorhandler(404)
def auth_not_found(error):return render_template('auth_404.html'), 404

app.py 文件代码:

from flask import Flask
from auth.routes import authapp = Flask(__name__)
app.register_blueprint(auth, url_prefix='/auth')if __name__ == '__main__':app.run(debug=True)

四. 处理自定义错误

你可以定义自定义异常类,并在应用中捕获和处理这些异常。这允许你在应用中实现更复杂的错误处理逻辑。

自定义异常类:

class CustomError(Exception):pass

抛出自定义异常:

@app.route('/raise_custom_error')
def raise_custom_error():raise CustomError("This is a custom error.")

处理自定义异常:

@app.errorhandler(CustomError)
def handle_custom_error(error):return str(error), 400

五. 全局错误处理

如果你希望在整个应用中处理所有未处理的异常,可以使用全局错误处理函数。这些处理函数可以捕获所有未被显式捕获的错误。

app.py 文件代码:

@app.errorhandler(Exception)
def handle_exception(error):# 处理所有异常return f'An error occurred: {error}', 500

六. 使用 abort 函数

Flask 提供了一个 abort 函数,用于在视图函数中主动触发 HTTP 错误。这可以用于在特定条件下返回错误响应。

from flask import abort@app.route('/abort_example')
def abort_example():abort(403)  # 返回 403 Forbidden 错误

abort(403):触发 403 错误,自动调用对应的错误处理函数。

七. 渲染自定义错误页面

可以为每个错误码创建自定义的 HTML 页面,使得错误页面与应用的整体设计一致。

项目结构示例:

yourapp/
│
├── app.py
├── templates/
│   ├── 404.html
│   ├── 500.html
│   └── auth_404.html

自定义错误页面示例:

templates/404.html 文件代码:

<!doctype html>
<html lang="en">
<head><meta charset="utf-8"><title>Page Not Found</title>
</head>
<body><h1>404 - Page Not Found</h1><p>Sorry, the page you are looking for does not exist.</p>
</body>
</html>

相关文章:

  • 北京网站建设多少钱?
  • 辽宁网页制作哪家好_网站建设
  • 高端品牌网站建设_汉中网站制作
  • 末端回路漏电监测仪为何不可或缺?
  • Qt窗口——QDockWidget
  • git reflog
  • 【Linux】yum、vim、gcc使用(超详细)
  • Go语言grequests库并发请求的实战案例
  • 基于SSM的宿舍管理系统的设计与实现 (含源码+sql+视频导入教程+文档+PPT)
  • 【Unity】对象池 - 未更新完
  • Zabbix 部署----安装 Zabbix(监控服务器)
  • 分布式事务seata
  • Flutter 安装,配置,运行第一个app 1
  • C++对C的扩充
  • 【Qt】Qml界面中嵌入C++ Widget窗口
  • 【HarmonyOS NEXT】DevEco快速实现真机截屏,并保存到电脑
  • SMS over IP原理
  • Java设计原则
  • ➹使用webpack配置多页面应用(MPA)
  • 4. 路由到控制器 - Laravel从零开始教程
  • Github访问慢解决办法
  • HomeBrew常规使用教程
  • IDEA常用插件整理
  • JS+CSS实现数字滚动
  • js正则,这点儿就够用了
  • Laravel Mix运行时关于es2015报错解决方案
  • PAT A1120
  • Sass Day-01
  • SQLServer之索引简介
  • vue-loader 源码解析系列之 selector
  • 动手做个聊天室,前端工程师百无聊赖的人生
  • 记录:CentOS7.2配置LNMP环境记录
  • 看图轻松理解数据结构与算法系列(基于数组的栈)
  • 理解在java “”i=i++;”所发生的事情
  • 普通函数和构造函数的区别
  • 前端知识点整理(待续)
  • 日剧·日综资源集合(建议收藏)
  • 深入浏览器事件循环的本质
  • 使用API自动生成工具优化前端工作流
  • 以太坊客户端Geth命令参数详解
  • 蚂蚁金服CTO程立:真正的技术革命才刚刚开始
  • # 计算机视觉入门
  • #Linux(权限管理)
  • (09)Hive——CTE 公共表达式
  • (2)STM32单片机上位机
  • (Python) SOAP Web Service (HTTP POST)
  • (编译到47%失败)to be deleted
  • (二十六)Java 数据结构
  • (回溯) LeetCode 131. 分割回文串
  • (教学思路 C#之类三)方法参数类型(ref、out、parmas)
  • (六)库存超卖案例实战——使用mysql分布式锁解决“超卖”问题
  • (转)Groupon前传:从10个月的失败作品修改,1个月找到成功
  • (转载)虚幻引擎3--【UnrealScript教程】章节一:20.location和rotation
  • .bat批处理(六):替换字符串中匹配的子串
  • .bat文件调用java类的main方法
  • .env.development、.env.production、.env.staging
  • .net core 连接数据库,通过数据库生成Modell
  • .NET Core 实现 Redis 批量查询指定格式的Key