代码之家  ›  专栏  ›  技术社区  ›  Black

向flask发出post请求并获取数据

  •  0
  • Black  · 技术社区  · 6 年前

    我有一个react应用程序,它向flask后端发出post请求。post请求旨在更改数据库中的某些数据并返回计算值。除了反应之外,所有的东西似乎都在烧瓶的一边起作用。我从烧瓶里得到的反应是:

    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 在我的回应中 text/plain 因此不会调用飞行前请求。

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

    请求后代码为:

    (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 回复  |  直到 6 年前
        1
  •  0
  •   Mohit Tilwani    6 年前

    如果您的应用程序的客户端使用 create-react-app, 可以在package.json文件中添加代理配置。

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

    /apiroute是您在烧瓶中定义的路径(get、post、put…)的名称。因此,我建议在flask中为所有路由(如/api/**)创建一个模式,因此在package.json中而不是添加所有路由,您可以如下所示

    "proxy": {
      "/api/*": {
         "target": "http://127.0.0.1:3122"
       },
     },
    
        2
  •  0
  •   Salah-1    6 年前

    您必须更改响应代码,使其返回的数据不仅仅是普通的htp200。在本例中,您似乎希望返回json。

    请参见示例: Return JSON response from Flask view

    推荐文章