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

news2024/11/18 1:51:46

目录

一、配置多个表

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

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

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

VMare Workstation安装ubuntu虚拟机异常问题处理

安装方法 ubuntu官网下载插件 异常处理 开启时报错"unable to proceed without a log file" 遇到此问题的都有一个共同点,工作目录路径上都带了数字,比如"Ubuntu 64位 01",解决方法为: 选中"Ubuntu 64位…

mybatis-generator之一键生成:两种方法

前提使用版本为&#xff1a;jdk-1.8、mysql-8.0、maven-3.9.4 方法一 一、创建项目 二、进入pom&#xff0c;导入依赖 这里的依赖只是要用到的两个基本依赖&#xff0c;能实现功能 <?xml version"1.0" encoding"UTF-8"?> <project xmlns&qu…

数组进了多个obj,但是 在修改某个num值时,导致别的num值也发生了变化如何解决?

问题如下&#xff1a; 遇到的问题&#xff0c;数组monthArr1 push进了多个obj,但是 在修改某个num值时&#xff0c;导致别的num值也发生了变化。 而这就是深拷贝浅拷贝的问题。 解决浅拷贝使用深拷贝最简单方法 &#xff1a;JSON.parse(JSON.stringify(obj)) 或者: 使用深拷…

人工智能应用正在改变我们的生活

在这个AI蓬勃发展的时代&#xff0c;你如何使用人工智能&#xff1f;如果您认为还没有&#xff0c;请再想一想。人工智能已经为我们的许多日常活动提供了动力&#xff0c;尽管您可能还没有有意将其用作工具&#xff0c;但这种情况可能会在不久的将来发生变化。随着顶尖科技公司…

【ElementUI -- 优化小技巧系列】 -- el-tree 节点内容过长优化 以及选中默认节点

在使用elementui过程中经常碰到关于样式的问题&#xff0c;我曾经很喜欢通过类名修改css样式来做&#xff0c;其实原生封装的elementui库的样式对于普通开发来说已经足够了&#xff0c;通过类名修改css只会让组件臃肿难以维护&#xff0c;现在真的越来越怕写css&#xff0c;经常…

eBay、亚马逊、沃尔玛平台如何做测评:专业指南

在电子商务领域&#xff0c;产品测评扮演着至关重要的角色。无论是eBay、亚马逊还是沃尔玛&#xff0c;这些电商平台都依赖于用户评价和反馈来建立信任&#xff0c;推动销售&#xff0c;并优化用户体验。然而&#xff0c;如何在这些平台上进行有效的产品测评&#xff0c;对于卖…

自然语言处理(NLP)技术有哪些运用?

目录 一、自然语言处理&#xff08;NLP&#xff09;技术有哪些运用&#xff1f; 二、Python进行文本的情感分析 1、NLTK库: 2、TextBlob库: 三、错误排除 一、自然语言处理&#xff08;NLP&#xff09;技术有哪些运用&#xff1f; 自然语言处理&#xff08;NLP&#xff09…

堆的基本操作(c语言实现)

1.堆的基本操作 1.1定义堆 typedef int HPDataType;//堆中存储数据的类型typedef struct Heap {HPDataType* a;//用于存储数据的数组int size;//记录堆中已有元素个数int capacity;//记录堆的容量 }HP;1.2初始化堆 然后我们需要一个初始化函数&#xff0c;对刚创建的堆进行初…

Wappalyzer指纹识别下载安装使用教程,图文教程(超详细)

「作者简介」&#xff1a;2022年北京冬奥会网络安全中国代表队&#xff0c;CSDN Top100&#xff0c;就职奇安信多年&#xff0c;以实战工作为基础对安全知识体系进行总结与归纳&#xff0c;著作适用于快速入门的 《网络安全自学教程》&#xff0c;内容涵盖系统安全、信息收集等…

element输入框后面带输入的字符数量

