国产xxxx99真实实拍_久久不雅视频_高清韩国a级特黄毛片_嗯老师别我我受不了了小说

資訊專欄INFORMATION COLUMN

Flask-restful 用法及自定義參數錯誤信息

Dogee / 2120人閱讀

摘要:是我們自定義的錯誤碼為啟動文件當我們運行的時候,程序便啟動了起來。在中修改只要為,報參數錯誤正常返回消息把中的方法改為我們自己定義的方法現在再次運行瀏覽器輸入即可得到輸入檢測一下正常輸出完美

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

相關文章

  • Flask 擴展系列之 Flask-RESTful

    摘要:勵以最少的安裝方式進行最佳實踐。上面的例子接收了一個對象并準備將其序列化。裝飾器會通過進行轉換。從對象中提取的唯一字段是。是一個特殊的字段,它接受端點名稱并為響應中的端點生成一個。可以查看項查看完整列表。 大綱 簡介 安裝 快速入門 一個最小的 api 例子 資源豐富的路由 端點 參數解析 數據格式化 完整 TODO 應用例子 簡介 Flask-RESTful是一個Flas...

    阿羅 評論0 收藏0
  • PHP 錯誤拋出及自定義處理

    摘要:錯誤拋出及自定義處理定義中的錯誤拋出及自定義處理指的是允許我們自定義拋出錯誤并且捕捉錯誤并進行處理。例如我們編寫一個的函數,而參數必須是一個整數否則觸發錯誤運行結果如下捕捉錯誤異常摘自官方文檔 PHP 錯誤拋出及自定義處理 定義 php中的錯誤拋出及自定義處理指的是允許我們自定義拋出錯誤并且捕捉錯誤并進行處理。類似于 面向對象語言中的throw 及 try...catch... 在ph...

    2450184176 評論0 收藏0
  • H5頁面二次分享

    摘要:對于頁面來說二次分享還是蠻重要的,畢竟還是微信發出去之后習慣性的使用自帶的分享功能。通篇看完的話,基本上能避過很多坑記得微信文檔習慣把一些坑寫在后面,不放在一起先說說,怎么微信怎么做二次分享文檔地址,通過引入官方。 對于H5頁面來說二次分享還是蠻重要的,畢竟qq還是微信發出去之后習慣性的使用自帶的分享功能。和PC端不同,PC直接復制地址了。前兩天在做請柬,踩了不少的雷,個人開發和公司開...

    evin2016 評論0 收藏0
  • H5頁面二次分享

    摘要:對于頁面來說二次分享還是蠻重要的,畢竟還是微信發出去之后習慣性的使用自帶的分享功能。通篇看完的話,基本上能避過很多坑記得微信文檔習慣把一些坑寫在后面,不放在一起先說說,怎么微信怎么做二次分享文檔地址,通過引入官方。 對于H5頁面來說二次分享還是蠻重要的,畢竟qq還是微信發出去之后習慣性的使用自帶的分享功能。和PC端不同,PC直接復制地址了。前兩天在做請柬,踩了不少的雷,個人開發和公司開...

    layman 評論0 收藏0
  • 使用 Flask 和 AngularJS 構建博客 - 1

    摘要:注原文作者,原文地址為在這個教程中,我們將使用和構建一個博客。在開發期間,這將允許我們把它們運行在不同的端口例如和。現在我們將進入目錄并使用運行這個腳本。示例創建一篇文章為了創建一篇文章,你需要發送一個請求給。 注:原文作者 John Kevin M. Basco,原文地址為 Building a blog using Flask and AngularJS Part 1 在...

    劉玉平 評論0 收藏0

發表評論

0條評論

Dogee

|高級講師

TA的文章

閱讀更多
最新活動
閱讀需要支付1元查看
<