我正在构建一个烧瓶应用程序,该应用程序使用访问外部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,第二次是使用函数。让我更加困惑-但以防万一。
答案 0 :(得分:1)
替换
return redirect(xeroHome)
使用
return redirect(url_for('xeroHome'))
当然,您还需要从flask导入url_for