Python——Fastapi管理平台(打包+优化)

目录

一、配置多个表

1、后端项目改造

2、导包报错——需要修改(2个地方)

3、启动后端(查看是否有问题)

4、配置前端

二、打包——成exe文件(不包含static文件)简单

1、后端修改

2、前端修改

3、运行打包命令

三、打包——成exe文件(加入static文件,打包为单个文件)

1、后端修改

2、创建build.py(把下面的内容复制进去)

3、静态文件路径修改

四、动态配置数据库

1、提取db.py

2、创建一个mysql_config.py(把下面内容复制进去)

3、修改db.py的内容

4、查看是否自动创建了mysql_config.json文件

五、参考内容(7y)


视频:

Python—配置多张表(快速制作一个管理平台)_哔哩哔哩_bilibili代码生成项目地址:https://github.com/zy7y/dfs-generate视频中的教程文档:https://blog.csdn.net/Pan_peter/article/details/138381461项目作者:https://space.bilibili.com/438858333, 视频播放量 158、弹幕量 0、点赞数 5、投硬币枚数 5、收藏人数 3、转发人数 0, 视频作者 电石QwQ, 作者简介 不甘寂寞,相关视频:Python从入门到精通,整整498集(自动化、爬虫、AI、大数据),零基础手把手指导学习,全程干货,快速入门,学完即可就业!Python入门_python开发,王达峰(光哥)-从专业到管理:思维与能力双重跃迁(全15套),可视化大屏 附源码(Vue3 + TS + DataV + ECharts),2024年二级建造师管理建工社全国模考二建,基于yolov8的多端检测系统(客户端 & 网页端) 毕设 开源,yolov8客户端-简单修改,Python—4分钟快速制作一个管理平台,若依vue前后端分离版——服务器快速部署(https),Dijkstra算法[用处+代码讲解],Python—Fastapi与vue打包(管理平台)icon-default.png?t=N7T8https://www.bilibili.com/video/BV1hT421X7vo

一、配置多个表

1、后端项目改造

2、导包报错——需要修改(2个地方)

3、启动后端(查看是否有问题)

4、配置前端

二、打包——成exe文件(不包含static文件)简单

Static——可在浏览器中运行的静态文件

npm run build 的原理是利用 Vue CLI 的构建工具,

根据项目中配置的各种规则,将源代码转换成可在浏览器中运行的静态文件。

1、后端修改

# main.py绑定静态文件目录app.mount("/static", StaticFiles(directory='static'), name="static")system = APIRouter()@system.get("/")def index():return FileResponse(f"static/index.html")@app.get("/{catchall:path}")async def catch_all():return FileResponse(f"static/index.html")import randomimport socketdef get_unused_port():"""获取未被使用的端口"""while True:port = random.randint(1024, 65535)  # 端口范围一般为1024-65535sock = socket.socket(socket.AF_INET, socket.SOCK_STREAM)try:sock.bind(("localhost", port))sock.close()return portexcept OSError:passif __name__ == '__main__':port = get_unused_port()import uvicornuvicorn.run("__main__:app", reload=False, port=port)

2、前端修改

在打包时,把根路径修改为static

后端请求路径修改

const url = import.meta.env.VITE_BASE_URL + "/Route";

3、运行打包命令

pyinstaller main.py

三、打包——成exe文件(加入static文件,打包为单个文件)

单个文件——并且是客户端(本质上就是用webview去访问网页,看起来就像是客户端一样)

说简单的点:网页套了一个桌面端的壳子

1、后端修改

# main.py绑定静态文件目录app.mount("/static", StaticFiles(directory='static'), name="static")system = APIRouter()@system.get("/")def index():return FileResponse(f"static/index.html")@app.get("/{catchall:path}")async def catch_all():return FileResponse(f"static/index.html")import randomimport socketimport threadingimport webviewimport uvicorndef get_unused_port():"""获取未被使用的端口"""while True:port = random.randint(1024, 65535)  # 端口范围一般为1024-65535sock = socket.socket(socket.AF_INET, socket.SOCK_STREAM)try:sock.bind(("localhost", port))sock.close()return portexcept OSError:passport = get_unused_port()# 启动FastAPI服务t = threading.Thread(target=uvicorn.run, args=("__main__:app",), kwargs={"port": port, "reload": False})t.daemon = Truet.start()# 在PyWebview应用程序中加载FastAPI应用程序的URLwebview.create_window('Desktop', f'http://localhost:{port}')webview.start()

 

