【Flask】abort和errorhandler、app_errorhandler进行请求中断及自定义异常处理
2023-09-27 14:20:10 时间
在view函数中,如果需要中断request,可以使用abort(500)或者直接raise exception。当然我们还需要返回一个出错信息给前端,所以需要定制一下ErrorHandler。一般只需要两个个handler即可,一个是404错误,一个是500一类的服务器端错误。当然也可以自定义错误。
abort中断请求
# 在flask中可以通过abort中断触发请求对应的状态码 from flask import abort @app.route('/') def index(): abort(401) # 请求到此即中断,不会打印下面的语句,并返回HTTP状态码401 print '123'
errorhandler捕捉当前app或蓝图的状态码,并进行自定制处理
下面是一份示例代码,admin是一个蓝本或者app,发生404错误或500错误,会返回一个Json对象给请求段。
from flask import jsonify from . import admin @admin.errorhandler(404) def error_404(error): """这个handler可以catch住所有abort(404)以及找不到对应router的处理请求""" response = dict(status=0, message="404 Not Found") return jsonify(response), 404 @admin.errorhandler(Exception) def error_500(error): """这个handler可以catch住所有的abort(500)和raise exeception.""" response = dict(status=0, message="500 Error") return jsonify(response), 400 class MyError(Exception): """自定义错误类""" pass @admin.errorhandler(MyError) def MyErrorHandle(error): response = dict(status=0, message="400 Error") return jsonify(response), 400
app_errorhandler捕捉全局状态码,并进行自定制异常处理
在蓝本中编写错误处理程序有点不同,如果使用errorhandler
修饰器,那么只有蓝本中的错误才会触发。如果想注册全局的错误处理程序,要用app_errorhandler
。
例如:
from . import auth @auth.app_errorhandler(404) def error_404(error): response = dict(status=0, message="404 Not Found") return jsonify(response), 404
补充说明
当我们不是使用的工厂模式创建app时,app.errorhandler(401),即可捕捉全局401状态;若使用了create_app方式创建app,则无法进行捕捉,若想捕捉,可以在蓝图中写,如admin.errorhandler(401),即捕捉admin蓝图下所有401状态码,admin.app_errorhandler(401),则是捕捉的全局的401状态码,即其他蓝图中的401状态,也会被捕捉,进行处理
相关文章
- App.config 中读写appSettings、system.serviceModel终结点,以及自定义配置节
- asp.net website 单独编译某个页面,连带编译app_code
- 干货|app自动化测试之Appium 源码分析
- PHP 开发 APP 接口学习笔记与总结 - [ Linux ] 定时任务
- 《Axure RP7网站和APP原型制作从入门到精通(60小时案例版)》一2.2 使用母版
- 《Axure RP8 网站和APP原型制作 从入门到精通》一2.7 交付
- 《精通移动App测试实战:技术、工具和案例》一第1章 Android系统基础内容介绍1.1 Android系统介绍
- Swift - 网络请求报App Transport Security has blocked a cleartext错
- 解决来自 App Store 的“ITMS-90562: Invalid Bundle”电子邮件
- SwiftUI 创业之缺乏写App的创意该怎么办
- uni-app中使用computed解决了tab切换中data()值显示的异常
- uni-app 在组件中触底分页的方法
- Android通过浏览器打开app页面并且传递值
- uni-app入门学习
- [Phonegap+Sencha Touch] 移动开发77 Cordova Hot Code Push插件实现自己主动更新App的Web内容
- uni-app 微信小程序中如何通过 canvas 画布实现电子签名?