Создание POST-запросов к Flask и получение данных - PullRequest
0 голосов
/ 04 ноября 2018

У меня есть приложение React, которое отправляет POST-запрос к бэкэнду Flask. Запрос POST предназначен для изменения некоторых данных в базе данных и отправки рассчитанного значения. Кажется, все работает на стороне Flask, кроме ответа. Ответ, который я получаю от Flask:

Response { type: "cors", 
url: "http://127.0.0.1:3122/update", 
redirected: false, 
status: 200, ok: true, statusText: "OK", headers: Headers, bodyUsed: false }

Я не уверен, что я делаю неправильно. В моем коде Flask я использую функцию, украшенную @app.after_request

response.headers.add('Access-Control-Allow-Origin', '*')
response.headers.add('Access-Control-Allow-Headers', 'Content-Type,text/plain')
response.headers.add('Access-Control-Allow-Methods', 'GET,PUT,POST,DELETE,OPTIONS')

, а также пакет flask_cors для поддержки CORS со стороны клиента.

app = Flask(__name__)
app.config['DEBUG'] = True
api = CORS(app, resources={r"/*": {"origins": "*"}})

Я также пытался установить mimetype в своем ответе от Flask равным text/plain, чтобы запрос перед полетом не вызывался.

resp = Response(response=calculation_json,
                status=200,
                mimetype='text/plain')

Код запроса POST:

(async () => {
    const rawResponse = await
        fetch(url, {
                        method: 'POST',
                        headers: {
                              'Accept': 'text/plain',
                              'Content-Type': 'text/plain'
                            },
                        body: jsonData
      });

      const response = await rawResponse;

        if (response.status >= 200 && response.status < 300) {
            console.log(response);
            return Promise.resolve(response)
        } else {
            this.props.form.resetFields();
            return Promise.reject(new Error(response.statusText))
        }

Ответы [ 2 ]

0 голосов
/ 05 ноября 2018

Вы должны изменить свой код ответа так, чтобы он возвращал данные, а не только обычный http 200. В этом случае похоже, что вы хотите вернуть Json.

Смотрите примеры: Возврат ответа JSON из представления "Колба"

0 голосов
/ 04 ноября 2018

В случае, если для клиентской части вашего приложения вы используете create-react-app,, вы можете добавить конфигурацию прокси в файле package.json.

"proxy": {
    "/apiRoute": {
      "target": "http://127.0.0.1:3122"
    },
  },

/ apiRoute - это название маршрутов (GET, POST, PUT ..), которые вы определили в Flask. Поэтому я бы предложил создать шаблон во Flask для всех маршрутов, например / api / **, поэтому в package.json вместо добавления всех маршрутов вы можете что-то вроде ниже

"proxy": {
  "/api/*": {
     "target": "http://127.0.0.1:3122"
   },
 },
...