使用el-input的属性&#xff1a; maxlength&#xff1a;最长字符限制&#xff1b; show-word-limit&#xff1a;显示输入字符数量&#xff1b; 例&#xff1a; js代码&#xff1a; <el-form-item label"文件名称: " prop"title"> <el-input v…

揭秘APP搭建:如何对接广告变现?

在移动应用&#xff08;App&#xff09;的开发与运营中&#xff0c;广告对接和流量变现是重要的环节。对于开发者而言&#xff0c;如何有效地利用自己的应用资源进行变现&#xff0c;同时又能提供用户良好的体验&#xff0c;是一个值得深入探讨的话题。以下便是关于App搭建如何…

如何训练一个非常像的真人LoRA

在本篇文章中&#xff0c;我们将探索如何训练一个能够将喜爱的人物置入任何场景中并实现高度一致性的LoRA模型。借助LoRA&#xff0c;我们能够创造出极为逼真的人物图像&#xff0c;就如同我为斯嘉丽训练的LoRA模型所展示的那样。 那么&#xff0c;让我们一起深入了解如何训练L…

基于Go编写一个人员管理系统案例

代码结构 人员结构体 package entity// 结构体&#xff1a;人 type Person struct {Id intName stringSex stringAge int }// 构造函数 func NewPerson(id int, name, sex string, age int) *Person {return &Person{Id: id,Name: name,Sex: sex,Age: age,} }人员…

揭秘豆瓣网站爬虫:利用lua-resty-request库获取图片链接

介绍 在网络数据采集领域&#xff0c;爬虫技术在图片获取方面具有广泛的应用。而豆瓣网站作为一个内容丰富的综合性平台&#xff0c;其图片资源也是广受关注的热点之一。本文将聚焦于如何利用Lua语言中的lua-resty-request库&#xff0c;高效地从豆瓣网站获取图片链接。我们将…

基于Django图像识别系统毕业设计(付源码)

前言&#xff1a;Django是一个由Python编写的具有完整架站能力的开源Web框架&#xff0c;Django本身基于MVC模型&#xff0c;即Model&#xff08;模型&#xff09;View&#xff08;视图&#xff09; Controller&#xff08;控制器&#xff09;设计模式&#xff0c;因此天然具有…

智慧旅游推动旅游服务智慧化转型:借助智能科技的力量,实现旅游资源的精准匹配和高效利用,为游客提供更加便捷、舒适的旅游环境

目录 一、引言 二、智慧旅游的定义与特点 &#xff08;一&#xff09;智慧旅游的定义 &#xff08;二&#xff09;智慧旅游的特点 三、智能科技在旅游服务中的应用 &#xff08;一&#xff09;大数据分析助力旅游决策 &#xff08;二&#xff09;人工智能实现个性化推荐…

Nginx配置/.well-known/pki-validation/

当你需要在Nginx上配置.well-known/pki-validation/时&#xff0c;这通常是为了支持SSL证书的自动续订或其他验证目的。以下是配置步骤&#xff1a; 创建目录结构&#xff1a; 在你的网站根目录下创建一个名为.well-known的目录&#xff08;SSL证书申请之如何创建/.well-known/…

第二证券|炒股是波段好还是长期好?

炒股长时间比波段好一些&#xff0c;其原因如下&#xff1a; 1、长时间持有费用低 投资者在生意过程中&#xff0c;需求交纳必定的佣金费用、过户费用、印花税&#xff0c;而长时间持有股票&#xff0c;减少生意次数&#xff0c;能够节省一笔生意成本。 2、短期持有容易卖飞…

喜讯!莱佛士学生成功入围2024C-IDEA设计奖提名

近日&#xff0c;由澳大利亚平面设计协会、韩国视觉信息设计协会、波兰波兹南设计节、日本字体设计协会&#xff08;JTA&#xff09;、俄罗斯设计师协会、中国台湾高雄广告创意协会多家不同的国际设计机构联合发起组织的国际性设计赛事—— C-IDEA设计奖&#xff0c;公布了2024…