摘要:是我們自定義的錯誤碼為啟動文件當我們運行的時候,程序便啟動了起來。在中修改只要為,報參數錯誤正常返回消息把中的方法改為我們自己定義的方法現在再次運行瀏覽器輸入即可得到輸入檢測一下正常輸出完美
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" }
完美!
文章版權歸作者所有,未經允許請勿轉載,若此文章存在違規行為,您可以聯系管理員刪除。
轉載請注明本文地址:http://specialneedsforspecialkids.com/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 在...
閱讀 1862·2023-04-26 01:58
閱讀 1989·2019-08-30 11:26
閱讀 2733·2019-08-29 12:51
閱讀 3499·2019-08-29 11:11
閱讀 1187·2019-08-26 11:54
閱讀 2102·2019-08-26 11:48
閱讀 3485·2019-08-26 10:23
閱讀 2389·2019-08-23 18:30