2、创建build.py(把下面的内容复制进去)

from PyInstaller import __main__ as pyiparams = ['-F',# static目录纳入打包'--add-data', 'static:static',# 每次打包前清楚build 和 dist目录'--clean',# 无需用户确认'--noconfirm','main.py']pyi.run(params)

3、静态文件路径修改

因为我们要把static文件夹里面的内容打包进去

static_file_abspath = os.path.join(os.path.dirname(__file__), "static")# main.py绑定静态文件目录app.mount("/static", StaticFiles(directory=static_file_abspath), name="static")system = APIRouter()@system.get("/")def index():return FileResponse(f"{static_file_abspath}/index.html")@app.get("/{catchall:path}")async def catch_all():return FileResponse(f"{static_file_abspath}/index.html")

四、动态配置数据库

这里是写死的(打包后就无法修改,那么就不太友好)

1、提取db.py

2、创建一个mysql_config.py(把下面内容复制进去)

# -*- coding: utf-8 -*-# @Author : pan# @Description : 本模块为数据库读取配置# @Date : 2024年4月30日10:48:01import jsonimport osfrom dataclasses import dataclass, asdict@dataclassclass MySQLConf:"""MySQL 连接配置信息类"""host: str = '127.0.0.1'   # MySQL 主机地址port: int = 3306          # MySQL 端口号user: str = 'root'        # MySQL 用户名password: str = '123456'  # MySQL 密码db: str= 'yolov8'         # 数据库名称charset: str = "utf8"     # 字符集,默认为 utf8def to_dict(self) -> dict:"""返回配置信息的 JSON 格式表示Returns:            dict: 配置信息的 JSON 格式表示"""return asdict(self)def read_json_config(self, file_path: str) -> dict:"""从 JSON 文件中读取配置信息并返回字典Args:        file_path (str): JSON 文件路径Returns:        dict: 包含配置信息的字典"""# 检查文件是否存在if not os.path.exists(file_path):# 如果文件不存在,则创建一个包含默认配置信息的 JSON 文件with open(file_path, "w") as file:json.dump(self.to_dict(), file, indent=4)# 读取配置文件with open(file_path, "r") as file:config_dict = json.load(file)return config_dictdef write_json_config(self, config_dict: dict, file_path: str):"""将配置信息写入 JSON 文件Args:        config_dict (dict): 包含配置信息的字典file_path (str): JSON 文件路径"""with open(file_path, "w") as file:json.dump(config_dict, file, indent=4)# 读取 JSON 文件并将其转换为字典if __name__ == '__main__':config_dict = MySQLConf().read_json_config("mysql_config.json")# 创建 MySQLConf 实例并解包配置信息mysql_conf = MySQLConf(**config_dict)# 打印 MySQLConf 的数据print(mysql_conf.to_dict())# 修改 MySQLConf 的数据mysql_conf.password = '123456'# 将字典写入 JSON 文件MySQLConf().write_json_config(mysql_conf.to_dict(), "mysql_config.json")

3、修改db.py的内容

from sqlmodel import create_enginefrom mysql_config import MySQLConfconfig_dict = MySQLConf().read_json_config("mysql_config.json")# 创建 MySQLConf 实例并解包配置信息mysql_conf = MySQLConf(**config_dict)db_uri = f"mysql+pymysql://" \f"{mysql_conf.user}:{mysql_conf.password}@" \f"{mysql_conf.host}:{mysql_conf.port}/{mysql_conf.db}?charset={mysql_conf.charset}"engine = create_engine(db_uri)

4、查看是否自动创建了mysql_config.json文件

五、参考内容(7y)

视频:

仅2分钟它就将Python Web制作成桌面程序_哔哩哔哩_bilibili先前写的FastAPI SQLModel 接口服务代码生成工具,计划提供桌面程序;https://pywebview.flowrl.com/;dfs-generate 计划提供桌面程序 https://github.com/zy7y/dfs-generate/issues/12, 视频播放量 5429、弹幕量 1、点赞数 57、投硬币枚数 26、收藏人数 161、转发人数 13, 视频作者 7y记, 作者简介 建议直接看官方文档;微信公众号:7y记,相关视频:为什么软件公司很少选择Python开发Web应用?,pywebio模块,Java搞web和Python搞web有什么区别,看情况用,python这是mybatis?,Python Web:《谷粒教育》前后端分离版,启动!,PyQt5界面美化,软件发布!Python自动化办公,桌面版1.0 | 免费下载 | 开放源码,Python tkinter 桌面程序开发 | ttkbootstrap 项目介绍(遇到问题请在评论区留言),FastAPI:10天用Python和Vue3写了个权限管理,Django前后端分离:部署前端打包文件icon-default.png?t=N7T8https://www.bilibili.com/video/BV1BT4y1s7kZ

文档:

FastAPI:打包成桌面程序 · 语雀本文涉及版本:node 18, python3.11F...icon-default.png?t=N7T8https://www.yuque.com/u1362970/url5b5/gd77my2aq0dn397o

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.rhkb.cn/news/319999.html

如若内容造成侵权/违法违规/事实不符,请联系长河编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

[论文笔记]Longformer: The Long-Document Transformer

引言 今天带来论文Longformer: The Long-Document Transformer的笔记。 基于Transformer的模型由于其自注意力操作而无法处理长序列,该操作随着序列长度呈二次扩展。为了解决这一限制,本篇工作提出了Longformer,其注意力机制随着序列长度呈…

批量邮箱API发送邮件的方法?如何使用API?

批量邮箱API发送邮件效率怎么样?API接口发信的优势? 批量发送邮件已经成为许多企业、机构或个人进行营销推广、信息传递的重要手段。然而,如何高效、准确地实现批量邮箱发送,却是许多人面临的难题。AokSend就来探讨一下利用API进…

Python基础学习之logging模块

在Python编程中,日志记录(Logging)是一个非常重要的功能。它不仅可以帮助我们追踪和调试代码中的错误,还可以记录程序运行时的关键信息,以便后续分析和优化。Python标准库中的logging模块为我们提供了强大的日志记录功…

C++从入门到精通——模板

模板 前言一、泛型编程二、函数模板函数模板的概念函数模板格式示例 函数模板的原理函数模板的实例化隐式实例化显式实例化示例 auto做模板函数的返回值模板参数的匹配原则总结 三、类模板类模板的定义格式类模板的实例化 前言 C模板是C语言中的一种泛型编程技术,可…

IDEA--debug

1. 单点调试的三个级别 Step into:在单步执行时,遇到子函数就进入并且继续单步执行。Step over:在单步执行时,在函数内遇到子函数时不会进入子函数内单步执行,而是将子函数整个执行完再停止,也就是把子函数…

【保姆级教程】用IDEA2023版本给RuoYi-Vue添加子模块

文章目录 前言添加子模块新建子模块新建子模块界面?新建子模块界面! 修改pom依赖配置RuoYiApplication添加测试接口配置接口权限测试 前言 若依前后端分离框架能够极大方便当前开发任务,并且使用的技术栈也相当丰富,但是目前只提…

ThingsBoard通知中心讲解

1、概述 2、案例 2.1、通知发送方式 2.2、发送通知 3、Templates模板 3.1、Add new template添加新模板 1、概述 ThingsBoard 通知中心是一个用于在平台内发送、管理和自动化通知的综合工具。它允许多种通知方法,包括网络、电子邮件、移动应用程序、短信以及与 …

基于SpringBoot+Vue点餐系统设计和实现(源码+LW+部署讲解)

🌹作者简介:✌全网粉丝10W,前大厂员工,多篇互联网电商推荐系统专利,现有多家创业公司,致力于建站、运营、SEO、网赚等赛道。也是csdn特邀作者、博客专家、Java领域优质创作者,博客之星、掘金/华…

go mod

常用命令 初始化模块 go mod init 模块名下载 go.mod 文件中指明的所有依赖 go mod download github.com/gin-gonic/ginv1.9.(依赖路径)依赖对其(使引用的都是所依赖的) go mod tidy编辑go.mod go mod edit go mod edit -require"github.com/g…

哪个品牌的骨传导耳机好用?精选五大高性能热门骨传导耳机款式推荐!

我作为一名热衷于音乐的数码博主,在选购产品前也习惯于先浏览各种榜单。最近,我发现关于骨传导耳机的讨论热度极高,有人认为骨传导耳机是非常值得入手的新型蓝牙耳机,也有人认为骨传导耳机只是智商税的产品。经过深入调查后&#…

【计算机网络】FTP站点配置搭建教程以及相关问题解决方案(超详细)

文章目录 1、安装Window Server 20082、搭建FTP环境(1)安装FTP服务器(2)配置FTP服务器(3)测试FTP连接 3、遇到的问题以及解决方案(1)Windows无法访问此文件夹(2&#xff…

Android Ant编译环境配置(Win)

1、 载ant包: 2、设置环境变量: 3、检查是否设置成功及版本 4、执行命令: android update project -p . -n “projectname”(例如:android update project --target 1 -p . -n “Couplet”)(只输入红色部分也是可以的…

AC/DC电源模块的高效能源管理与效率优化

BOSHIDA AC/DC电源模块的高效能源管理与效率优化 AC/DC电源模块是一种常见的电源转换装置,用于将交流电转换为直流电。它被广泛应用于各种电子设备中,如计算机、通信设备、工业自动化设备等。在现代化的科技社会中,高效能源管理和效率优化变…

swift微调多模态大语言模型

微调训练数据集指定方式的问题请教 Issue #813 modelscope/swift GitHubQwen1.5微调训练脚本中,我用到了--dataset new_data.jsonl 这个选项, 可以训练成功,但我看文档有提到--custom_train_dataset_path这个选项,这两个有什么…

​可视化大屏C位图:3D模型,可视化大屏的画龙点睛之处

Hello,我是大千UI工场,本期可视化大屏的焦点图(C位)分享将图表作为焦点图的情形,欢迎友友们关注、评论,如果有订单可私信。 3D模型在可视化大屏中有很大的价值,以下是一些相关的优点&#xff1a…

基于springboot实现在线考试系统项目【项目源码+论文说明】计算机毕业设计

基于springboot实现在线考试系统演示 摘要 使用旧方法对在线考试系统的信息进行系统化管理已经不再让人们信赖了,把现在的网络信息技术运用在在线考试系统的管理上面可以解决许多信息管理上面的难题,比如处理数据时间很长,数据存在错误不能及…

leetcode 1235

leetcode 1235 代码 class Solution { public:int jobScheduling(vector<int>& startTime, vector<int>& endTime, vector<int>& profit) {int n startTime.size();vector<vector<int>> jobs(n);for(int i0; i<n; i){jobs[i] …

JuiceFS v1.2-beta1,Gateway 升级,多用户场景权限管理更灵活

JuiceFS v1.2-beta1 今天正式发布。在这个版本中&#xff0c;除了进行了大量使用体验优化和 bug 修复外&#xff0c;新增三个特性&#xff1a; Gateway 功能扩展&#xff1a;新增了“身份和访问管理&#xff08;Identity and Access Management&#xff0c;IAM&#xff09;” 与…

JAVA面试专题-框架篇(Spring+Mybatis)

Spring Spring框架中的单例bean是线程安全的吗&#xff1f; bean上面可以加入注解Scope&#xff0c;如果是singleton&#xff08;默认&#xff09;&#xff0c;意味着bean在每个spring IOC容器中只有一个实例&#xff1b;如果是prototype&#xff0c;说明一个bean定义可以有多…

Centos上通过Docker安装ES管理端kibana

系列文章目录 文章目录 系列文章目录前言 前言 前些天发现了一个巨牛的人工智能学习网站&#xff0c;通俗易懂&#xff0c;风趣幽默&#xff0c;忍不住分享一下给大家。点击跳转到网站&#xff0c;这篇文章男女通用&#xff0c;看懂了就去分享给你的码吧。 Elasticsearch 是一…