了解为什么 Request 在 Flask 中不起作用

Understanding Why Request Doesn't work in Flask

我建立了一个小型的 flask 服务器和相关网站。我能够使用烧瓶服务器成功地在本地托管页面,而且我能够使用代码 return str(request.form) 查看我在单击按钮后放置在文本字段中的文本。

现在我在我的代码中写了,点击第一个 html 页面的按钮后,用户会在我的本地主机上发现他们被重定向到另一个 html 页面,代码几乎相同。但是出于某种原因:

return str(request.form)

不再显示我输入到站点的值。我一直在尝试调试原因,并最终得出结论,多次调用时,烧瓶请求对象的行为方式不同。除此之外,我不知道如何修复它。

这里是:(烧瓶 Python 代码:)

from flask import Flask
from flask import request
from flask import render_template
from flask import abort, redirect, url_for
import pymongo
from pymongo import MongoClient
import smtplib
from email.mime.text import MIMEText



app = Flask(__name__)

@app.route('/')
def my_form():
    return render_template('minifile.html')

@app.route('/', methods=['POST'])
def my_form_post():
    return redirect(url_for('my_form2'))

@app.route('/a/')
def my_form2():
    return render_template('minifile2.html')
@app.route('/a/', methods=['POST'])
def my_form2_post():
    return str(request.form)

if __name__ == '__main__':
    app.run(debug=True)

HTML 对于 minifile.html

<!DOCTYPE html>
<head>

</head>

<body>
    <form action="\" method='POST'>
        <input type="text" name="firstname" value="" style="width: 210px;"/>

         <input type="Submit" name="" value="submit" style="width: 210px; background-color: black; color: white; font-weight: bold; padding-top: 3px; padding-bottom: 3px;" />
    </form>
</body>




</html>

HTML 对于 minifile2.html

<!DOCTYPE html>
<head>

</head>

<body>
    <form action="\" method='POST'>
        <input type="text" name="firstname" value="" style="width: 210px;"/>

         <input type="Submit" name="" value="submit" style="width: 210px; background-color: black; color: white; font-weight: bold; padding-top: 3px; padding-bottom: 3px;" />
    </form>
    This is text
</body>



</html>

您的第二个表单回发到根路径处理程序 /:

<form action="\" method='POST'>

您可以在控制台的 Flask 输出中看到这一点:

127.0.0.1 - - [08/Feb/2015 13:08:16] "GET / HTTP/1.1" 200 -
127.0.0.1 - - [08/Feb/2015 13:08:16] "GET /favicon.ico HTTP/1.1" 404 -
127.0.0.1 - - [08/Feb/2015 13:08:21] "POST / HTTP/1.1" 302 -
127.0.0.1 - - [08/Feb/2015 13:08:21] "GET /a/ HTTP/1.1" 200 -
127.0.0.1 - - [08/Feb/2015 13:08:26] "POST / HTTP/1.1" 302 -
127.0.0.1 - - [08/Feb/2015 13:08:26] "GET /a/ HTTP/1.1" 200 -

在发布由 / 提供的第一个表单时,浏览器被重定向到 /a/POST 被提供一个 302 重定向,然后是第二个表单的 200 响应). POST-ing 该表格可以追溯到 /。您还可以使用浏览器开发人员工具来观察网络条目。

与其硬编码操作 URL,不如使用 url_for 并命名您的目标:

<form action="{{ url_for('my_form2_post') }}" method='POST'>