vue+flask的跨域问题和flask无法获取post请求的问题

项目场景:

原先网站使用前端vue+后端express构建的,现有需求,前端的表单数据要调用python的算法,完成基于机器学习的分类任务,再将分类结果返回给前端,因此需要开启第二个后端的服务,该服务是基于python的,项目中选择flask作为后端框架(比较简易),目的就是接受前端的这个post请求,将post请求的数据作为输入,输入进相应模型,返回的结果打包为json数据给前端渲染。


项目简介

如下是前端vue要传的数据
在这里插入图片描述
在这里插入图片描述

如下为封装的toLyPredict接口(存在问题,属于问题2的post封装问题,后面会解决)
在这里插入图片描述
如下为后端flask的配置:
不需要设置页面,因为它的目的就是处理这个表单请求,调用算法,返回相应数据给前端
在这里插入图片描述
在这里插入图片描述

问题描述即解决方法

提示:这里描述项目中遇到的问题:

问题1:跨域问题

问题1-原因分析:

问题1:这个是由于前后端分离,服务的端口号不同导致的,前端服务在127.0.0.1:8080上,原先的express后端服务在127.0.0.1:3001上(express跨域问题使用cors中间件解决的),现在多了一个后端服务在flask的127.0.0.1:3002上,而先前flask中未设置跨域相关代码,因此存在跨域问题

此时提交表单,发现如下报错,提示跨域问题has been blocked by CORS policy
在这里插入图片描述

问题1-解决方案:

在后端flask中设置cors
在这里插入图片描述
解决了问题1,但是出现了如下的问题

问题2:flask后端可以收到post的请求,但无法获取请求中的数据

提交表单后,前端显示的错误500,表示服务器内部错误(于是去flask终端检查错误)在这里插入图片描述
检查flask终端,发现可以收到前端发来的post请求,但是通过print(request.form)发现,获得的是空数据
在这里插入图片描述

问题2-原因分析

这是由于post请求的解析问题,原先使用vue+express时,前端封装post请求时没有设置content-type,因为可以直接在后端express中引入中间件body-parse来解析获取post请求的body中的数据(不需要考虑请求头中的content-type);而现在为发往flask后端的post请求,无法直接解析,flask只能识别请求头中的content-type为application/x-www-form-urlencoded或者multipart/form-data的post数据(通过postman接口测试发现,通过上述两种content-type,可以正确解析post请求,并返回数据,说明这是前端vue的post封装问题)
在这里插入图片描述

检查前端的network部分,我们可以看到,vue封装的post请求的content-type默认为application/json,此种请求flask无法解析,因此需要我们在vue中重新封该post请求,设置headers中的content-type
![在这里插入图片描述](https://img-blog.csdnimg.cn/30e4ac575d2f4884a6c94d4d2c3e5a57.p在这里插入图片描述

问题2-解决方案:

前端的封装接口处增加如下红框处代码,设置headers中的content-type为application/x-www-form-urlencoded或者multipart/form-data,这样flask就可以正确的解析获取post请求中附带的数据。
加粗样式
此时flask后端能正确获取数据
在这里插入图片描述

<think>好的,用户想了解如何将VueFlask集成或进行开发。我需要整理一个清晰的步骤指南,确保涵盖前后端分离的配置、处理、API交互以及部署方法。 首先,根据引用[1][2],常见的集成方式有两种:模板渲染前后端分离。模板渲染可能比较简单,但现代开发更倾向于前后端分离,所以重点放在后者。需要提到创建VueFlask项目,并分别管理。 然后,问题很重要。引用[2]中提到使用flask-cors扩展,需要详细说明如何安装配置CORS,确保Vue前端能访问Flask的API。 接下来是API设计部分。Flask需要提供RESTful接口,比如使用/json的例子,而Vue使用axios进行调用。这部分需要代码示例,包括Flask的路由Vue的组件方法。 部署方面,用户可能想知道如何将Vue构建后的静态文件整合到Flask中。需要解释npm run build生成dist文件夹,然后配置Flask的静态路由,引用[4]中的模板项目可能有相关参考。 还要考虑开发时的代理配置,比如在vue.config.js中设置代理,解决开发环境中的问题,这样前端开发服务器可以正确转发API请求Flask后端。 另外,可能用户需要知道项目结构的最佳实践,比如将VueFlask放在同一仓库的不同目录,或者分开管理。引用[3][4]提到了具体的项目结构,可以建议参考这些模板。 需要检查是否有遗漏的步骤,比如安装依赖、环境变量设置,或者常见的错误处理。比如,在Flask中返回JSON时使用jsonify,确保正确的Content-Type。 最后,提供相关的问题,帮助用户深入,比如性能优化、登录验证、项目结构优化等,参考之前的引用内容,确保问题覆盖可能遇到的后续疑问。</think>以下是分步指南说明如何实现Vue.jsFlask的集成开发,包含两种主流集成模式: ### 一、基础环境准备 1. 安装Node.jsPython环境 2. 创建项目文件夹 ```bash mkdir myproject && cd myproject ``` ### 二、前后端分离模式(推荐) #### 步骤1:创建Vue前端 ```bash npm install -g @vue/cli vue create frontend # 选择axios插件 ``` #### 步骤2:创建Flask后端 ```bash mkdir backend && cd backend python -m venv venv source venv/bin/activate pip install flask flask-cors ``` #### 步骤3:配置访问 在`backend/app.py`中添加: ```python from flask_cors import CORS app = Flask(__name__) CORS(app, resources={r"/api/*": {"origins": "*"}}) ``` #### 步骤4:创建API接口 ```python @app.route('/api/data') def get_data(): return jsonify({"message": "Hello from Flask!"}) ``` #### 步骤5:前端调用接口 在Vue组件中使用: ```javascript axios.get('http://localhost:5000/api/data') .then(response => { this.message = response.data.message }) ``` ### 三、模板整合模式 #### 步骤1:构建Vue项目 ```bash cd frontend npm run build ``` #### 步骤2:整合到Flask模板 将生成的`dist`文件夹复制到Flask的`static`目录,创建路由: ```python @app.route('/') def index(): return render_template('index.html') ``` ### 四、开发环境配置 1. 创建`vue.config.js`配置代理: ```javascript module.exports = { devServer: { proxy: 'http://localhost:5000' } } ``` ### 五、项目结构示例 ``` myproject/ ├── frontend/ # Vue项目 │ ├── src/ │ └── package.json └── backend/ # Flask项目 ├── app.py └── requirements.txt ``` ### 六、运行流程 1. 启动Flask后端: ```bash flask run ``` 2. 启动Vue前端: ```bash npm run serve ```
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值