flask 中的表单操作不重定向到路由
form action in flask not redirecting to the route
简单地说,我只是想通过在我的 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() url 上。我也试过
<form action="{{ url_for('sessions') }}">
但效果不佳。不确定我错过了什么?请任何 hints/ideas 将不胜感激。
试试这个(我刚刚添加了一行,评论的那一行):
@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")
更新的答案反映了新的评论
在您的代码中发现了几个问题:
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
引擎调用 form.action
中的 login
,第二个 login
页面在有 GET
请求(最初打开此页面)时处理服务 login
HTML
并接受带有凭据的表单 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
内容和 POST
用于提交 form
数据。在 login
端点中,我有一个条件来检查,如果它是 POST
方法请求,那么我从 request.form
中提取凭证详细信息并在执行某些操作之后(例如在该 print() 语句中I
return 重定向(url_for('session'))`.
这就是您通过在其中一个页面上单击提交来管理从一个页面到另一个页面的重定向的方式。
原来的答案不正确
在 Flask 中重定向,你可以这样:
from flask import url_for, redirect
@app.route('/sessions', methods['GET', 'POST']
def sessions():
# some code
return redirect(url_for('some.endpoint'))
这会将您重定向到您将提供的特定端点。在 docs 中有更多关于它的信息。
简单地说,我只是想通过在我的 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() url 上。我也试过
<form action="{{ url_for('sessions') }}">
但效果不佳。不确定我错过了什么?请任何 hints/ideas 将不胜感激。
试试这个(我刚刚添加了一行,评论的那一行):
@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")
更新的答案反映了新的评论
在您的代码中发现了几个问题:
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
引擎调用 form.action
中的 login
,第二个 login
页面在有 GET
请求(最初打开此页面)时处理服务 login
HTML
并接受带有凭据的表单 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
内容和 POST
用于提交 form
数据。在 login
端点中,我有一个条件来检查,如果它是 POST
方法请求,那么我从 request.form
中提取凭证详细信息并在执行某些操作之后(例如在该 print() 语句中I
return 重定向(url_for('session'))`.
这就是您通过在其中一个页面上单击提交来管理从一个页面到另一个页面的重定向的方式。
原来的答案不正确
在 Flask 中重定向,你可以这样:
from flask import url_for, redirect
@app.route('/sessions', methods['GET', 'POST']
def sessions():
# some code
return redirect(url_for('some.endpoint'))
这会将您重定向到您将提供的特定端点。在 docs 中有更多关于它的信息。