Flask отвечает на все POST-запросы с кодом 400

Во время написания проекта на flask и vue.js столкнулся с проблемой в создании POST-запросов. Flask игнорирует абсолютны все POST-запросы, отправляемые с сайта. Для воспроизведения проблемы:

main.py

import os
from flask import Flask, render_template, request, url_for, redirect
from flask import Flask, render_template, session

app = Flask(__name__)
app.config["SECRET_KEY"] = "fsdijukofhselokiufhdskilujfhsdkihuifs"
@app.route("/test", methods=["POST", "GET"])
def test():
    if request.method == "POST":
        print(request.form["name"])
    return render_template("test.html")

if __name__ == "__main__":
    port = int(os.environ.get("PORT", 5000))
    app.run(host="0.0.0.0", port=port)

test.html(в папке templates)

<!DOCTYPE html>
<html lang="en">
  <head>
    <meta charset="UTF-8" />
    <meta http-equiv="X-UA-Compatible" content="IE=edge" />
    <meta name="viewport" content="width=device-width, initial-scale=1.0" />
    <script src="https://cdn.jsdelivr.net/npm/vue@2/dist/vue.js"></script>
    <script src="https://cdn.jsdelivr.net/npm/axios/dist/axios.min.js"></script>
  </head>
  <body>
    <div id="app">
      <input type="text" v-model="name" />
      <button type="submit" variant="danger" v-on:click="submit">Add</button>
      <script lang="Javascript">
        var app = new Vue({
          el: '#app',
          data: {
            name: "",
          },
          methods: {
            submit(event){
              let formData = new FormData();
              formData.append("name", this.name);
              axios({
                url: "/test",
                method: "POST",
                headers: {
                },
                data: formData,
              })
              .then(function (response) {
                console.log(response);
              })
              .catch(function (error) {
                console.log(error);
              });
            }
          },
        })
      </script>
    </div>
  </body>
</html>

При нажатии на кнопку код ответа равен 400.

192.168.1.67 - - [27/Apr/2022 17:18:23] "POST /test HTTP/1.1" 400 -

При повторении действий с включенным дебаггером:

  File "C:\Users\andrewtheproger\AppData\Local\Programs\Python\Python310\Lib\site-packages\flask\app.py", line 2091, in __call__
    return self.wsgi_app(environ, start_response)
  File "C:\Users\andrewtheproger\AppData\Local\Programs\Python\Python310\Lib\site-packages\flask\app.py", line 2076, in wsgi_app
    response = self.handle_exception(e)
  File "C:\Users\andrewtheproger\AppData\Local\Programs\Python\Python310\Lib\site-packages\flask\app.py", line 2073, in wsgi_app
    response = self.full_dispatch_request()
  File "C:\Users\andrewtheproger\AppData\Local\Programs\Python\Python310\Lib\site-packages\flask\app.py", line 1518, in full_dispatch_request   
    rv = self.handle_user_exception(e)
  File "C:\Users\andrewtheproger\AppData\Local\Programs\Python\Python310\Lib\site-packages\flask\app.py", line 1516, in full_dispatch_request   
    rv = self.dispatch_request()
  File "C:\Users\andrewtheproger\AppData\Local\Programs\Python\Python310\Lib\site-packages\flask\app.py", line 1502, in dispatch_request        
    return self.ensure_sync(self.view_functions[rule.endpoint])(**req.view_args)
  File "D:\coding\spotinefy1\test.py", line 11, in test
    print(request.form["name"])
  File "C:\Users\andrewtheproger\AppData\Local\Programs\Python\Python310\Lib\site-packages\werkzeug\datastructures.py", line 377, in __getitem__    raise exceptions.BadRequestKeyError(key)
werkzeug.exceptions.BadRequestKeyError: 400 Bad Request: The browser (or proxy) sent a request that this server could not understand.
KeyError: 'name'

Fiddler показывает такой запрос: введите сюда описание изображения

В текстовом виде: ------WebKitFormBoundaryUG2BQoqdARJDgqg4 Content-Disposition: form-data; name "name"

dsadasdasd ------WebKitFormBoundaryUG2BQoqdARJDgqg4--

Если вывести request.form, а не request.form["name"], можно получить:

ImmutableMultiDict([('------WebKitFormBoundaryBFhZNsgt2fimstrE\r\nContent-Disposition: form-data; name', '"name"\r\n\r\nasdad\r\n------WebKitFormBoundaryBFhZNsgt2fimstrE--\r\n')])

При этом, ошибки не возникнет. Но все же, получить request.form["name"] не выходит. Скажите пожалуйста, что сделано не так?


Ответы (0 шт):