Vue3与Flask后端Demo

文章目录

准备工作
  1. 安装开发环境

    • 安装 Python(推荐 Python 3.8 或更高版本)。
    • 安装 Node.js(推荐 LTS 版本)。
    • 安装 PyCharm(用于 Flask 开发)和 VSCode(用于 Vue3 开发)。
    • 使用 npm 安装 Vue CLI:npm install -g @vue/cli
  2. 创建项目

    • Flask 项目 :在 PyCharm 中新建一个 Python 项目,并创建一个 app.py 文件。
    • Vue3 项目 :在命令行中运行 vue create vue3-flask-project 创建一个新的 Vue 3 项目。
Flask 后端设置
  1. 安装 Flask 和 Flask-CORS

    在 Flask 项目中,使用 pip 安装 Flask 和 Flask-CORS:

    bash 复制代码
    pip install flask flask-cors
  2. 编写 Flask 应用

    app.py 中,设置 Flask 应用并启用 CORS:

    python 复制代码
    from flask import Flask, jsonify
    from flask_cors import CORS
    
    app = Flask(__name__)
    CORS(app, resources={r"/*": {"origins": "*"}}, supports_credentials=True)
    
    @app.route('/api/data', methods=['GET'])
    def get_data():
        return jsonify({'message': 'Hello from Flask!'})
    
    @app.route('/api/login', methods=['POST'])
    def login():
        # 假设接收 JSON 数据
        data = request.get_json()
        # 这里可以添加数据库验证等逻辑
        return jsonify({'status': 'success', 'user': data.get('username')})
    
    if __name__ == '__main__':
        app.run(debug=True)
Vue3 前端设置
  1. 安装 Axios

    在 Vue3 项目中,使用 npm 安装 Axios:

    bash 复制代码
    npm install axios
  2. 配置 Axios

    在 Vue 组件中引入 Axios 并配置请求:

    vue 复制代码
    <template>
      <div>
        <h1>Vue3 with Flask Demo</h1>
        <button @click="fetchData">Fetch Data</button>
        <button @click="login">Login</button>
        <p v-if="message">{{ message }}</p>
      </div>
    </template>
    
    <script setup>
    import { ref } from 'vue';
    import axios from 'axios';
    
    const message = ref('');
    
    function fetchData() {
      axios.get('http://localhost:5000/api/data')
        .then(response => {
          message.value = response.data.message;
        })
        .catch(error => {
          console.error('Error fetching data:', error);
        });
    }
    
    function login() {
      axios.post('http://localhost:5000/api/login', {
        username: 'testuser',
        password: 'testpass' // 注意:实际应用中不应明文传输密码
      })
      .then(response => {
        message.value = `Login success: ${response.data.user}`;
      })
      .catch(error => {
        console.error('Error logging in:', error);
      });
    }
    </script>
  3. 运行项目

    • 在 PyCharm 中运行 Flask 应用(通常会自动打开 http://localhost:5000/)。
    • 在 VSCode 的 Vue 项目中,运行 npm run serve,这将启动 Vue 开发服务器(通常位于 http://localhost:8080/)。
跨域问题
  • 在 Flask 中,通过 Flask-CORS 插件已经处理了跨域请求。

  • 如果在 Vue 项目中遇到跨域问题,可以在 vue.config.js 文件中配置代理(如果使用 Vue CLI 3+):

    js 复制代码
    module.exports = {
      devServer: {
        proxy: {
          '/api': {
            target: 'http://localhost:5000',
            changeOrigin: true,
            pathRewrite: { '^/api': '' }
          }
        }
      }
    };

    配置后,Vue 中的请求可以简化为 axios.get('/api/data') 而无需指定完整的 URL。

测试
  • 点击 Vue 页面上的 "Fetch Data" 按钮,查看是否能从 Flask 后端获取数据并显示。
  • 点击 "Login" 按钮,查看是否能成功发送 POST 请求并处理返回的数据。

这样,你就完成了 Vue3 与 Flask 后端的基本配合设置,并能够通过实例看到前后端数据交互的过程。

相关推荐
清幽竹客4 分钟前
vue-37(模拟依赖项进行隔离测试)
前端·vue.js
vvilkim4 分钟前
Nuxt.js 页面与布局系统深度解析:构建高效 Vue 应用的关键
前端·javascript·vue.js
paopaokaka_luck7 分钟前
基于SpringBoot+Vue的电影售票系统(协同过滤算法)
vue.js·spring boot·后端
滿8 分钟前
Vue3 父子组件表单滚动到校验错误的位置实现方法
前端·javascript·vue.js
专注VB编程开发20年9 分钟前
javascript的类,ES6模块写法在VSCODE中智能提示
开发语言·javascript·vscode
智者知已应修善业1 小时前
【51单片机用数码管显示流水灯的种类是按钮控制数码管加一和流水灯】2022-6-14
c语言·经验分享·笔记·单片机·嵌入式硬件·51单片机
孞㐑¥5 小时前
Linux之Socket 编程 UDP
linux·服务器·c++·经验分享·笔记·网络协议·udp
郭庆汝5 小时前
pytorch、torchvision与python版本对应关系
人工智能·pytorch·python
要加油哦~6 小时前
vue | 插件 | 移动文件的插件 —— move-file-cli 插件 的安装与使用
前端·javascript·vue.js
小林学习编程6 小时前
Springboot + vue + uni-app小程序web端全套家具商场
前端·vue.js·spring boot