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

Flask 学习-35.restful-full 自定义错误内容 error_msg 使用

前言

当接口请求参数不合法的,可以给前端返回报错原因,给个友好的返回消息,在add_argument() 中可以通过help 参数来定义

错误信息

每个字段的错误消息可以使用 help 参数(RequestParser.add_argument)进行自定义。
如果未提供help 参数,则该字段的错误消息将是类型错误本身的字符串表示形式。如果help提供,则错误消息将是 的值help。

class Register(Resource):

    @staticmethod
    def password_validate(value, name):
        if len(value) < 6 or len(value) > 16:
            raise ValueError(name + ' length must be 6-16')
        return value

    def post(self):
        # 校验入参
        parser = reqparse.RequestParser()
        parser.add_argument('username', required=True, type=str,  nullable=False)
        parser.add_argument('password', required=True, type=self.password_validate,
                            nullable=False, help='password invalid')
        args = parser.parse_args()
        print(f'请求入参:{args}')

在上面示例中username 参数没有给help 参数,password 参数给了help
如果不传username 参数,返回内容是错误本身的字符串表示形式

HTTP/1.1 400 BAD REQUEST
Server: Werkzeug/2.2.2 Python/3.8.5
Date: Thu, 01 Sep 2022 14:31:28 GMT
Content-Type: application/json
Content-Length: 130
Connection: close

{
    "message": {
        "username": "Missing required parameter in the JSON body or the post body or the query string"
    }
}

如果不传password 参数,返回内容就是给的help 值

HTTP/1.1 400 BAD REQUEST
Server: Werkzeug/2.2.2 Python/3.8.5
Date: Thu, 01 Sep 2022 14:33:53 GMT
Content-Type: application/json
Content-Length: 66
Connection: close

{
    "message": {
        "password": "password invalid"
    }
}

error_msg 变量使用

前面使用help 的时候是一个写死的值,当密码少于6位或大于16位的时候,也是返回password invalid,这样就比较抽象。
help可能包含一个插值标记 ,{error_msg}它将被替换为类型错误的字符串表示形式。这允许在保留原始错误的同时自定义消息

parser.add_argument('password', required=True, type=self.password_validate,
                            nullable=False, help='password invalid: {error_msg}')

当password 参数小于6位时返回

HTTP/1.1 400 BAD REQUEST
Server: Werkzeug/2.2.2 Python/3.8.5
Date: Thu, 01 Sep 2022 14:39:11 GMT
Content-Type: application/json
Content-Length: 87
Connection: close

{
    "message": {
        "password": "invalid: password length must be 6-16"
    }
}

bundle_errors 错误处理

RequestParser 处理错误的默认方式是在发生第一个错误时中止。当您有可能需要一些时间来处理的论点时,这可能会很有用。但是,通常最好将错误捆绑在一起并一次性发送回客户端。
可以在 Flask 应用程序级别或特定的 RequestParser 实例上指定此行为。要使用捆绑错误选项调用 RequestParser,请传入参数bundle_errors。例如

from flask_restful import reqparse

parser = reqparse.RequestParser(bundle_errors=True)
parser.add_argument('foo', type=int, required=True)
parser.add_argument('bar', type=int, required=True)

# If a request comes in not containing both 'foo' and 'bar', the error that
# will come back will look something like this.

{
    "message":  {
        "foo": "foo error message",
        "bar": "bar error message"
    }
}

# The default behavior would only return the first error

parser = RequestParser()
parser.add_argument('foo', type=int, required=True)
parser.add_argument('bar', type=int, required=True)

{
    "message":  {
        "foo": "foo error message"
    }
}

BUNDLE_ERRORS 可以作为全局配置参数,例如

from flask import Flask

app = Flask(__name__)
app.config['BUNDLE_ERRORS'] = True

警告:
BUNDLE_ERRORS是覆盖bundle_errors 单个RequestParser实例中的选项的全局设置。

相关文章:

  • Linux连接文件与vim编译器的使用
  • oracle 删除语句(时间范围)
  • CMS垃圾收集器与三色标记算法详解
  • 2022速卖通重点运营策略,商品合规划经营必知
  • 【WSN通信】基于最佳簇半径的无线传感器网络分簇路由算法附matlab代码
  • 最新 MySQL 面试笔记解析直接爆砍 39K 月薪,拿走不谢
  • Jenkins实战中的一些技巧
  • webpack定制化 加载与插件[css加载器、html插件、image打包配置、babel代码兼容、vue加载器及配置]
  • 线程与进程的关联
  • Linux环境下fastdfs部署
  • 解锁新技能《Redis SETBIT用法》
  • STL应用 —— queue(队列)
  • 【计算机网络】OSI七层网络参考模型
  • 第二十章 控制进程(一)
  • 移动Web第四天 1 移动适配
  • 2018以太坊智能合约编程语言solidity的最佳IDEs
  • create-react-app做的留言板
  • JavaScript的使用你知道几种?(上)
  • JS创建对象模式及其对象原型链探究(一):Object模式
  • Python实现BT种子转化为磁力链接【实战】
  • spring cloud gateway 源码解析(4)跨域问题处理
  • Vue2 SSR 的优化之旅
  • 百度小程序遇到的问题
  • 从PHP迁移至Golang - 基础篇
  • 全栈开发——Linux
  • 深度学习中的信息论知识详解
  • 小试R空间处理新库sf
  • 译米田引理
  • 资深实践篇 | 基于Kubernetes 1.61的Kubernetes Scheduler 调度详解 ...
  • ​Base64转换成图片,android studio build乱码,找不到okio.ByteString接腾讯人脸识别
  • ​低代码平台的核心价值与优势
  • ​用户画像从0到100的构建思路
  • #stm32驱动外设模块总结w5500模块
  • $jQuery 重写Alert样式方法
  • (LeetCode) T14. Longest Common Prefix
  • (LNMP) How To Install Linux, nginx, MySQL, PHP
  • (笔试题)合法字符串
  • (学习日记)2024.01.09
  • (原创) cocos2dx使用Curl连接网络(客户端)
  • (转) RFS+AutoItLibrary测试web对话框
  • (转)Sql Server 保留几位小数的两种做法
  • .NET “底层”异步编程模式——异步编程模型(Asynchronous Programming Model,APM)...
  • .NET Core WebAPI中封装Swagger配置
  • .NET Core/Framework 创建委托以大幅度提高反射调用的性能
  • .NET 应用启用与禁用自动生成绑定重定向 (bindingRedirect),解决不同版本 dll 的依赖问题
  • .NET国产化改造探索(一)、VMware安装银河麒麟
  • @TableLogic注解说明,以及对增删改查的影响
  • [ 常用工具篇 ] AntSword 蚁剑安装及使用详解
  • [1525]字符统计2 (哈希)SDUT
  • [20140403]查询是否产生日志
  • [20170713] 无法访问SQL Server
  • [BUAA软工]第一次博客作业---阅读《构建之法》
  • [BUG]vscode插件live server无法自动打开浏览器
  • [BZOJ 2142]礼物(扩展Lucas定理)
  • [codeforces]Levko and Permutation