我有一个使用Python构建的简单Web应用程序,它有三个页面:main,index和post。我试图进入索引页面的“if request.method ==”POST“”部分。为了测试这个,我已经要求它渲染post.html页面。出于某种原因,当我从索引页面发送POST方法时,我被重定向到我的main_page。 python代码如下所示:
from flask import Flask, redirect, render_template, request, url_for
app = Flask(__name__)
app.config["DEBUG"] = True
@app.route("/", methods=["GET", "POST"])
def index():
if request.method == "GET":
return render_template("main_page.html")
#implied ELSE here (if it's not GET, do the following for a POST)
return redirect(url_for('index'))
@app.route('/index', methods=['GET', 'POST'])
def new_index():
if request.method == "POST":
#I AM TRYING TO GET HERE
return render_template('post.html')
if request.method == "GET":
return render_template('index.html',)
@app.route('/post')
def post():
return render_template('post.html')
index.html的POST方法来自:
<div class="row">
<form role="form" method='POST' action='.'>
<textarea class="form-control" name="contents" placeholder="Enter a comment"></textarea>
<button type="submit" class="btn btn-default">Submit</button>
</form>
</div>
我对HTML并不是特别熟悉,但我已经尝试了所有我能想到的东西。有什么建议吗?
答案 0 :(得分:1)
如果要在表单操作中链接到同一页面,您应该实际放置一个问号,一个空字符串,一个哈希或者只是将所有属性都放在一起。执行上述任一操作都会修复您的代码。
<form role="form" method='POST' action='?'>
<form role="form" method='POST' action='#'>
<form role="form" method='POST' action=''>
<form role="form" method='POST'>
我个人喜欢使用。
<form role="form" method='POST' action='#'>
这将在XHTML中验证,并且不会打开任何已知的攻击媒介。
答案 1 :(得分:1)
我做的第一件事是使用Postman测试你的API,一切正常:GET转到GET处理程序,POST转到POST处理程序。
我发现的错误是html表单,特别是 action 标记:您应该明确指向API处理程序,并相对于主机名。因此,例如,将其设置为:
transformed parameters
实际上会在Flask应用的 / index API上执行POST。