用装饰器实现flask异常处理

作者: AI小太阳 | 来源:发表于2018-12-27 10:47 被阅读4次

前言

刚好最近了解了python装饰器,就在工作中用实践了一把,避免写很多重复的代码,在有多个路由的情况下效果显而易见。本文纯属一个学渣的探索历程,请以此小例子为参考,在工作中尽情发挥,可能flask本身有别的更好的实现,但是本人flask小白,如有更好的实现方法还请批评指正。python装饰器基础及多装饰器的运行顺序解析可参考https://www.jianshu.com/p/4043735e839e

实例代码

# coding: utf-8
import numpy as np
import os
import time
import datetime
from flask import Flask, request, jsonify, Response, abort
import json
import uuid
from functools import wraps
app = Flask(__name__)
app.config['JSON_AS_ASCII'] = False
#异常处理装饰函数
def decorator(fun):
    @wraps(fun)
    def wrapper(*args, **kwargs):
        try:
            try_result = fun(*args, **kwargs)
            return try_result
        except KeyError as e:
            error_warning = {'error_warning': 'A key error has occurred. Please check if the keys of the uploaded json are correct.'}
            return jsonify(error_warning)
        except TypeError as e:
            error_warning = {'error_warning': 'A type error has occurred. Please check if the uploaded json data type is correct.'}
            return jsonify(error_warning)
        except Exception as e:
            error_warning = {'error_warning':repr(e)}
            return jsonify(error_warning)
    return wrapper
#定义路由
@app.route('/assign', methods=['GET', 'POST'])
@decorator
def assignment():
    data = {'flags': 'haha', 'corpus': 'hello'}
    setsd = {}
    setsd['label'] = data['flag']
    results = setsd
    return jsonify(results)
@app.route('/', methods=['GET', 'POST'])
@decorator
def sayhi():
      return 'hellow world'
  
# 捕获404错误       
@app.errorhandler(404)
def errors(error): 
    return jsonify(repr(error))
    
@decorator
def run_app():
    app.run(debug=True, host = *****, port = 5000)
    return 'web服务启动了'

if __name__ == '__main__':
    service = run_app()
    print (service)

总结:

这样实现避免在每个路由下面都写一个try...except的代码块,代码的复用还是挺重要的,请大家都要坚持少写重复代码。此外flask中的用户登录验证、表单验证等都可用装饰器实现。表单验证逻辑可参考此篇文章https://www.jianshu.com/p/2aabc4b3db4c谢谢!

相关文章

  • 用装饰器实现flask异常处理

    前言 刚好最近了解了python装饰器,就在工作中用实践了一把,避免写很多重复的代码,在有多个路由的情况下效果显而...

  • 2018-08-14

    用装饰器实现n次错误后抛出一个异常

  • Flask请求钩子

    请求钩子是通过装饰器的形式实现,Flask支持如下四中请求钩子: before_first_request:在处理...

  • python 装饰器

    遇到的问题点 flask项目里面的装饰器处理权限验证 java里面好像也是靠装饰器来处理该问题def permis...

  • Flask之自定义错误处理的方法

      通过errorhandler装饰器,自定义异常处理

  • Flask异常处理使用记录

    Flask异常处理使用记录 初识Flask异常处理,是使用@app.teardown_request钩子函数错处理...

  • Python ☞ day 5

    Python学习笔记之 装饰器& 偏函数 & 异常处理 & 断言 & 文件读写 &编码与解码 装饰器 概念:是一个...

  • 异常处理器

    springmvc在处理请求过程中出现异常信息交由异常处理器进行处理,自定义异常处理器可以实现一个系统的异常处理逻...

  • SpringMVC异常处理器

    SpringMVC在处理请求过程中出现异常信息交由异常处理器进行处理,自定义异常处理器可以实现一个系统的异常处理逻...

  • Flask路由原理分析

    本文大致梳理一下Flask框架在处理url路由时的主要过程。 类图 route装饰器 在Flask应用中,我们一般...

网友评论

    本文标题:用装饰器实现flask异常处理

    本文链接:https://www.haomeiwen.com/subject/dyallqtx.html