簡體   English   中英

Flask 將 POST 參數傳遞給自定義裝飾器

[英]Flask pass POST parameters to custom decorator

我在這里這里看到了關於傳遞GET參數和硬編碼參數的帖子。

我想要做的是將POST參數傳遞給自定義裝飾器。 route實際上並不是渲染頁面,而是處理一些內容並通過 AJAX 調用將結果發送回。

裝飾器看起來像這樣:

# app/util.py

from functools import wraps
from models import data

# custom decorator to validate symbol
def symbol_valid():
    def decorator(func):
        @wraps(func)
        def decorated_function(symbol, *args, **kwargs):
            if not data.validate_symbol(symbol):
                return jsonify({'status': 'fail'})
            return func(*args, **kwargs)
        return decorated_function
    return decorator

視圖看起來像這樣:

# app/views/matrix_blueprint.py

from flask import Blueprint, request, jsonify

from ..models import data
from ..util import symbol_valid

matrix_blueprint = Blueprint('matrix_blueprint', __name__)

# routing for the ajax call to return symbol details
@matrix_blueprint.route('/route_line', methods=['POST'])
@symbol_valid
def route_line():
    symbol = request.form['symbol'].upper()
    result = data.get_information(symbol)
    return jsonify(**result)

我知道當我通過GET這樣的/quote_line/<symbol>傳遞參數時,我實際上可以調用@symbol_valid()但我需要POST

那么問題是我的裝飾器如何訪問POST ed 變量?

簡單的解決方案。 將 Flask 的request模塊導入到包含裝飾器的util.py模塊中。 也刪除了外部功能。

見代碼:

# app/util.py

from flask import request # <- added

from functools import wraps
from models import data

# custom decorator to validate symbol

def symbol_valid(func):
    @wraps(func)
    def decorated_function(*args, **kwargs): # <- removed symbol arg
        symbol = request.form['symbol'] # <- paramter is in the request object
        if not data.validate_symbol(symbol):
            return jsonify({'status': 'fail'})
        return func(*args, **kwargs)
    return symbol_valid

decorator接受一個func參數。 您必須使用像@symbol_valid()這樣的裝飾器或使函數symbol_valid接受一個func參數。

如果你做得對,你可以在請求周期內的任何地方訪問request對象。 它只是有效。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM