Vite+Vue3+TS+Electron+Flask 构建桌面程序

本文将介绍如何利用 Vite、Vue 3、TypeScript、Electron 和 Flask 这一系列构建一个具有实时响应数据的基础桌面应用程序。

环境搭建

在开始之前,需要确保开发环境中安装了以下工具和软件:

  • Node. js(这里我使用的是 v20.12.0)
  • Visual Studio Code(用于编辑 Vite、Vue3、TS、Electron 代码)
  • Python(这里我使用的是 v 3.11+)
  • PyCharm(用于编辑 Flask 后端)

初始化 Electron-Vite 项目

创建一个新的 Electron-Vite 项目将作为桌面应用的基础。

npm create vite@latest

请添加图片描述

请添加图片描述

请添加图片描述

请添加图片描述

请添加图片描述

npm install
npm run dev

请添加图片描述

初始化 Flask

Flask 是一个轻量级的 Python Web 应用框架,创建一个新的 Flask 项目将作为桌面应用后端的基础。

请添加图片描述

请添加图片描述

请添加图片描述

前端代码

<script setup lang="ts">
import { ref } from 'vue';

const datas = ref<string[]>([]);

async function getData() {
  const response = await fetch('http://127.0.0.1:5000/stream_test') as Response;;
  const reader = response.body?.getReader();
  while (response.body) {
    if (reader) {
      const { done, value } = await reader.read();
      if (done) break;
      datas.value.push(new TextDecoder('utf-8').decode(value));
    }
  }
}
</script>

<template>
  <button @click="getData">开始获取数据</button>
  <div v-for="(data, index) in datas" :key="index">
    <p>{{ data }}</p>
  </div>
</template>

<style scoped></style>

请添加图片描述

后端代码

from time import sleep  
  
from flask import Flask, Response, stream_with_context  
from flask_cors import CORS
  
app = Flask(__name__)  
CORS(app)
  
@app.route('/stream_test')  
def stream_test():  
    def generate():  
        global index  
        while True:  
            index += 1  
            sleep(1)  
            print(index)  
            yield str(index)  
  
    return Response(stream_with_context(generate()), mimetype='text/plain')
  
if __name__ == '__main__':  
    app.run()

运行测试

请添加图片描述

可能出现的问题

  1. 2024-05-02【未解决】:将 Flask 打包成 exe 文件作为后端服务的话,在执行业务代码的时候,可能存在 CORS 问题(虽然在代码中已处理 CORS,但可能有这么一两个业务获取数据存在问题)。
  • 3
    点赞
  • 9
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值