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 random

import socket

def get_unused_port():

    """获取未被使用的端口"""

    while True:

        port = random.randint(1024, 65535)  # 端口范围一般为1024-65535

        sock = socket.socket(socket.AF_INET, socket.SOCK_STREAM)

        try:

            sock.bind(("localhost", port))

            sock.close()

            return port

        except OSError:

            pass



if __name__ == '__main__':

    port = get_unused_port()

    import uvicorn

    uvicorn.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 random

import socket

import threading

import webview

import uvicorn





def get_unused_port():

    """获取未被使用的端口"""

    while True:

        port = random.randint(1024, 65535)  # 端口范围一般为1024-65535

        sock = socket.socket(socket.AF_INET, socket.SOCK_STREAM)

        try:

            sock.bind(("localhost", port))

            sock.close()

            return port

        except OSError:

            pass





port = get_unused_port()

# 启动FastAPI服务

t = threading.Thread(target=uvicorn.run, args=("__main__:app",), kwargs={"port": port, "reload": False})

t.daemon = True

t.start()



# 在PyWebview应用程序中加载FastAPI应用程序的URL

webview.create_window('Desktop', f'http://localhost:{port}')

webview.start()

 

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

from PyInstaller import __main__ as pyi


params = [

    '-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:01



import json

import os

from dataclasses import dataclass, asdict





@dataclass

class 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"     # 字符集,默认为 utf8



    def 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_dict



    def 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_engine



from mysql_config import MySQLConf



config_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

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

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

5 Spring 事务管理

目录 1.概述 2.事务特性:ACID 3.Spring 框架的事务管理支持两种方式 编程式事务 申明式事务 4.Spring 事务管理 API 事务管理器接口 Spring 的回滚方式 事务定义接口 事务的四种隔离级别 事务的七种传播行为 5.事务注解例子: Transactianal…

中间件之异步通讯组件RabbitMQ进阶

这里我们必须尽可能确保MQ消息的可靠性,即:消息应该至少被消费者处理1次 那么问题来了: 我们该如何确保MQ消息的可靠性? 如果真的发送失败,有没有其它的兜底方案? 首先,我们一起分析一下消息…

多模态大模型MLLM VIT CLIP BLIP

一、Vit模型介绍 Vit(Vision Transformer)即将Transformer应用于视觉领域。 Transformer输入输出都是一个序列,若需要应用于视觉领域,则需要考虑如何将一个2d图片转化为一个1d的序列,最直观的想法将图片中的像素点输…

Logit Standardization in Knowledge Distillation 知识蒸馏中的logit标准化

摘要 知识蒸馏涉及使用基于共享温度的softmax函数将软标签从教师转移到学生。然而,教师和学生之间共享温度的假设意味着他们的logits在logit范围和方差方面必须精确匹配。这种副作用限制了学生的表现,考虑到他们之间的能力差异,以及教师天生…

旺店通·企业奇门和金蝶云星空单据接口对接

旺店通企业奇门和金蝶云星空单据接口对接 源系统:金蝶云星空 金蝶K/3Cloud(金蝶云星空)是移动互联网时代的新型ERP,是基于WEB2.0与云技术的新时代企业管理服务平台。金蝶K/3Cloud围绕着“生态、人人、体验”,旨在帮助企业打造面向…

Web3 ETF软件开发

开发Web3 ETF软件涉及到金融、法律和技术等多个领域的专业知识,因此存在以下技术难点,开发Web3 ETF软件是一项复杂的技术挑战,需要综合考虑各种因素。开发人员需要具备较强的技术能力和跨学科知识才能成功开发Web3 ETF软件。北京木奇移动技术…

解决$‘\r‘: command not found 或syntax error near unexpected token `$‘\r‘的四个方法

问题原因: 两个报错原因都是Linux和windows下的回车换行符不兼容 解决方法: 方法一:在windows系统可以用文本编辑器查看所有字符,例如notepad,编辑->档案格式转换->转换为UNIX格式 方法二:在Linux系…

uniapp读取项目本地文件/json文件/txt文件

uniapp读取项目本地文件/json文件/txt文件 文件必须放在static目录下 方法: /*** 访问static里面的文件* param url 文件路径 必须在static目录下*/ function localFetch(url) {return new Promise((resolve, reject) > {plus.io.resolveLocalFileSystemURL(_ww…

【LeetCode】链表oj专题

前言 经过前面的学习,咋们已经学完了链表相关知识,这时候不妨来几道链表算法题来巩固一下吧! 如果有不懂的可翻阅之前文章哦! 个人主页:小八哥向前冲~-CSDN博客 数据结构专栏:数据结构【c语言版】_小八哥…

HCIP-Datacom-ARST必选题库_OSPF【道题】

某工程师利用2台路由器进行IPv6测试,他想要通过运行OSPFv3实现IPv6网络的互联互通。关于R1需要进行的OSPPv3相关配置,正确的有? [R1] router id 10.1.1.1A [R1-Giqabi tEthernet0/0/1] ospfv3 1 area 0 [R1-ospfv3-11 router-id 10.1.1.1 [R1-ospfv3…

AcWing 835:Trie字符串统计 ← 字典树(Trie树)模板题

【题目来源】https://www.acwing.com/problem/content/837/【题目描述】 维护一个字符串集合,支持两种操作: ● I x 向集合中插入一个字符串 x; ● Q x 询问一个字符串在集合中出现了多少次。 共有 N 个操作,所有输入的字符…

【JAVA】类加载过程,以及类加载器

类加载过程,以及类加载器 一、类加载的过程二、类加载器介绍三、跨类加载三、举例说明 一、类加载的过程 类加载是Java虚拟机(JVM)将类文件加载到内存中并转换成对应的类对象的过程。它确保了类文件能够正确加载并转换成可执行的类对象&…

SpringSecurity源码分析(RemeberMe)

RememberMeServices RememberMeServices 记住我的服务的接口 可以重写实现自己的记住我 public interface RememberMeServices { //建议 org. springframework. security. authentication. RememberMeAuthenticationToken 在大多数情况下使用它,因为它具有相应的身份…

如何在您的WordPress网站上安装和设置Yoast seo?

本周有一个客户,购买Hostease的虚拟主机,询问我们的在线客服,如何在您的WordPress网站上安装和设置Yoast seo?我们为用户提供相关教程,用户很快解决了遇到的问题。在此,我们分享这个操作教程,希望可以对您…

如何利用AI技术提升内容生产的效率和质量

目录 前言1 自动化内容生成1.1 文章生成1.2 视频制作1.3 音频合成 2 内容分发与推广2.1 智能内容推荐2.2 社交媒体管理 3 内容分析与优化3.1 用户反馈分析3.2 内容效果评估 结语 前言 在当今数字化时代,人工智能(AI)技术对内容生产、分发和优…

Linux:进程通信(三)信号的捕捉

目录 一、信号捕捉函数 1、signal函数 2、sigaction函数 二、用户态与内核态 1、用户态 2、内核态 用户态与内核态转换 三、volatile关键字 四、SIGCHLD信号 一、信号捕捉函数 1、signal函数 signal函数是C语言标准库中的一个函数,用于处理Unix/Linux系…

数据结构——二叉排序树

懒猫老师-数据结构-(58)二叉排序树的删除(二叉查找树)_哔哩哔哩_bilibili 概念 (1)若它的左子树不空,则左子树上所有结点的值均小于根结点的值; (2)若它的右子树不空,则右子树上所有结点的值均大于根结点的值; (3)它的左右子树也都是二叉排序树。 通…

顶级开源Kubernetes管理工具有哪些?好用Kubernetes工具推荐

Kubernetes已经成为容器编排领域颠覆性的技术,而充满活力的开源社区是其成功背后的推动力。本文将为大家推荐好用的Kubernetes工具,围绕Kubernetes发展的生态系统的广度和深度。 从自动化和监控到网络和安全性,这些工具为管理容器化应用程序…

Python入门到精通,一个月就够了!前字节大佬超详细系统学习路线

毫无疑问,Python 是当下最火的编程语言之一。 对于许多未曾涉足计算机编程的领域「小白」来说,深入地掌握 Python 看似是一件十分困难的事。 感觉很迷茫?学了一段时间还是不入流?很大一部分原因是因为你没有一个完整的知识体系&…

WebSocket 来单提醒和客户催单功能

一:WebSocket : WebSocket 是基于 TCP 的一种新的网络协议。它实现了浏览器与服务器全双工通信——浏览器和服务器只需要完成一次握手,两者之间就可以创建持久性的连接, 并进行双向数据传输。 HTTP协议和WebSocket协议对比&#…