烧瓶重定向错误地传递了函数引用

时间:2020-05-20 23:23:40

标签: python flask

我正在构建一个烧瓶应用程序,该应用程序使用访问外部API的多个OAuth令牌(存储在数据库中),并希望用户选择要应用的令牌集。不同的令牌可以访问不同的资源。

下面的代码从数据库获取令牌,并显示在无序列表中,其中包含指向我的tokenSet路由的href和带有tokenid的href。 href目标URL在浏览器中正确呈现。

意图是当单击凭据时,将使用所选令牌更新凭据,然后用户将返回首页。即

但是,当单击时,浏览器会重定向,但url中的tokenID被替换为(似乎是)该函数/将其重定向到的对象。即

http://localhost/xero/tokenSet/<function%20xeroHome%20at%200xb0d3f810>

任何人都可以解释原因吗???还是我所缺少的??

@app.route('/xero/')
def xeroHome():
   data = {"expires_at": str(datetime.fromtimestamp(credentials.token["expires_at"]))}    
   return render_template('xeroHome.html', title='Xero', data=data)


@app.route('/xero/tokens/')
def xeroTokenList():    
    tokens = o2token.query.filter_by(apiname="xero").all()
    tokenList={}
    link = "<ul>"
    for token in tokens:
        tokenList[token.useremail] = token.refresh_token
        link += f"<li><a href='/xero/tokenSet/{token.refresh_token}'>{token.useremail}</a></li>"
    link += "</ul>"
    return link


@app.route('/xero/tokenSet/<selected_token>')
def xeroTokenSet(selected_token):
    token = o2token.query.filter_by(refresh_token=selected_token).first().to_token()
    credentials.token = token
    return redirect(xeroHome)

更新:通过一些日志记录,当单击href时,似乎会两次击中tokenSet ...首先是使​​用正确的tokenID,第二次是使用函数。让我更加困惑-但以防万一。

1 个答案:

答案 0 :(得分:1)

替换

return redirect(xeroHome)

使用

return redirect(url_for('xeroHome'))

当然,您还需要从flask导入url_for