了解为什么 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'>
我建立了一个小型的 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'>