为什么html POST会把我带到意想不到的页面?

时间:2017-01-25 00:53:07

标签: python html html5 flask

我有一个使用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并不是特别熟悉,但我已经尝试了所有我能想到的东西。有什么建议吗?

2 个答案:

答案 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。