简而言之,我只是尝试通过在我的login.html模板中使用以下代码来重定向到url:
<form>
<form action="/sessions">
<p>Username:</p>
<p><input type="text" minlength="8" name="username"required /></p>
<p>Password:</p>
<p><input type="text" name="password"/></p>
<input type="submit" value="Submit">
</form>
和
def login():
print("inside login")
return render_template('login.html')
@app.route("/sessions", methods=["GET","POST"])
def sessions():
userid = request.form.get("userid")
password = request.form.get("password")
return request.form.get("userid"), request.form.get("password")
,但停留在login()网址上。我也尝试过
<form action="{{ url_for('sessions') }}">
,但效果不佳。不确定我缺少什么?请任何提示/想法将不胜感激。
答案 0 :(得分:2)
尝试一下(我刚刚添加了另一行,已注释的行):
@app.route("/sessions", methods=["GET","POST"])
def sessions():
userid = request.form.get("userid")
password = request.form.get("password")
if request.method == 'POST': #additional line
return request.form.get("userid"), request.form.get("password")
答案 1 :(得分:0)
在您的代码中发现了几个问题:
HTML
表单不正确,您正在使用表单中的表单 <form>
<form action="/sessions">
<p>Username:</p>
<p><input type="text" minlength="8" name="username"required /></p>
<p>Password:</p>
<p><input type="text" name="password"/></p>
<input type="submit" value="Submit">
</form>
您应该将其更改为此
<html>
<body>
<h1>This is login page</h1>
<form action="{{ url_for('login') }}" method="POST">
<p>Username:</p>
<p><input type="text" minlength="8" name="username"required /></p>
<p>Password:</p>
<p><input type="text" name="password"/></p>
<input type="submit" value="Submit">
</form>
</body>
</html>
通知更改,首先只有1个form
标签,然后我使用jinja2
引擎调用login
中的form.action
,是此login
页的第二个当有login
请求(最初打开此页面)并接受带有凭据的表单HTML
请求时,处理服务GET
POST
。
然后我将路线更改为此:
from flask import Flask, render_template, request, redirect, url_for
app = Flask(__name__)
@app.route('/login', methods=['GET', 'POST'])
def login():
if request.method == 'POST':
user_name = request.form['username']
password = request.form['password']
print(user_name, password) # do something here?
return redirect(url_for('session'))
return render_template('login.html')
@app.route('/session')
def session():
return render_template('session.html')
请注意,现在login
接受两种方法,GET
和POST
,如前所述,GET
用于提供HTML
内容和{{1} }用于提交POST
数据。在form
端点中,我有一个条件要检查,如果它是一个login
方法请求,则我要从POST
中提取凭证详细信息,然后执行某些操作(例如在该print()语句中{ {1}}返回重定向(url_for('session'))`。
这是通过单击页面之一上的提交来管理从一个页面到另一页面的重定向的方法。
在Flask中进行重定向,您可以这样:
request.form
这会将您重定向到您将提供的特定端点。在docs中,有更多信息。