2016-03-03 51 views
0

我是Flask的新手,并且一直在为其登录模块创建现有的应用程序。它必须尽快交付。登录凭据通过Active Directory验证进行验证,该验证按预期工作。我指的是​​,其中说在Flask中使用url_for传递POST调用值

url_for('main',page = 2):返回内部URL /?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) 

问题:如何通过用户的凭据scheduler作为POST电话的方法

+1

简短的回答是:需要用@login_requied装饰和访问用户凭据路线通过current_user变量登录的用户,你不能。您无法通过URL传递POST参数。 – dirn

回答

2

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

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

总之你需要创建User类几个必填字段和方法(https://flask-login.readthedocs.org/en/latest/#your-user-class)和指定的几种方法与装饰加载并检查被验证的用户:

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) 

之后,你可以将任何

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