我已经建立了一个小型烧瓶服务器和相关网站。我能够使用烧瓶服务器成功地本地托管页面,而且我能够使用代码return str(request.form)
查看我在单击按钮后放置在文本字段中的文本。
现在我已经在我的代码中写道,在点击FIRST html页面的按钮后,我在本地主机上发现它们被重定向到另一个具有几乎相同代码的html页面。但出于某种原因:
return str(request.form)
不再显示我输入网站的值。我一直试图调试原因并且最终得出结论,当多次调用时,烧瓶请求对象的行为方式不同。除此之外,我不知道如何修复它。
这是:( Flask 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)
minifile.html的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>
minifile2.html的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>
答案 0 :(得分:1)
您的第二个表单会回发到根路径处理程序/
:
<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响应。发布该表单可以追溯到/
。您还可以使用浏览器开发人员工具来观察网络条目。
不是硬编码操作网址,而是使用url_for
并命名您的目标:
<form action="{{ url_for('my_form2_post') }}" method='POST'>