Vue 和 Flask 前后端分离教程(一)

这篇具有很好参考价值的文章主要介绍了Vue 和 Flask 前后端分离教程(一)。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

Vue 和 Flask 前后端分离教程(一)

在本教程中,我们将学习如何使用 Vue.js(前端框架)和 Flask(后端框架)构建一个简单的前后端分离应用。本教程假设你对 HTML、CSS 和 JavaScript 有基本了解。让我们开始吧!

如果对Flask和Vue还不太熟悉,可以选择查看博主之前的教学文章:

  • Flask 基础教学(一)
  • Flask基础教学(二)
  • Vue.js基础教学

1. 准备工作

  1. 安装 Node.js (https://nodejs.org/),安装完成后,通过命令行运行 node -vnpm -v 检查是否安装成功。
  2. 安装 Vue CLI:在命令行中输入 npm install -g @vue/cli
  3. 安装 Python (https://www.python.org/downloads/),安装完成后,通过命令行运行 python --version 检查是否安装成功。
  4. 安装 Flask:在命令行中输入 pip install Flask

2. 创建项目

创建一个文件夹,用来存储项目,例如myapp之后的文件夹都myapp这里面创建

2.1 创建前端项目

  1. 进入myapp文件夹,在命令行中输入 vue create myapp-frontend,选择Vue3
  2. 进入项目目录:cd myapp-frontend
  3. 运行项目:npm run serve,在浏览器中访问 http://localhost:8080 查看效果。

2.2 创建后端项目

  1. 进入myapp文件夹,在命令行中创建一个新的目录:mkdir myapp-backend

  2. 进入项目目录:cd myapp-backend

  3. 创建一个名为 app.py 的文件,内容如下:

    # 导入 Flask
    from flask import Flask, jsonify
    # 导入 CORS
    from flask_cors import CORS
    
    # 创建一个 Flask 应用实例
    app = Flask(__name__)
    # 并允许来自所有域的请求
    CORS(app)
    
    # 定义一个简单的路由
    @app.route('/api/data', methods=['GET'])
    def get_data():
        # 创建一个字典作为模拟数据
        data = {
            "message": "Hello from Flask!",
            "items": [
                {"id": 1, "name": "Item 1"},
                {"id": 2, "name": "Item 2"},
                {"id": 3, "name": "Item 3"}
            ]
        }
        # 将字典转为 JSON 并返回
        return jsonify(data)
    
    # 如果作为主程序运行,启动应用
    if __name__ == '__main__':
        app.run(debug=True)
    
  4. 运行项目:python app.py,在浏览器中访问 http://localhost:5000/api/data 查看效果。

3. 前后端交互

3.1 前端请求数据

  1. myapp-frontend 目录下,安装 axiosnpm install axios

  2. src 目录下创建一个名为 services 的新目录。

  3. services 目录下创建一个名为 DataService.js的文件,内容如下:

    // 导入 axios
    import axios from 'axios';
    
    // 创建一个 axios 实例,用于发送请求
    const apiClient = axios.create({
      // 设置后端 API 的基础 URL
      baseURL: 'http://localhost:5000/api',
      // 设置请求头
      headers: {
        Accept: 'application/json',
        'Content-Type': 'application/json',
      },
    });
    
    // 定义一个用于获取数据的函数
    export default {
      getData() {
        // 向 '/data' 路由发送 GET 请求
        return apiClient.get('/data');
      },
    };
    

**请求头(Request Headers)**是在发送 HTTP 请求时,客户端向服务器发送的一组键值对。它们提供有关请求的元数据,例如请求类型、内容类型以及客户端想要接收的响应格式等。请求头有助于服务器了解如何处理传入的请求,并提供相应的响应。

在上面的代码片段中,请求头包含两个键值对:

  1. Accept: 'application/json':这个键值对表示客户端(这里是您的 Vue.js 应用程序)希望从服务器接收 JSON 格式的数据。服务器可以根据此信息返回适当格式的数据。此外,如果服务器无法提供 JSON 格式的数据,它还可以返回一个适当的错误消息。
  2. 'Content-Type': 'application/json':这个键值对表示客户端发送给服务器的数据的类型是 JSON。这有助于服务器了解如何解析请求中包含的数据,并根据需要进行处理。

这些请求头在 DataService.js 文件中的 axios 实例中设置,以确保与 Flask 后端服务器之间的通信遵循这些规则。当您的应用程序向后端发送请求时,axios 会自动包含这些请求头。

3.2 显示后端数据

  1. 打开 myapp-frontend/src/components/HelloWorld.vue 文件。

  2. 删除 <script> 标签内的 props 部分。

  3. 导入 DataService 并在 created 钩子中调用 getData 函数。修改后的 <script> 标签如下:

    // 导入 DataService
    // 导入 ref 和 onMounted
    import { ref, onMounted } from 'vue';
    import DataService from '../services/DataService.js';
    
    export default {
      name: 'HelloWorld',
      setup() {
        // 初始化数据
        const message = ref('');
        const items = ref([]);
    
        //定义一个异步函数来获取数据
        const fetchData = async () => {
          try {
            const response = await DataService.getData();
            // 将获取的数据设置为组件的 data 属性
            message.value = response.data.message;
            items.value = response.data.items;
          }catch(error){
            console.error(error);
          }
        };
    
        // 在组件挂载时调用 fetchData 函数
        onMounted(fetchData);
    
        // 返回数据,以便在模板中使用
        return {message, items};
      },
    };
    
    • export default:这是一个 JavaScript 模块导出,使得其他文件可以导入和使用这个组件。
    • name: 'HelloWorld':这是组件的名称,有助于在调试和组件树中识别组件。
    • setup() {}:这是 Vue 3 Composition API 的核心函数。它在组件实例创建之前运行,用于设置组件的响应式数据和逻辑。
    • const message = ref('')const items = ref([]):这里,我们使用 ref() 函数创建了两个响应式引用,分别用于存储从服务器获取的消息和项目列表。ref() 是 Vue 3 Composition API 的一部分,用于创建响应式数据。
    • const fetchData = async () => {}:这是一个异步函数,用于从服务器获取数据。它使用 async/await 语法处理异步操作。
    • const response = await DataService.getData():此行代码调用 DataService.js 中定义的 getData() 函数,发送请求到服务器以获取数据。因为这是一个异步操作,所以使用了 await
    • message.value = response.data.messageitems.value = response.data.items:这两行代码将从服务器获取的数据分别赋值给 messageitems 响应式引用。
    • onMounted(fetchData):这里,我们使用 onMounted() 生命周期钩子,在组件挂载后(即插入 DOM 之后)调用 fetchData 函数。onMounted() 是 Vue 3 Composition API 的一部分,用于在特定生命周期阶段执行函数。
    • return {message, items}:在 setup() 函数的最后,我们返回一个对象,包含响应式引用 messageitems。这使得它们可以在组件的模板中使用。例如,<h1>{{ message }}</h1><li v-for="item in items" :key="item.id">{{ item.name }}</li>
  4. 修改 <template> 标签,显示后端数据。修改后的 <template> 标签如下:

    <template>
      <div class="hello">
        <h1>{{ message }}</h1>
        <ul>
          <!-- 遍历 items 数组,显示每个元素的内容 -->
          <li v-for="item in items" :key="item.id">{{ item.name }}</li>
        </ul>
      </div>
    </template>
    
  5. App.vue <template> 标签中HelloWorld的msg删除,修改后的 <template> 标签如下:

    <template>
      <HelloWorld />
    </template>
    

现在,打开两个终端,一个在myapp-backend文件夹下的命令行输入python app.py启动前端项目,另一个在myapp-frontend文件夹下的命令行输入npm run serve启动后端项目,访问 http://localhost:8080,你应该可以看到从后端获取的数据显示在页面上。

文件夹下的命令行输入npm run serve启动后端项目,访问http://localhost:8080`,你应该可以看到从后端获取的数据显示在页面上。

最后效果如下:

vue+flask 博客,Vue,Flask,flask,vue.js,前端文章来源地址https://www.toymoban.com/news/detail-857884.html

到了这里,关于Vue 和 Flask 前后端分离教程(一)的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • SpringBoot + Vue前后端分离项目实战 || 一:Vue前端设计

    系列文章: SpringBoot + Vue前后端分离项目实战 || 一:Vue前端设计 SpringBoot + Vue前后端分离项目实战 || 二:Spring Boot后端与数据库连接 SpringBoot + Vue前后端分离项目实战 || 三:Spring Boot后端与Vue前端连接 SpringBoot + Vue前后端分离项目实战 || 四:用户管理功能实现 SpringBoot + Vue前后

    2024年02月09日
    浏览(65)
  • 【Python成长之路】基于Flask-admin库,结合html+vue,实现前后端数据传递

    前面已经做了Flask-admin库的基本介绍和几个库常用功能如何使用,若不了解请移步到以下博客: 1、?《【Python成长之路】基于Flask-admin库,编写个人工作平台代码详述》 2、?《【Python成长之路】基于Flask-admin库,编写个人工作平台代码 -- 进阶版》 此篇文章主要是讲述: 1、结合

    2024年02月02日
    浏览(45)
  • 后端SpringBoot+前端Vue前后端分离的项目(二)

    前言:完成一个列表,实现表头的切换,字段的筛选,排序,分页功能。 目录 一、数据库表的设计 二、后端实现 环境配置 model层  mapper层 service层  service层单元测试 controller层 三、前端实现 interface接口 接口api层 主要代码 效果展示 引入mybatis-plus依赖 MerchandiseDetailsService文

    2024年02月09日
    浏览(61)
  • 后端SpringBoot+前端Vue前后端分离的项目(一)

    前言:后端使用SpringBoot框架,前端使用Vue框架,做一个前后端分离的小项目,需求:实现一个表格,具备新增、删除、修改的功能。 目录 一、数据库表的设计 二、后端实现 环境配置 数据处理-增删改查 model层 mapper层 XML配置 Service层 controller层 单元测试 三、前后端交互 配置

    2024年02月10日
    浏览(70)
  • 后端flask,前端vue,实现post请求chatgpt流式响应

    vue2写法 vue3 setup写法

    2024年01月21日
    浏览(43)
  • vue.js毕业设计,基于vue.js前后端分离订座预约小程序系统 开题报告

      毕业论文 基于Vue.js预约订座小程序系统 开题报告 学    院:                        专    业:                          年    级:                         学生姓名:                        指导教师:       黄菊华    

    2024年02月07日
    浏览(41)
  • .NET8 和 Vue.js 的前后端分离

    在.NET 8中实现前后端分离主要涉及到两个部分:后端API的开发和前端应用的开发。后端API通常使用ASP.NET Core来构建,而前端应用则可以使用任何前端框架或技术栈,比如Vue.js、React或Angular等。下面是一个简化的步骤指南,帮助你在.NET 8中实现前后端分离。 下面是一个简单的示

    2024年04月10日
    浏览(44)
  • 「网页开发|前端开发|Vue」07 前后端分离:如何在Vue中请求外部数据

    本文主要介绍两种在Vue中访问外部API获取数据的方式,通过让Vue通过项目外部的接口来获取数据,而不是直接由项目本身进行数据库交互,可以实现前端代码和后端代码的分离,让两个部分的代码编写更独立高效。 「网页开发|前端开发|Vue」01 快速入门:快速写一个Vue的

    2024年02月09日
    浏览(45)
  • 若依vue(前后端分离版本)前端获取登录用户id

    1.找到user.js 2.在user.js中找到以下几个地方 属性:state{} 属性:mutations{} 函数:GetInfo() 3.在user.js中添加代码  4.在自己的页面中添加获取id的代码 在该若依的版本中,从下列目录找到,ruoyi-ui-src-store-modules-user.js 属性state在页面中的位置 还有mutations 最后是GetInfo方法 步骤三 到此

    2024年04月12日
    浏览(54)
  • SpringBoot + Vue前后端分离项目实战 || 三:Spring Boot后端与Vue前端连接

    系列文章: SpringBoot + Vue前后端分离项目实战 || 一:Vue前端设计 SpringBoot + Vue前后端分离项目实战 || 二:Spring Boot后端与数据库连接 SpringBoot + Vue前后端分离项目实战 || 三:Spring Boot后端与Vue前端连接 SpringBoot + Vue前后端分离项目实战 || 四:用户管理功能实现 SpringBoot + Vue前后

    2024年02月12日
    浏览(71)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包