Flask 第十二课 -- 错误处理

server/2024/11/15 0:55:58/

目录

一. 前言

二. 处理 HTTP 错误

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

四. 处理自定义错误

五. 全局错误处理

六. 使用 abort 函数

七. 渲染自定义错误页面


一. 前言

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

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

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

二. 处理 HTTP 错误

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

app.py 文件代码:

python">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 文件代码:

python">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 文件代码:

python">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)

四. 处理自定义错误

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

自定义异常类:

python">class CustomError(Exception):pass

抛出自定义异常:

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

处理自定义异常:

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

五. 全局错误处理

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

app.py 文件代码:

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

六. 使用 abort 函数

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

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

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

七. 渲染自定义错误页面

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

项目结构示例:

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

自定义错误页面示例:

templates/404.html 文件代码:

python"><!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>

http://www.ppmy.cn/server/119340.html

相关文章

【Linux:共享内存】

共享内存的概念&#xff1a; 操作系统通过页表将共享内存的起始虚拟地址映射到当前进程的地址空间中共享内存是由需要通信的双方进程之一来创建但该资源并不属于创建它的进程&#xff0c;而属于操作系统 共享内存可以在系统中存在多份&#xff0c;供不同个数&#xff0c;不同进…

傅里叶变换的基本性质和有关定理

一、傅里叶变换的基本性质 1.1 线性性质 若 则 其中:a,b是常数 函数线性组合的傅里叶变换等于歌函数傅里叶变换的相应组合。 1.2 对称性 若 则 关于傅里叶变换的对称性还有 虚、实、奇、偶函数的傅里叶变换性质: 1.3 迭次傅里叶变换 对f(x,y)连续两次做二维傅里叶变换…

如何上传tauri项目到csdn gitcode

如何上传tauri项目到csdn gitcode 首先保证项目目录有.gitignore&#xff0c;避免不必要的文件上传分享。 gitignore文件 # Logs logs *.log npm-debug.log* yarn-debug.log* yarn-error.log* pnpm-debug.log* lerna-debug.log*node_modules dist dist-ssr *.local# Editor …

在OpenWrt上安装USB-Wifi驱动(Realtek 802.11n)

在OpenWrt上安装Realtek 802.11n驱动 1. 引言 OpenWrt是一个基于Linux的路由器操作系统&#xff0c;它允许用户自定义和优化路由器的功能。Realtek 802.11n驱动是为支持Realtek无线芯片组的设备设计的&#xff0c;这些芯片组通常用于许多路由器和USB无线适配器中。在OpenWrt上…

记录一题----计算机网络传输层

线路&#xff1a;TCP报文下放到物理层传输。 TCP报文段中&#xff0c;“序号”长度为32bit&#xff0c;为了让序列号不会循环&#xff0c;则最多能传输2^32B的数据&#xff0c;则最多能传输&#xff1a;2^32/1500B个报文 结果&#xff1a; 吞吐率一个周期内传输的数据/周期时间…

[Unity Demo]从零开始制作空洞骑士Hollow Knight第五集:再制作更多的敌人

提示&#xff1a;文章写完后&#xff0c;目录可以自动生成&#xff0c;如何生成可参考右边的帮助文档 文章目录 前言一、制作敌人另个爬虫Crawler 1.公式化导入制作另个爬虫Crawler素材2.制作另个爬虫Crawler的Crawler.cs状态机3.制作敌人另个爬虫Crawler的playmaker状态机二、…

测试ASP.NET Core的WebApi项目调用WebService

虚拟机中部署的匿名访问的WebService&#xff0c;支持简单的加减乘除操作。本文记录在WebApi中调用该WebService的方式。   VS2022创建WebApi项目&#xff0c;然后在解决方案资源管理器的Connected Services节点点右键&#xff0c;选择管理连接的服务菜单。 点击下图圈红处…

平安养老险阜阳中心支公司开展金融教育宣传专项活动

为全面深入开展“金融教育宣传月”的各项工作&#xff0c;不断完善金融惠民利民举措&#xff0c;提升金融服务质效&#xff0c;帮助基层群众增强维权意识、防非反诈的自我保护能力。近日&#xff0c;平安养老保险股份有限公司&#xff08;以下“平安养老险”&#xff09;阜阳中…