我正在使用烧瓶、python 和 HTML 编写一个网络应用程序。我的问题是第一次加载网页时,出现以下错误
错误请求 浏览器(或代理)发送了此服务器无法理解的请求。
我能够通过“欺骗”首先在没有任何flask.request.form
调用的情况下运行它,然后将它们放回原处来最终加载页面(详情如下)。我的初始化一定有问题。我是新手flask
并使用python
with HTML
。
假设我在一个名为example
. 我有一个名为的 python 脚本test.py
和一个名为的 HTML 模板test.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()
我的 HTMLtest.html
是
<html>
<head>
</head>
<body>
<form action="/" method="post">
Enter something into the box:
<input type="text" name="result"/><br>
<input type="submit" value="Execute!"/>
</form>
</body>
</html>
重现错误的步骤
1:运行test.py
脚本,在浏览器中打开网址
Running on http://127.0.0.1:5000/
您应该看到以下错误
错误请求 浏览器(或代理)发送了此服务器无法理解的请求。
2:注释掉函数的前 2 行,def get(self)
取消注释函数的第 3 行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:现在,再次切换注释掉的行。即,取消注释函数的前 2 行def get(self)
并注释掉函数的第 3 行,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,现在您会看到一切正常。
这只是一个玩具示例,说明了展示这种奇怪行为的真正问题,即我必须如何“欺骗”我的浏览器向我展示这个网页。这