视频链接:https://www.bilibili.com/video/av78415640

前端:react,后端:flask,我们在前面课程中都已经分别单独学习。
那么,怎么把前后端联系起来呢?

这是系列教程,前面基础部分可以查看博客其他内容。

(这节课信息量稍微有点大,建议多看几次)

这里面的坑实在是太多了,我一个一个自己踩过才知道。

添加ApiUtil.js

一些接口,暂时还用不到这么多。

export default class ApiUtil {static URL_IP = 'http://127.0.0.1:5001';static URL_ROOT = '/api/v1';static API_STAFF_UPDATE = ApiUtil.URL_ROOT + '/updateStaff';static API_STAFF_LIST = ApiUtil.URL_ROOT + '/getStaffList/';static API_STAFF_DELETE = ApiUtil.URL_ROOT + '/deleteStaff/';static API_STAFF_SEARCH_3 = ApiUtil.URL_ROOT + '/searchStaff_3';  //只搜索3个属性static API_CHECK_PASSWORD = ApiUtil.URL_ROOT + '/checkPassword';static API_ADMIN = ApiUtil.URL_ROOT + '/gotoAdmin'; //进入管理员状态static API_EXPORT_TO_FILE = ApiUtil.URL_ROOT + '/export_to_file'; //将数据导出到文件}

添加HttpUtil.js

写get和post方法

export default class HttpUtil{static get(url){  //我们定义的get函数,只需要指定访问api即可return new Promise((resolve,reject)=>{fetch(url).then(response=>{if(response.ok){return response.json();}else{throw new Error(response.status + " : "+response.statusText);}}).then(result=>resolve(result)).catch(error=>{reject(error);})});}static post(url, data){  //而post函数,不仅指定api,还需要从前端传递参数信息过来return new Promise((resolve,reject)=>{fetch(url,{ method: 'POST',headers:{'Accept': 'application/json','Content-Type': 'application/json',},body: JSON.stringify(data)}).then(response=>response.json()).then(result=>resolve(result)).catch(error=>{reject(error);})})}}

GET和POST区别:

https://blog.csdn.net/qq_39539470/article/details/82470360

简单总结:

1,GET请求,请求的数据会附加在URL之后

因此,GET请求的数据会暴露在地址栏中,而POST请求则不会。

2,在使用GET请求时,传输数据会受到URL长度的限制。

3,POST的安全性比GET的高。

修改handleOK函数

