当前位置: 首页 > 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>

http://www.mrgr.cn/news/30721.html

相关文章:

  • 基于SpringBoot的图书进销存管理系统【附源码】
  • AutoGen Function Call 函数调用解析(二)
  • 数据库面试题整理
  • Ubuntu安装MySQL过程中没有出现设置root和密码的步骤导致无法root登入解决办法
  • <<编码>> 第 14 章 反馈与触发器(7)--分频器与计数器 示例电路
  • 上海AI气象大模型提前6天预测“贝碧嘉”台风登陆浦东 今年已多次精准预测
  • 工作烦恼与吐槽
  • 吴泳铭:AI最大的想象力不在手机屏幕,而是改变物理世界
  • Ubuntu初期配置常见问题汇总
  • 华为OD机试 - 构成指定长度字符串的个数(Python/JS/C/C++ 2024 E卷 100分)
  • WEB攻防-JS项目Node.js框架安全识别审计验证绕过
  • 修改Docker默认存储路径,解决系统盘占用90%+问题(修改docker root dir)
  • EmguCV学习笔记 VB.Net 12.3 OCR
  • C++--C++11
  • 单细胞BisqueRNA和BayesPrism去卷积分析工具简单比较
  • ffmpeg面向对象——参数配置秘密探索及其设计模式
  • 【编程底层原理】mysql的redo log undo log bin log日志的作用,以及何时生成,涉及到哪些参数变量
  • 详解JESD204B子类一的确定性延时(JESD20B三)
  • 无会员的办公技巧——office
  • 必知的PDF转换软件:看2024大学生如何选择