如何在Flask服务器中对特定的React组件进行更改?

时间:2019-04-27 00:13:35

标签: python ajax reactjs flask

我希望我的问题很清楚。

因此,我在组件A中有一个React表单。我想使用AJAX请求将字段传递给Flask服务器,该服务器处理接收到的数据并更新组件B中的DOM。

尝试查找其他几个SO页面,但没有一个回答了问题。而且我对AJAX和Flask都是新手,所以也无济于事。

我当前的代码如下:

组件A:

import React from "react";

class InputForm extends React.Component {
  claimRef = React.createRef();
  handleSubmit = event => {
    event.preventDefault();
    const claim = this.claimRef.current.value;
    this.props.addClaim(claim);
    $.ajax({
      type: "POST",
      url: "/test/",
      data: claim
    })
      .done(function(data) {
        // self.clearForm();
      })
      .fail(function(jqXhr) {
        console.log("failed to register");
      });
  };
  render() {
    return (
      <form onSubmit={this.handleSubmit}>
        <label>
          Claim:
          <textarea name="claim" ref={this.claimRef} placeholder="Claim" />
        </label>
        <input type="submit" value="Submit" />
      </form>
    );
  }
}

export default InputForm;

烧瓶服务器:

#!/usr/bin/env python

import os
from flask import Flask, render_template, request
app = Flask(__name__)


@app.route("/")
def index():
    return render_template('index.html')


@app.route('/test/', methods=['GET', 'POST'])
def test():
    clicked = None
    if request.method == "POST":
        clicked = request
    return render_template('test.html', clicked=clicked)


if __name__ == "__main__":
    app.run(host='0.0.0.0', port=os.environ.get('PORT', 3000), debug=True)


我临时添加了一个test.html文件,该文件本来只是打印数据,但是即使localhost:3000 / test也仅打印“ None”。

我在应用程序的任何部分都完全没有错误,并且在网页的“网络”标签中也得到了status 200,这意味着数据正在被接受。

如何访问传递的数据,然后将其打印在组件B中?

1 个答案:

答案 0 :(得分:2)

您的reactjs http帖子没有任何问题,但是我建议您使用fetch api。但是,当您想从服务器与客户端对话时,必须使用json。

以下是您如何向服务器发出http请求的尝试:

const data = this.claimRef.current.value;
fetch('/test/', {
        method: "POST", 
        headers: {
            "Content-Type": "application/json",
        },
        body: JSON.stringify(data), // body data type must match "Content-Type" header
    })
    .then(response => response.json())
    .then(data => console.log(data));

创建http帖子到服务器后,这就是从服务器(烧瓶)中检索数据的方式

@app.route('/test/', methods=['GET', 'POST'])
def test():
    clicked = None
    if request.method == "POST":
     data = request.json
     print(data) #json data from client (reactjs)
    return jsonify(data='test')
# jsonify returns http response as json

尝试一下,看看会得到什么!我希望这个帮助能祝你好运! 注意CORS

获取api

https://developer.mozilla.org/en-US/docs/Web/API/Fetch_API/Using_Fetch