    handleOK = ()=>{this.props.form.validateFields((err,values)=>{if(err){message.error('表单数据有误,请根据提示填写!')}else{// console.log("填写正确!");HttpUtil.post(ApiUtil.API_STAFF_UPDATE, values).then(re=>{console.log("返回结果:",re);message.info(re.message);}).catch(error=>{message.error(error.message);});this.setState({visible: false,});this.props.onDialogConfirm(values);}})}

在后端的run.py

from flask import Flask, request
import jsonapp = Flask(__name__, template_folder='../front-end', static_folder='../front-end', static_path='')@app.route('/hi')
def hi():return 'hi~'#api接口前缀
apiPrefix = '/api/v1/'##################  Staff接口  ##################@app.route(apiPrefix + 'updateStaff', methods=['POST'])
def updateStaff():data = request.get_data(as_text=True)re = {'code': 0,'data':data,'message': "这是测试呀"}print("后端数据:",data)return json.dumps(re)if __name__=="__main__":app.run(debug=True, port=5001)

其中,对于 app = Flask(...)

app = Flask(__name__, template_folder='../front-end', static_folder='../front-end', static_path='')

自己总结:template_folder 从run.py文件开始定位模板文件(index.html)<找到index.html>。static_folder从run.py开始找资源文件,资源文件在html文件中要用到<给index.html中js提供一个查找位置>。static_url_path=''比较方便

你以为,这样就能成功吗?并没有。

在package.json中加入:

  "proxy": "http://127.0.0.1:5001"

如何,刷新一下,结果发现没有变化,简直差点暴捶电脑。因为之前一样的操作是完全可以的。

冷静思考,debug。发现解决办法:

关闭前端服务器,重启!!! npm start

终于成功:

前端结果:

后端结果:

成功,收工,下期见。

注:此套教程有配套视频和代码,详情见

A01.从零开始前后端react+flask - 前面的话+技术介绍:https://blog.csdn.net/GreatXiang888/article/details/103269687

一些有用资料

React学习(五)——向服务器请求数据并显示  https://blog.csdn.net/daxiazouyizou/article/details/79773307

Promise初步详解(resolve,reject,catch) https://blog.csdn.net/weixin_41888813/article/details/82882375

如何理解package.json中的proxy字段?https://segmentfault.com/a/1190000014891894

我们并没有遇到CORS问题,因为在浏览器眼里,我们还是将请求发送到"http://localhost:3000" 中的,它并不知道creat-react-app已经将请求转发到了"http://0.0.0.89:7300" 这个所谓的会触发浏览器CORS安全策略的其他Origin。

antd做form表单的组件共用,利用mapPropsToFields填写默认值  https://www.cnblogs.com/zhuhuoxingguang/p/10938659.html

A15.从零开始前后端react+flask - 将前后端联系起来相关推荐

  1. A19.从零开始前后端react+flask - 删除前后端数据

    接上文 A18.从零开始前后端react+flask - 修改前后端数据 一 找到HomePage.js中 <Icon type="close" title="删除 ...

  2. A16.从零开始前后端react+flask - 将前端数据保存到数据库

    上一节,我们讲了如何将前后端联系起来. A15.从零开始前后端react+flask - 将前后端联系起来 https://blog.csdn.net/GreatXiang888/article/de ...

  3. A20.从零开始前后端react+flask - 查找数据

    接触过数据库的同学,都知道我们需要4个操作:"增删改查". 增:插入数据.A16.从零开始前后端react+flask - 将前端数据保存到数据库 删:删除数据.A19.从零开始前 ...

  4. A04.从零开始前后端react+flask - 用flask说hello

    视频链接:https://www.bilibili.com/video/av77344039 ps:安装python和flask见前文. 文档 flask中文官方文档: https://dormous ...

  5. 基于flask+vue前后端分离 一款简单的旅游网站源码,带admin管理系统

    介绍 毕业设计-flask-vue前后端分离 一款简单的旅游网站,带admin管理系统 软件架构 软件架构说明 使用Python-flask 轻量级框架编写后端程序,前端采用Vue编写,后端接口都在蓝 ...

  6. [react] 组件卸载前,加在DOM元素的监听事件和定时器要不要手动清除?为什么?

    [react] 组件卸载前,加在DOM元素的监听事件和定时器要不要手动清除?为什么? 定时器要在 componentWillUnmount 手动清除,直接绑定在JSX里的事件监听器不用,使用ref绑定 ...

  7. Vue前端和Java后端 联调使用AES 前后端加密解密

    Vue前端和Java后端 联调使用AES 前后端加密解密 最近在项目中需要针对重要数据进行加密传输,在网上找了一大推加密方式 最终采用AES 加密 Java端 package com.zk.web.u ...

  8. 商城前后端prd文档/经销商门户/瓶箱回收系统/组织管理平台/系统管理后台/商城文档/司机管理移动端原型/电商前后端原型/电商前后端需求文档//运输公司管理/产品库管理/资金管理/移动端电商原型文档

    商城前后端prd文档/经销商门户/瓶箱回收系统/组织管理平台/系统管理后台/商城文档/司机管理移动端原型/电商前后端原型/电商前后端prd文档/后台管理系统原型/运输公司管理/产品库管理/资金管理/移 ...

  9. uniapp简单搞定支付传统的开发支付需要前后端做很多工作,各种参数的处理,签名,秘钥的验证校验等,尤其是涉及到多种不同的平台支付,更是繁琐;而且以往的支付是由后端主导的,如果后端是个菜鸡,那么做这

    uniapp简单搞定支付 传统的开发支付需要前后端做很多工作,各种参数的处理,签名,秘钥的验证校验等,尤其是涉及到多种不同的平台支付,更是繁琐:而且以往的支付是由后端主导的,如果后端是个菜鸡,那么做这 ...

最新文章

  1. [算法也疯狂]实现假装商品抢购繁忙的效果(php版)
  2. 计算程序运行时间(.net1.1 于.net2.0的区别)在.net2.0中提供了Stopwatch类,简单例子...
  3. Python3 中 爬网页 \uxxx 问题
  4. 我们是如何做好前端工程化和静态资源管理 - 無雄 - 博客园
  5. python中keys是什么意思_python中key指的是什么
  6. duilib vs2015 安装_FFmpeg视频播放器开发-FFmpeg简介与项目环境搭建(一)
  7. html页面加载时执行ajax请求,页面加载完成之后,ajax远程调用的数据才显示出来。有没有可能使ajax部分的程序执行完了,页面再加载完成...
  8. 基础功能2-python修改文件中所有文件名
  9. 测试计划与测试方案的区别
  10. pycharm导入opencv库失败解决方法
  11. Java中的自定义注解
  12. 阿里云高级技术专家王晨:云原生数据库PolarDB技术解密
  13. 2018.12.25|区块链技术头条
  14. 2021国内地址数据库表mysql
  15. 查看签名apk调试日志工具
  16. 人类与计算机作文1500,人类群星闪耀时作文1500字
  17. monkey测试中防止关闭WIFI的方法
  18. pip install -t的意思
  19. Oceanbase 扩容TPC-H测试
  20. 二代身份证号码最后一位校验位的计算方法

热门文章

  1. 超越OCR的富文档内容解析神器LayoutParser
  2. flume1.9 用户指南(中文版)
  3. bnuoj 29065 鸣人的查克拉
  4. 中国大陆程序员2020年工资城市分布图
  5. 计算机图形学--动画与模拟
  6. 谷歌浏览器 无法翻译此网页问题(已解决,亲测有效
  7. 30分钟简易复刻元气骑士地图生成系统
  8. 华米科技诚意之作:Amazfit GTR 2e 亮相CES电子展
  9. 收集金币(人人网笔试)
  10. 亚洲销售女神徐鹤宁经典语录——太过精辟!