Bad Request Error с flask, python, HTML, необычное поведение при инициализации с flask.request.form

Я пишу веб-приложение -, используя 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-адрес, и теперь все будет работать как надо.

Это просто игрушечный пример, иллюстрирующий реальную проблему, демонстрирующую это странное поведение, когда я должен «обмануть» свой браузер, чтобы показать мне эту веб-страницу.

10
задан erin 19 August 2012 в 02:55
поделиться