亚洲在线久爱草,狠狠天天香蕉网,天天搞日日干久草,伊人亚洲日本欧美

為了賬號安全,請及時綁定郵箱和手機立即綁定
已解決430363個問題,去搜搜看,總會有你想問的

如何在路由功能中啟用僅限開發人員的行為

如何在路由功能中啟用僅限開發人員的行為

牛魔王的故事 2022-10-05 16:56:40
@app.route我希望能夠在可能僅由非生產服務器運行的修飾函數中定義或多或少的任意更改。實現我的意思的直接方法是將僅用于開發的更改放入檢查當前環境的 if 塊中:import flaskapp = flask.Flask(__name__)@app.route('/check', methods=['POST'])def check():    """Performs some kind of check on the given request data."""    # this if-block gates the dev/test/review-only behavior    if app.config['ENV'] != 'production':        # let a tester short-circuit the logic if they want        if flask.request.json['payload'] == 'just give me an ok':            return flask.jsonify('ok')    # the only code that runs in production, or in tests where I     # want the full logic to run    actual_result = some_complex_logic()    return flask.jsonify(actual_result)但是這種方法的缺點是,在入口點的核心處有一個本質上是大規模利用的東西,在代碼的生命周期中會經歷很多變化,這對我來說有點冒險。我一直在考慮的另一種方法是使用添加測試功能的條件包裝器。它將避免在實際代碼中包含測試代碼,并且可能會在啟動期間打印大紅色警告消息,ENV != production以表明服務器不安全。這里的缺點是堆棧跟蹤看起來會略有不同。要將所有約束放在一個簡短的列表中:我不想完全替換功能,所以模擬不會做我不想在請求正文中添加特殊的僅測試參數我不想在我的測試和生產服務器上部署不同的構建,只有配置(即ENV要么是要么production不同)應該不同產生所需結果的罐頭請求還不夠好 - 更改的邏輯some_complex_logic、API 更改,最重要的是它有點隨機我不是在談論設置測試客戶端,我想要一個實際的服務器運行并由人類測試最理想的情況是,我應該遵循不同的編程范式,或者可能是我未能通過谷歌搜索的中間件,它可以很好地處理這個并且沒有風險。編輯:我最終編寫并發布了這個問題的通用變體Flask-Shortcut。感謝@vulpxn 建議裝飾器表單,感謝@davidism 鏈接到其他信息(并首先維護 Flask ??)。
查看完整描述

1 回答

?
慕的地8271018

TA貢獻1796條經驗 獲得超4個贊

裝飾師是你的朋友。


from flask import Flask

from functools import wraps


app = Flask(__name__)


def development_shortcut(f):

    @wraps(f)

    def wrap(*args, **kwargs):

        if app.env == 'production':

            # Continue on to the /check route logic

            return f(*args, **kwargs)

        else:

            # Non-production, skip the logic

            return 'Just Giving an OK', 200

    return wrap


@app.route('/check')

@development_shortcut

def check():

    # your code here

    return 'Expensive Operation', 200


if __name__ == '__main__':

    app.env = 'development'  #change this value to see it work

    app.run()


查看完整回答
反對 回復 2022-10-05
  • 1 回答
  • 0 關注
  • 112 瀏覽
慕課專欄
更多

添加回答

舉報

0/150
提交
取消
微信客服

購課補貼
聯系客服咨詢優惠詳情

幫助反饋 APP下載

慕課網APP
您的移動學習伙伴

公眾號

掃描二維碼
關注慕課網微信公眾號