在Flask中使用url_for传递POST调用值

时间:2016-03-03 06:31:43

标签: python flask

我是Flask的新手,并且一直在为其登录模块开发现有的应用程序。它必须尽快交付。登录凭据通过 Active Directory 身份验证进行验证,该身份验证按预期工作。我指的是this flask link,其中说

  

url_for(' main',page = 2):返回内部网址/?page = 2。所有可选的关键字参数都被视为GET参数。

我的索引页面从此处加载(完美运行):

@app.route("/", methods=['GET', 'POST'])
def login():
  error = None
  if request.method == 'POST':
    userName = request.form['username']
    pwd = request.form['password']
    try:
      ldapobject = auth.bind(userName,pwd)
      return redirect(url_for('scheduler'))  ----> NEED TO PASS USER AND PWD TO scheduler function using post here
    except ldap.LDAPError, error_message:
      error = 'Invalid Credentials. Please try again'
  return render_template('login.html', error=error)

我的调度程序功能:

@app.route("/home", methods=['POST'])
def scheduler():
  # some code here
  # WANT TO HAVE USER CREDENTIALS IN THIS FUNCTION FROM login page
return render_template("scheduler.html", scheduler=form)

问题:如何将用户的凭据作为POST调用传递给scheduler方法

1 个答案:

答案 0 :(得分:2)

如果要在应用程序页面之间保留用户数据,则需要在用户端存储一些会话数据,例如:饼干。

flask-login模块(https://flask-login.readthedocs.org/en/)可以为您完成所有肮脏的工作。

简而言之,您需要使用几个必填字段和方法(https://flask-login.readthedocs.org/en/latest/#your-user-class)创建User类,并指定几个带有装饰器的方法来加载和检查正在进行身份验证的用户:

from flask_login import LoginManager

login_manager = LoginManager()
login_manager.init_app(app=app)

@login_manager.user_loader
def load_user(username):
    return User(username)

@login_manager.request_loader
def load_from_request(request):
    return User.auth_is_valid(request.authorization)

之后,您可以使用@login_requied装饰器标记需要用户凭据的所有路径,并通过current_user变量登录用户:

from flask_login import login_required, current_user
@app.route("/user_needed")
@login_required
def some_function():
    print(current_user)