2014-10-19 139 views
1

我設置了一個令牌身份驗證系統爲我的瓶服務器,我希望能夠設置一個裝飾看起來是這樣的:傳遞查詢參數來瓶裝飾

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

然後我會打像/我的/數據端點?令牌= myawesometokenvalue

我設置我喜歡

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

裝飾功能不幸的是,「令牌」參數沒有參數的個數內提供。問題似乎是Flask通過req.view_args而不是req.args。

*從燒瓶的app.py *

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

如何從一個包裹函數內訪問查詢參數?

+0

你試圖訪問'token'參數的代碼在哪裏? – 2014-10-20 01:24:18

+0

包裝的裝飾器函數 – ZECTBynmo 2014-10-20 01:26:48

回答

0

哦,我只是意識到,我可以像我平常一樣的方式做到這一點!

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

由於這是「燒瓶查詢參數裝飾」第一谷歌結果,這是我結束了在方法添加查詢參數,對路徑參數頂部的溶液:

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 
    })