フラスコ、Python、HTMLを使用してWebアプリを作成しています。私の問題は、Webページを初めてロードするときに、次のエラーが発生することです。
不正なリクエストブラウザ(またはプロキシ)が、このサーバーが理解できないリクエストを送信しました。
最初に呼び出しなしでページを「トリック」して実行しflask.request.form
、次にそれらを元に戻すことで、最終的にページをロードすることができます(詳細は以下を参照)。初期化で問題が発生している可能性があります。私は初めてでflask
、で使用python
してい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
スクリプトを実行し、ブラウザでURLを開きます
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を更新すると、希望どおりに機能していることがわかります。
これは、ブラウザを「だまして」このWebページを表示させるという奇妙な動作を示す実際の問題を示すおもちゃの例にすぎません。The