簡體   English   中英

將查詢參數傳遞給Flask裝飾器

[英]Pass query parameters to Flask decorator

我正在為Flask服務器設置令牌身份驗證系統,並且希望能夠設置裝飾器,使其看起來像這樣:

@app.route('/my/data/')
@requires_token_auth
def get_my_endpoint_data():
    """Return JSON data""""
    return get_data()

然后我將擊中端點,如/ my / data?token = myawesometokenvalue

我已經設置了我的裝飾器功能

def requires_token_auth(f):
    @wraps(f)
    def wrapped(*args, **kwargs):
        ... do stuff ...
        return f(*args, **kwargs)
return wrapped

不幸的是,'token'參數在args內部不可用。 問題似乎是Flask通過了req.view_args而不是req.args。

*來自flask的app.py *

1344         return self.view_functions[rule.endpoint](**req.view_args)

如何從包裝函數內部訪問查詢參數?

由於這是“燒瓶查詢參數修飾器”的第一個google結果,因此這是我最終在方法的路徑參數之上添加查詢參數的解決方案:

def query_params(f):
    """
    Decorator that will read the query parameters for the request.
    The names are the names that are mapped in the function.
    """
    parameter_names = inspect.getargspec(f).args

    @wraps(f)
    def logic(*args, **kw):
        params = dict(kw)

        for parameter_name in parameter_names:
            if parameter_name in request.args:
                params[parameter_name] = request.args.get(parameter_name)

        return f(**params)

    return logic

@app.route('/hello/<uid>', methods=['GET', 'POST'])
@query_params
def hello_world(uid, name):
    return jsonify({
        'uid': uid,
        'name': name
    })

哦,我才意識到我可以像往常一樣做!

token = request.args.get('token')

暫無
暫無

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

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