美文网首页
Flask_restful 结合 React

Flask_restful 结合 React

作者: SingleDiego | 来源:发表于2020-06-29 15:39 被阅读0次

参考:https://blog.miguelgrinberg.com/post/how-to-create-a-react--flask-project




创建文档树

本项目会首先创建 react 项目,然后以 react 项目为骨干,添加一个放置 flask 相关文件的文件夹 api

安装及创建 react 项目步奏见以前文章:安装 React 及创建 app

完成后,手动添加 api 文件夹和 flask 相关文件。

完成后项目结构如下:

/react-app
  /api # 放置 flask 相关文件
    /venv # python 虚拟环境
    /app.py
  /node_modules
  /public
  /src
    /index.js
  /package.json
  /package-lock.json
  /README.md




编写 Flask API

# app,py

from flask import Flask
from flask_restful import Resource, Api

app = Flask(__name__)
api = Api(app)

class HelloWorld(Resource):
    def get(self):
        return {'content': 'hello world'}
api.add_resource(HelloWorld, '/api')


if __name__ == '__main__':
    app.run(debug=True)

创建一个最简单的 flask 项目,用 flask_restful 构建一个只返回 {'content': 'hello world'} 的简单 API。

要使它运行,激活虚拟环境再运行即可:

$ venv\Scripts\activate
$ set FLASK_APP=app.py
$ flask run

打开 http://127.0.0.1:5000/api 即可看到该 API。




编写 React 前端代码

我们可以先把 src 文件夹自带的文件清空,新建一个 index.js 文件:

// index.js

import React from 'react';
import ReactDom from 'react-dom';
import axios from 'axios';


class HelloMessage extends React.Component {
  state = {};

  async componentDidMount() {
    const promise = axios.get('/api');
    const response = await promise;
    this.setState({content: response.data.content});
    console.log(response);
  }

  render() {
    return <h1>{this.state.content}</h1>;
  }
}

ReactDom.render(
  <HelloMessage name="John" />,
  document.getElementById('root')
);

这里我选择 axios 库来处理 AJAX;然后按照 react 的套路,拿到 API 的数据,改变 state,渲染成 HTML




修改 React 配置

create-react-app 命令创建的 React 项目会生成一个包含项目配置的package.json 文件,修改配置在这个文件里进行。

因为 flask 项目默认在 5000 端口运行,而 react 项目默认在 3000 端口运行,两者结合后会因为跨域请求的问题而无法使用 AJAX 等。这里我们添加 reactproxy 字段来解决这个问题。

// package.json
{

  ... leave all other configuration options alone ...

  "proxy": "http://localhost:5000"
}




启动项目

前后端分离以后我们需要两个命令窗口分别启动 flaskreact 项目。

后端的启动见上文,前端启动:

$ npm start

如果使用了 yarn

$ yarn start

相关文章

网友评论

      本文标题:Flask_restful 结合 React

      本文链接:https://www.haomeiwen.com/subject/kqnofktx.html