摘要:是我們自定義的錯(cuò)誤碼為啟動(dòng)文件當(dāng)我們運(yùn)行的時(shí)候,程序便啟動(dòng)了起來(lái)。在中修改只要為,報(bào)參數(shù)錯(cuò)誤正常返回消息把中的方法改為我們自己定義的方法現(xiàn)在再次運(yùn)行瀏覽器輸入即可得到輸入檢測(cè)一下正常輸出完美
flask-restful 是一款比較好用的 flask 插件,它不僅自動(dòng)為我們實(shí)現(xiàn)了數(shù)據(jù)的 json 化,還能對(duì)傳入?yún)?shù)進(jìn)行驗(yàn)證,優(yōu)雅的替代了 form 表單。
代碼結(jié)構(gòu):
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 請(qǐng)求為args, post請(qǐng)求為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 文件設(shè)置路由
__init__.py
from .view import Test from flask_restful import Api from flask import Blueprint api = Blueprint("api", __name__) # 設(shè)置藍(lán)圖 resource = Api(api) resource.add_resource(Test, "/") # 設(shè)置路由
util.py 為一個(gè)設(shè)置文件, 用來(lái)放我們自己定義的輸出規(guī)范。
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 是我們自定義的錯(cuò)誤碼
code.py
class Code: SUCCESS = 1200 NO_PARAM = 1300 msg = { SUCCESS: "success", NO_PARAM: "no param" }
app.py 為啟動(dòng)文件
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)
當(dāng)我們運(yùn)行 python app.py 的時(shí)候,程序便啟動(dòng)了起來(lái)。
我們?cè)跒g覽器中輸入:localhost:5000/?id=123
即可看到:
{ "code": 1200, "data":{ "id": 123 }, "msg": "success" }
那當(dāng)我們輸入: localhost:5000/?id=api
得到了:
{ "message":{ "id": "invalid literal for int() with base 10: "api"" } }
很明顯,我們期望得到一個(gè) int 型的 id,這里給了一個(gè) str 類(lèi)型的字符串,于是得到了 status_code 為 40 0的 response。
我們肯定是希望以我們自己的定義消息來(lái)輸出,即:
{ "code": 1300, "data": null, "msg": "no param" }
flask-restful 并沒(méi)有提供相應(yīng)的 api,經(jīng)過(guò)查看源碼,發(fā)現(xiàn) flask-restful abort 的代碼是改寫(xiě)的 flask 的 abort 代碼,于是我們也改寫(xiě) flask-restful 的 abort 代碼。
flask abort 源碼:
def abort(status, *args, **kwargs): return _aborter(status, *args, **kwargs)
非常簡(jiǎn)單。
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
也是非常的簡(jiǎn)單,這里的 original_flask_abort 即 flask 的 abort。
那現(xiàn)在改代碼就很容易了,只要 http_status_code == 400,那么就是我們的參數(shù)沒(méi)有接受正確,需要爆出格式化以后的錯(cuò)誤。
在 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, 報(bào)參數(shù)錯(cuò)誤 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)
現(xiàn)在再次運(yùn)行 python app.py
瀏覽器輸入:http://localhost:5000/?id=api
即可得到:
{ "code": 1300, "data": null, "msg": "no param" }
輸入:http://localhost:5000/?id=111 檢測(cè)一下正常輸出:
{ "code": 1200, "data":{ "id": 111 }, "msg": "success" }
完美!
文章版權(quán)歸作者所有,未經(jīng)允許請(qǐng)勿轉(zhuǎn)載,若此文章存在違規(guī)行為,您可以聯(lián)系管理員刪除。
轉(zhuǎn)載請(qǐng)注明本文地址:http://systransis.cn/yun/44530.html
摘要:勵(lì)以最少的安裝方式進(jìn)行最佳實(shí)踐。上面的例子接收了一個(gè)對(duì)象并準(zhǔn)備將其序列化。裝飾器會(huì)通過(guò)進(jìn)行轉(zhuǎn)換。從對(duì)象中提取的唯一字段是。是一個(gè)特殊的字段,它接受端點(diǎn)名稱并為響應(yīng)中的端點(diǎn)生成一個(gè)??梢圆榭错?xiàng)查看完整列表。 大綱 簡(jiǎn)介 安裝 快速入門(mén) 一個(gè)最小的 api 例子 資源豐富的路由 端點(diǎn) 參數(shù)解析 數(shù)據(jù)格式化 完整 TODO 應(yīng)用例子 簡(jiǎn)介 Flask-RESTful是一個(gè)Flas...
摘要:錯(cuò)誤拋出及自定義處理定義中的錯(cuò)誤拋出及自定義處理指的是允許我們自定義拋出錯(cuò)誤并且捕捉錯(cuò)誤并進(jìn)行處理。例如我們編寫(xiě)一個(gè)的函數(shù),而參數(shù)必須是一個(gè)整數(shù)否則觸發(fā)錯(cuò)誤運(yùn)行結(jié)果如下捕捉錯(cuò)誤異常摘自官方文檔 PHP 錯(cuò)誤拋出及自定義處理 定義 php中的錯(cuò)誤拋出及自定義處理指的是允許我們自定義拋出錯(cuò)誤并且捕捉錯(cuò)誤并進(jìn)行處理。類(lèi)似于 面向?qū)ο笳Z(yǔ)言中的throw 及 try...catch... 在ph...
摘要:對(duì)于頁(yè)面來(lái)說(shuō)二次分享還是蠻重要的,畢竟還是微信發(fā)出去之后習(xí)慣性的使用自帶的分享功能。通篇看完的話,基本上能避過(guò)很多坑記得微信文檔習(xí)慣把一些坑寫(xiě)在后面,不放在一起先說(shuō)說(shuō),怎么微信怎么做二次分享文檔地址,通過(guò)引入官方。 對(duì)于H5頁(yè)面來(lái)說(shuō)二次分享還是蠻重要的,畢竟qq還是微信發(fā)出去之后習(xí)慣性的使用自帶的分享功能。和PC端不同,PC直接復(fù)制地址了。前兩天在做請(qǐng)柬,踩了不少的雷,個(gè)人開(kāi)發(fā)和公司開(kāi)...
摘要:對(duì)于頁(yè)面來(lái)說(shuō)二次分享還是蠻重要的,畢竟還是微信發(fā)出去之后習(xí)慣性的使用自帶的分享功能。通篇看完的話,基本上能避過(guò)很多坑記得微信文檔習(xí)慣把一些坑寫(xiě)在后面,不放在一起先說(shuō)說(shuō),怎么微信怎么做二次分享文檔地址,通過(guò)引入官方。 對(duì)于H5頁(yè)面來(lái)說(shuō)二次分享還是蠻重要的,畢竟qq還是微信發(fā)出去之后習(xí)慣性的使用自帶的分享功能。和PC端不同,PC直接復(fù)制地址了。前兩天在做請(qǐng)柬,踩了不少的雷,個(gè)人開(kāi)發(fā)和公司開(kāi)...
摘要:注原文作者,原文地址為在這個(gè)教程中,我們將使用和構(gòu)建一個(gè)博客。在開(kāi)發(fā)期間,這將允許我們把它們運(yùn)行在不同的端口例如和?,F(xiàn)在我們將進(jìn)入目錄并使用運(yùn)行這個(gè)腳本。示例創(chuàng)建一篇文章為了創(chuàng)建一篇文章,你需要發(fā)送一個(gè)請(qǐng)求給。 注:原文作者 John Kevin M. Basco,原文地址為 Building a blog using Flask and AngularJS Part 1 在...
閱讀 1899·2023-04-26 01:58
閱讀 2019·2019-08-30 11:26
閱讀 2761·2019-08-29 12:51
閱讀 3522·2019-08-29 11:11
閱讀 1207·2019-08-26 11:54
閱讀 2122·2019-08-26 11:48
閱讀 3510·2019-08-26 10:23
閱讀 2411·2019-08-23 18:30