2014-10-19 105 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 
    })