Я пишу веб-приложение -, используя flask, python и HTML. Моя проблема в том, что при первой загрузке веб-страницы я получаю следующую ошибку
Bad Request The browser (or proxy) sent a request that this server could not understand.
Я могу заставить страницу загружаться в конце концов, «обманывая» сначала запуск ее без каких-либо 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()
и мой HTML в test.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/
Вы должны увидеть следующую ошибку
Bad Request The browser (or proxy) sent a request that this server could not understand.
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-адрес, и теперь все будет работать как надо.
Это просто игрушечный пример, иллюстрирующий реальную проблему, демонстрирующую это странное поведение, когда я должен «обмануть» свой браузер, чтобы показать мне эту веб-страницу.