首页 > 解决方案 > 关于使用 Flask 进行动态路由的问题

问题描述

我正在尝试在我的 Flaks 应用程序中创建一个记录区域,每个用户都有自己的路径来访问他们的信息。

/user/<userid>/dashboard 
/user/<userid>/profile
/user/<userid>/operations 
/user/<userid>/analytics

处理它的最佳方法是什么?在下面的示例中,我在 url_for 中登录后传递了 userId 变量。一旦重定向将来自 html 模板,不知道如何将 userId 传递给其他路由。

我正在阅读有关使用单一方法拥有多条路线的内容,但无法理解它是否符合我的需要。为菜鸟问题感到抱歉,并在此先感谢。

@app.route('/logon', methods=['POST'])
def logon():
    username = request.form['username']
    passwd = request.form['password']
    user = login_verified(username, passwd)
    session['token'] = user['idToken']
    return redirect(url_for('dashboard', usrId=user['userId']))

@app.route('/user/<usrId>/dashboard', methods=['GET'])
def dashboard(usrId):
    if 'token' in session:
        print('User ID = %s' % usrId)
        return render_template('dashboard.html')
    else:
        return redirect(url_for('login'))

标签: pythonpython-3.xflask

解决方案


伙计们刚刚找到了一种方法来做我正在寻找的事情(不知道这是否是最好的但有效)。在我找到的解决方案下方:

@app.route('/logon', methods=['POST'])
def logon():
    username = request.form['username']
    passwd = request.form['password']
    user = login_verified(username, passwd)
    session['token'] = user['idToken']
    return redirect(url_for('dashboard', usrId=user['userId']))


@app.route('/user/<usrId>/dashboard', methods=['GET'])
def dashboard(usrId):
    if 'token' in session:
        print('User ID = %s' % usrId)
        return render_template('dashboard.html', user=usrId)
    else:
        return redirect(url_for('login'))


@app.route('/user/<usrId>/operations', methods=['GET', 'POST'])
def operations(usrId):
    if 'token' in session:
        return render_template('operations.html', user=usrId)
    else:
        return redirect(url_for('login'))

和模板...

<body>
    <h1>Dashboard</h1>
    <div>
      <a href="{{ url_for('operations', usrId=user) }}">Operações</a>
      <a href="">Perfil</a>
    </div>
    <br />
    <input type="button" value="Logout" onclick="location.href='/logout'" />
  </body>

推荐阅读