摘要:是我们自定义的错误码为启动文件当我们运行的时候,程序便启动了起来。在中修改只要为,报参数错误正常返回消息把中的方法改为我们自己定义的方法现在再次运行浏览器输入即可得到输入检测一下正常输出完美
flask-restful 是一款比较好用的 flask 插件,它不仅自动为我们实现了数据的 json 化,还能对传入参数进行验证,优雅的替代了 form 表单。
代码结构:
app |_api | |_ __init__.py | |_ parser.py | |_ view.py | |_ __init__.py |_ code.py |_ util.py app.py
具体代码如下:
parser.py from flask_restful.reqparse import RequestParser parser = RequestParser() parser.add_argument("id", type=int, location="args", required=True) # get 请求为args, post请求为json
在 view 中的使用
view.py
from flask_restful import Resource from app.util import make_result from .parser import parser class Test(Resource): def get(self): req = parser.parse_args(strict=True) id = req.get("id") return make_result(data={"id": id})
还有 __init__.py 文件设置路由
__init__.py
from .view import Test from flask_restful import Api from flask import Blueprint api = Blueprint("api", __name__) # 设置蓝图 resource = Api(api) resource.add_resource(Test, "/") # 设置路由
util.py 为一个设置文件, 用来放我们自己定义的输出规范。
util.py
from flask import jsonify from app.code import Code def make_result(data=None, code=Code.SUCCESS): return jsonify({"code": code, "data": data, "msg": Code.msg[code]})
code.py 是我们自定义的错误码
code.py
class Code: SUCCESS = 1200 NO_PARAM = 1300 msg = { SUCCESS: "success", NO_PARAM: "no param" }
app.py 为启动文件
app.py from flask import Flask from app.api import api app = Flask(__name__) app.register_blueprint(api) if __name__ == "__main__": app.run(debug=True)
当我们运行 python app.py 的时候,程序便启动了起来。
我们在浏览器中输入:localhost:5000/?id=123
即可看到:
{ "code": 1200, "data":{ "id": 123 }, "msg": "success" }
那当我们输入: localhost:5000/?id=api
得到了:
{ "message":{ "id": "invalid literal for int() with base 10: "api"" } }
很明显,我们期望得到一个 int 型的 id,这里给了一个 str 类型的字符串,于是得到了 status_code 为 40 0的 response。
我们肯定是希望以我们自己的定义消息来输出,即:
{ "code": 1300, "data": null, "msg": "no param" }
flask-restful 并没有提供相应的 api,经过查看源码,发现 flask-restful abort 的代码是改写的 flask 的 abort 代码,于是我们也改写 flask-restful 的 abort 代码。
flask abort 源码:
def abort(status, *args, **kwargs): return _aborter(status, *args, **kwargs)
非常简单。
flask-restful 的 abort 源码:
def abort(http_status_code, **kwargs): try: original_flask_abort(http_status_code) except HTTPException as e: if len(kwargs): e.data = kwargs raise
也是非常的简单,这里的 original_flask_abort 即 flask 的 abort。
那现在改代码就很容易了,只要 http_status_code == 400,那么就是我们的参数没有接受正确,需要爆出格式化以后的错误。
在 app.py 中修改:
app.py
from flask import Flask, abort import flask_restful from app.api import api from app.util import make_result from app.code import Code app = Flask(__name__) app.register_blueprint(api) def custom_abord(http_status_code, *args, **kwargs): # 只要http_status_code 为400, 报参数错误 if http_status_code == 400: abort(make_result(code=Code.NO_PARAM)) # 正常返回消息 return abort(http_status_code) # 把flask_restful中的abort方法改为我们自己定义的方法 flask_restful.abort = custom_abord if __name__ == "__main__": app.run(debug=True)
现在再次运行 python app.py
浏览器输入:http://localhost:5000/?id=api
即可得到:
{ "code": 1300, "data": null, "msg": "no param" }
输入:http://localhost:5000/?id=111 检测一下正常输出:
{ "code": 1200, "data":{ "id": 111 }, "msg": "success" }
完美!
文章版权归作者所有,未经允许请勿转载,若此文章存在违规行为,您可以联系管理员删除。
转载请注明本文地址:https://www.ucloud.cn/yun/44530.html
摘要:励以最少的安装方式进行最佳实践。上面的例子接收了一个对象并准备将其序列化。装饰器会通过进行转换。从对象中提取的唯一字段是。是一个特殊的字段,它接受端点名称并为响应中的端点生成一个。可以查看项查看完整列表。 大纲 简介 安装 快速入门 一个最小的 api 例子 资源丰富的路由 端点 参数解析 数据格式化 完整 TODO 应用例子 简介 Flask-RESTful是一个Flas...
摘要:错误抛出及自定义处理定义中的错误抛出及自定义处理指的是允许我们自定义抛出错误并且捕捉错误并进行处理。例如我们编写一个的函数,而参数必须是一个整数否则触发错误运行结果如下捕捉错误异常摘自官方文档 PHP 错误抛出及自定义处理 定义 php中的错误抛出及自定义处理指的是允许我们自定义抛出错误并且捕捉错误并进行处理。类似于 面向对象语言中的throw 及 try...catch... 在ph...
摘要:注原文作者,原文地址为在这个教程中,我们将使用和构建一个博客。在开发期间,这将允许我们把它们运行在不同的端口例如和。现在我们将进入目录并使用运行这个脚本。示例创建一篇文章为了创建一篇文章,你需要发送一个请求给。 注:原文作者 John Kevin M. Basco,原文地址为 Building a blog using Flask and AngularJS Part 1 在...
阅读 1825·2023-04-26 01:58
阅读 1963·2019-08-30 11:26
阅读 2697·2019-08-29 12:51
阅读 3471·2019-08-29 11:11
阅读 1148·2019-08-26 11:54
阅读 2072·2019-08-26 11:48
阅读 3453·2019-08-26 10:23
阅读 2367·2019-08-23 18:30