我正在使用flask、python和HTML编写一个web应用程序。我的问题是,第一次加载网页时,会出现以下错误Bad Request The browser (or proxy) sent a request that this server
could not understand.
我能够通过“欺骗”最终加载页面,首先运行它而不需要任何flask.request.form调用,然后再将它们放回(详细信息如下)。我的初始化一定出了问题。我是新来的flask和HTML一起使用python。
假设我在一个名为example的目录中工作。我有一个名为test.py的python脚本和一个名为test.html的HTML模板,其目录结构如下:\example\test.py
\example\templates\test.html
我的python脚本test.py是:import sys
import flask, flask.views
app = flask.Flask(__name__)
app.secret_key = "bacon"
class View(flask.views.MethodView):
def get(self):
result = flask.request.form['result']
return flask.render_template('test.html', result=result)
# return flask.render_template('test.html')
def post(self):
return self.get()
app.add_url_rule('/', view_func=View.as_view('main'), methods=['GET', 'POST'])
app.debug = True
app.run()
我在test.html中的HTML是
Enter something into the box:
再现错误的步骤
1:运行test.py脚本,并在浏览器中打开URLRunning on http://127.0.0.1:5000/
您应该看到以下错误Bad Request The browser (or proxy) sent a request that this server
could not understand.
2:注释掉def get(self)函数的前两行,并取消注释def get(self)函数的第三行,使test.py看起来像这样import sys
import flask, flask.views
app = flask.Flask(__name__)
app.secret_key = "bacon"
class View(flask.views.MethodView):
def get(self):
# result = flask.request.form['result']
# return flask.render_template('test.html', result=result)
return flask.render_template('test.html')
def post(self):
return self.get()
app.add_url_rule('/', view_func=View.as_view('main'), methods=['GET', 'POST'])
app.debug = True
app.run()
3:刷新URL,您将看到一切正常(尽管我最终希望能够返回result的值)
4:现在,把被注释掉的行再换一次。一、 e,取消注释def get(self)函数的前两行,并注释def get(self)函数的第三行,使test.py看起来像这样import sys
import flask, flask.views
app = flask.Flask(__name__)
app.secret_key = "bacon"
class View(flask.views.MethodView):
def get(self):
result = flask.request.form['result']
return flask.render_template('test.html', result=result)
# return flask.render_template('test.html')
def post(self):
return self.get()
app.add_url_rule('/', view_func=View.as_view('main'), methods=['GET', 'POST'])
app.debug = True
app.run()
5:刷新URL,现在你就可以看到一切都按预期进行了。
这只是一个玩具的例子,说明了真实的问题,展示了这种奇怪的行为,我如何“欺骗”我的浏览器,让我显示这个网页。那个