SpringCloud+Vue+Python人工智能(fastAPI,机器学习,深度学习)前后端架构各功能实现思路——主目录(持续更新)

python后台vue3前端构建网站最简单示范 构建一个简单的网站样本程序,使用 Vue 3 作为前端框架,Python 的 FastAPI 作为后端 API。 阅读详情
AI摘要

随着业务增加,需Java与Python人工智能配合架构。本文分享架构通用逻辑,包括Java后端SpringCloud架构,如第三方包安装配置、核心架构搭建等;Python后端FastAPI架构;以及Vue3.0前端架构,涉及后台系统环境搭建、登录和权限管理模块前端实现。

随着业务的增加,需要一个java+python人工智能相互配合架构,正常网站业务用java来做,而ai,例如电价预测等回归任务,以及大模型预测全网负荷,新能源出力等任务,使用python通过fastapi暴露接口来做,那么就需要springcloud架构注册发现。前端统一使用Vue进行效果的展示


因此本文会将我的解决思路中,关于架构(不涉及核心业务代码)的通用逻辑分享给大家


一、java后端SpringCloud架构

1. 必要的需要单独下载的第三方包

1.1 安装启动

1. nacos,阿里巴巴开源的服务注册中心:https://github.com/alibaba/nacos/tags,点进去下载nacos-server.zip压缩包解压缩即可(注意不要下载源码)



在这里插入图片描述


在这里插入图片描述


解压后进入bin目录,打开cmd窗口,输入命令.\startup.cmd -m standalone(其中,-m standalone表示单机启动,因为目前没有集群)


在这里插入图片描述


在这里插入图片描述


进入其给出的地址,即可进入可视化界面


在这里插入图片描述


2. seata,做数据一致性的强大工具,因为分布式服务对数据一致性的要求很高:https://seata.apache.org/zh-cn


在这里插入图片描述


2.2之前的版本,直接进入bin目录下双击seata-server.bat运行即可


在这里插入图片描述


2.2版本,先进入seata-server,然后进入bin目录运行seata-server.bat


在这里插入图片描述


在这里插入图片描述

3. redis,大佬请进!redis大佬的知名度就不用过多介绍了吧,https://github.com/tporadowski/redis/releases


在这里插入图片描述


解压后,双击redis-server.exe运行即可


在这里插入图片描述

1.2 配置

1. 进入seata官网,进入文档,配置中心章节中,有Nacos配置中心,文档中给出了配置文件应该怎么配置,并给出了配置文件的github地址


在这里插入图片描述


在这里插入图片描述


2. nacos配置中心新增配置seataServer.properties,将上面复制的内容粘贴过去,并修改数据库相关的配置


在这里插入图片描述

#For details about configuration items, see https://seata.io/zh-cn/docs/user/configurations.html
#Transport configuration, for client and server
transport.type=TCP
transport.server=NIO
transport.heartbeat=true
transport.enableTmClientBatchSendRequest=false
transport.enableRmClientBatchSendRequest=true
transport.enableTcServerBatchSendResponse=false
transport.rpcRmRequestTimeout=30000
transport.rpcTmRequestTimeout=30000
transport.rpcTcRequestTimeout=30000
transport.threadFactory.bossThreadPrefix=NettyBoss
transport.threadFactory.workerThreadPrefix=NettyServerNIOWorker
transport.threadFactory.serverExecutorThreadPrefix=NettyServerBizHandler
transport.threadFactory.shareBossWorker=false
transport.threadFactory.clientSelectorThreadPrefix=NettyClientSelector
transport.threadFactory.clientSelectorThreadSize=1
transport.threadFactory.clientWorkerThreadPrefix=NettyClientWorkerThread
transport.threadFactory.bossThreadSize=1
transport.threadFactory.workerThreadSize=default
transport.shutdown.wait=3
transport.serialization=seata
transport.compressor=none

#Transaction routing rules configuration, only for the client
service.vgroupMapping.default_tx_group=default
#If you use a registry, you can ignore it
service.default.grouplist=127.0.0.1:8091
service.enableDegrade=false
service.disableGlobalTransaction=false

#Transaction rule configuration, only for the client
client.rm.asyncCommitBufferLimit=10000
client.rm.lock.retryInterval=10
client.rm.lock.retryTimes=30
client.rm.lock.retryPolicyBranchRollbackOnConflict=true
client.rm.reportRetryCount=5
client.rm.tableMetaCheckEnable=true
client.rm.tableMetaCheckerInterval=60000
client.rm.sqlParserType=druid
client.rm.reportSuccessEnable=false
client.rm.sagaBranchRegisterEnable=false
client.rm.sagaJsonParser=fastjson
client.rm.tccActionInterceptorOrder=-2147482648
client.tm.commitRetryCount=5
client.tm.rollbackRetryCount=5
client.tm.defaultGlobalTransactionTimeout=60000
client.tm.degradeCheck=false
client.tm.degradeCheckAllowTimes=10
client.tm.degradeCheckPeriod=2000
client.tm.interceptorOrder=-2147482648
client.undo.dataValidation=true
client.undo.logSerialization=jackson
client.undo.onlyCareUpdateColumns=true
server.undo.logSaveDays=7
server.undo.logDeletePeriod=86400000
client.undo.logTable=undo_log
client.undo.compress.enable=true
client.undo.compress.type=zip
client.undo.compress.threshold=64k
#For TCC transaction mode
tcc.fence.logTableName=tcc_fence_log
tcc.fence.cleanPeriod=1h

#Log rule configuration, for client and server
log.exceptionRate=100

#Transaction storage configuration, only for the server. The file, db, and redis configuration values are optional.
store.mode=file
store.lock.mode=file
store.session.mode=file
#Used for password encryption
store.publicKey=

#If `store.mode,store.lock.mode,store.session.mode` are not equal to `file`, you can remove the configuration block.
store.file.dir=file_store/data
store.file.maxBranchSessionSize=16384
store.file.maxGlobalSessionSize=512
store.file.fileWriteBufferCacheSize=16384
store.file.flushDiskMode=async
store.file.sessionReloadReadSize=100

#These configurations are required if the `store mode` is `db`. If `store.mode,store.lock.mode,store.session.mode` are not equal to `db`, you can remove the configuration block.
store.db.datasource=druid
store.db.dbType=mysql
store.db.driverClassName=com.mysql.cj.jdbc.Driver
store.db.url=jdbc:mysql://127.0.0.1:3306/yd_oa_db?serverTimeZone=GMT%2B8&useUnicode=true&rewriteBatchedStatements=true
store.db.user=root
store.db.password=root
store.db.minConn=5
store.db.maxConn=30
store.db.globalTable=global_table
store.db.branchTable=branch_table
store.db.distributedLockTable=distributed_lock
store.db.queryLimit=100
store.db.lockTable=lock_table
store.db.maxWait=5000

#These configurations are required if the `store mode` is `redis`. If `store.mode,store.lock.mode,store.session.mode` are not equal to `redis`, you can remove the configuration block.
store.redis.mode=single
store.redis.single.host=127.0.0.1
store.redis.single.port=6379
store.redis.sentinel.masterName=
store.redis.sentinel.sentinelHosts=
store.redis.sentinel.sentinelPassword=
store.redis.maxConn=10
store.redis.minConn=1
store.redis.maxTotal=100
store.redis.database=0
store.redis.password=
store.redis.queryLimit=100

#Transaction rule configuration, only for the server
server.recovery.committingRetryPeriod=1000
server.recovery.asynCommittingRetryPeriod=1000
server.recovery.rollbackingRetryPeriod=1000
server.recovery.timeoutRetryPeriod=1000
server.maxCommitRetryTimeout=-1
server.maxRollbackRetryTimeout=-1
server.rollbackFailedUnlockEnable=false
server.distributedLockExpireTime=10000
server.xaerNotaRetryTimeout=60000
server.session.branchAsyncQueueSize=5000
server.session.enableBranchAsyncRemove=false
server.enableParallelRequestHandle=false

#Metrics configuration, only for the server
metrics.enabled=false
metrics.registryType=compact
metrics.exporterList=prometheus
metrics.exporterPrometheusPort=9898

2. springCloud核心架构搭建

如果使用maven引入包后,写代码依然无法找到包,或者莫名其妙报错的,可以先指向Lifecycle中的clean,然后执行install


在这里插入图片描述


在这里插入图片描述


还不行就点一下刷新Maven依赖按钮


在这里插入图片描述

2.1 根目录pom文件

1. 新建一个空项目,新建src文件夹,然后创建pom.xml文件


在这里插入图片描述


2. 根目录的pom主要是引入全局依赖的版本控制,根目录也是我们的父工程,而我们的父工程也需要有一个父工程,就是spring-boot-starter-parent。子模块引入jar包时,无需手动指定版本,根目录pom统一控制


在这里插入图片描述


3. 同时我们要将通用的jar包控制起来,每个子模块若有差异化,就不配置在父工程(请以给出代码为主,图片仅供参考,日后如果修改,不会改图片,只会改给出的代码)


在这里插入图片描述

<?xml version="1.0" encoding="UTF-8"?>

<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
         xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
    <modelVersion>4.0.0</modelVersion>
<!--    指定父工程为spring-boot-starter-parent -->
    <parent>
        <groupId>org.springframework.boot</groupId>
        <artifactId>spring-boot-starter-parent</artifactId>
        <version>2.7.18</version>
        <relativePath/>
    </parent>
<!--    我们自己的父工程groupID  -->
    <groupId>com.yd_oa_java_cloud.cloud</groupId>
<!--    指定自己名字,我们的的坐标就是父工程groupId加上自己的artifactId ,当前跟目录的父工程就是spring-boot-starter-parent-->
    <artifactId>yd_oa_java_cloud</artifactId>
    <version>1.0</version>
    <packaging>pom</packaging>
<!--父工程的子模块-->
    <modules>

    </modules>

<!--统一管理jar包版本-->
    <properties>
        <project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
        <maven.compiler.source>1.8</maven.compiler.source>
        <maven.compiler.target>1.8</maven.compiler.target>
        <skipTests>true</skipTests>

        <springboot.version>2.7.18</springboot.version>
        <spring-cloud.version>2021.0.6</spring-cloud.version>
        <spring-cloud-alibaba.version>2021.0.5.0</spring-cloud-alibaba.version>
        <spring-openfeign.version>2.2.2.RELEASE</spring-openfeign.version>
        <spring-cloud-gateway.version>3.1.9</spring-cloud-gateway.version>

        <mybatis.version>1.3.2</mybatis.version>
        <logback.version>1.2.10</logback.version>
        <mysql.version>8.0.23</mysql.version>
        <aspectjweaver.version>1.9.3</aspectjweaver.version>
        <fastjson.version>1.2.83</fastjson.version>
        <commons.lang3.version>3.4</commons.lang3.version>
        <commons.csv.version>1.2</commons.csv.version>
        <commons.codec.version>1.9</commons.codec.version>
        <commons.io.version>2.5</commons.io.version>
        <feign-okhttp.version>10.2.0</feign-okhttp.version>
        <okhttp3.version>4.12.0</okhttp3.version>
        <lombok.version>1.18.22</lombok.version>
        <captcha.verion>1.6.2</captcha.verion>
        <es.version>3.3.2</es.version>
    </properties>
<!--锁定jar包版本-->
    <dependencyManagement>
        <dependencies>
            <dependency>
                <groupId>org.springframework.boot</groupId>
                <artifactId>spring-boot-starter-web</artifactId>
                <version>${springboot.version}</version>
                <exclusions>
                    <exclusion>
                        <groupId>ch.qos.logback</groupId>
                        <artifactId>logback-classic</artifactId>
                    </exclusion>
                    <exclusion>
                        <groupId>ch.qos.logback</groupId>
                        <artifactId>logback-core</artifactId>
                    </exclusion>
                </exclusions>
            </dependency>

            <dependency>
                <groupId>org.springframework.cloud</groupId>
                <artifactId>spring-cloud-dependencies</artifactId>
                <version>${spring-cloud.version}</version>
                <type>pom</type>
                <scope>import</scope>
            </dependency>

            <!-- SpringCloud Alibaba 微服务 -->
            <dependency>
                <groupId>com.alibaba.cloud</groupId>
                <artifactId>spring-cloud-alibaba-dependencies</artifactId>
                <version>${spring-cloud-alibaba.version}</version>
                <type>pom</type>
                <scope>import</scope>
            </dependency>

            <dependency>
                <groupId>org.springframework.cloud</groupId>
                <artifactId>spring-cloud-starter-openfeign</artifactId>
                <version>${spring-openfeign.version}</version>
            </dependency>

            <!--网关-->
            <dependency>
                <groupId>org.springframework.cloud</groupId>
                <artifactId>spring-cloud-starter-gateway</artifactId>
                <version>${spring-cloud-gateway.version}</version>
            </dependency>


            <!--seata-->
            <dependency>
                <groupId>com.alibaba.cloud</groupId>
                <artifactId>spring-cloud-starter-alibaba-seata</artifactId>
                <version>2021.0.5.0</version>
                <exclusions>
                    <exclusion>
                        <groupId>io.seata</groupId>
                        <artifactId>seata-spring-boot-starter</artifactId>
                    </exclusion>
                    <exclusion>
                        <groupId>io.seata</groupId>
                        <artifactId>seata-all</artifactId>
                    </exclusion>
                    <exclusion>
                        <groupId>org.springframework.boot</groupId>
                        <artifactId>spring-boot-starter-aop</artifactId>
                    </exclusion>
                </exclusions>
            </dependency>

            <dependency>
                <groupId>org.springframework.boot</groupId>
                <artifactId>spring-boot-starter-aop</artifactId>
                <version>2.7.18</version>
            </dependency>
            <!--springboot 集成seata-->
            <dependency>
                <groupId>io.seata</groupId>
                <artifactId>seata-spring-boot-starter</artifactId>
                <version>1.6.1</version>
            </dependency>

            <dependency>
                <groupId>org.mybatis.spring.boot</groupId>
                <artifactId>mybatis-spring-boot-starter</artifactId>
                <version>${mybatis.version}</version>
            </dependency>


            <!-- 数据库-->
            <dependency>
                <groupId>mysql</groupId>
                <artifactId>mysql-connector-java</artifactId>
                <version>${mysql.version}</version>
            </dependency>

            <!-- 日志版本 -->
            <dependency>
                <groupId>ch.qos.logback</groupId>
                <artifactId>logback-classic</artifactId>
                <version>${logback.version}</version>
            </dependency>
            <dependency>
                <groupId>ch.qos.logback</groupId>
                <artifactId>logback-core</artifactId>
                <version>${logback.version}</version>
            </dependency>

            <!--切面-->
            <dependency>
                <groupId>org.aspectj</groupId>
                <artifactId>aspectjweaver</artifactId>
                <version>${aspectjweaver.version}</version>
            </dependency>

            <!--okhttp-->
            <dependency>
                <groupId>com.squareup.okhttp3</groupId>
                <artifactId>okhttp</artifactId>
                <version>${okhttp3.version}</version>
            </dependency>

            <!--fastjson-->
            <dependency>
                <groupId>com.alibaba</groupId>
                <artifactId>fastjson</artifactId>
                <version>${fastjson.version}</version>
            </dependency>

            <!--apache common-->
            <dependency>
                <groupId>org.apache.commons</groupId>
                <artifactId>commons-csv</artifactId>
                <version>${commons.csv.version}</version>
            </dependency>

            <dependency>
                <groupId>org.apache.commons</groupId>
                <artifactId>commons-lang3</artifactId>
                <version>${commons.lang3.version}</version>
            </dependency>

            <dependency>
                <groupId>commons-codec</groupId>
                <artifactId>commons-codec</artifactId>
                <version>${commons.codec.version}</version>
            </dependency>

            <dependency>
                <groupId>commons-io</groupId>
                <artifactId>commons-io</artifactId>
                <version>${commons.io.version}</version>
            </dependency>

            <dependency>
                <groupId>org.springframework.boot</groupId>
                <artifactId>spring-boot-starter-data-redis</artifactId>
                <version>${springboot.version}</version>
            </dependency>

            <dependency>
                <groupId>org.projectlombok</groupId>
                <artifactId>lombok</artifactId>
                <version>${lombok.version}</version>
            </dependency>

            <dependency>
                <groupId>org.springframework.boot</groupId>
                <artifactId>spring-boot-starter-data-elasticsearch</artifactId>
                <version>${es.version}</version>
            </dependency>

            <dependency>
                <groupId>com.github.whvcse</groupId>
                <artifactId>easy-captcha</artifactId>
                <version>${captcha.verion}</version>
            </dependency>

        </dependencies>
    </dependencyManagement>
</project>

2.2 base模块

base模块和common都是公用的,但是为了避免包的冲突,所以搞两个。base是最基础的包,是给网关gateway使用的,而gateway和web包是冲突的。而common是给业务子模块使用的,它可以引入base,然后额外引入web包,给业务模块使用。

1. 建立base子模块,并建立pom.xml文件


在这里插入图片描述


2. 建立src\main\java文件夹,将java标识为source文件夹


在这里插入图片描述


3. 新建在main文件夹下,java文件夹同级,建立resources文件夹,标识为Resources Root


在这里插入图片描述


4. 编写pom.xml文件,然后将模块加到父模块中


在这里插入图片描述


在这里插入图片描述


<?xml version="1.0" encoding="UTF-8"?>

<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
         xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
    <modelVersion>4.0.0</modelVersion>
<!--    父模块坐标 -->
    <parent>
        <groupId>com.yd_oa_java_cloud.cloud</groupId>
        <artifactId>yd_oa_java_cloud</artifactId>
        <version>1.0</version>
    </parent>
<!--    自己的坐标-->
    <groupId>com.yd_oa_java_cloud.cloud</groupId>
    <artifactId>yd_oa_java_base</artifactId>
    <version>1.0</version>
<!--    打包方式为jar-->
    <packaging>jar</packaging>
<!--    配置-->
    <properties>
        <project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
        <maven.compiler.source>1.8</maven.compiler.source>
        <maven.compiler.target>1.8</maven.compiler.target>
        <skipTests>true</skipTests>
    </properties>
<!--    jar包-->
    <dependencies>
        <!-- 日志版本 -->
        <dependency>
            <groupId>ch.qos.logback</groupId>
            <artifactId>logback-classic</artifactId>
        </dependency>
        <dependency>
            <groupId>ch.qos.logback</groupId>
            <artifactId>logback-core</artifactId>
        </dependency>

        <!--fastjson-->
        <dependency>
            <groupId>com.alibaba</groupId>
            <artifactId>fastjson</artifactId>
        </dependency>

        <dependency>
            <groupId>org.projectlombok</groupId>
            <artifactId>lombok</artifactId>
        </dependency>


        <!--apache common-->
        <dependency>
            <groupId>org.apache.commons</groupId>
            <artifactId>commons-csv</artifactId>
        </dependency>

        <dependency>
            <groupId>org.apache.commons</groupId>
            <artifactId>commons-lang3</artifactId>
        </dependency>

        <dependency>
            <groupId>commons-codec</groupId>
            <artifactId>commons-codec</artifactId>
        </dependency>

        <dependency>
            <groupId>commons-io</groupId>
            <artifactId>commons-io</artifactId>
        </dependency>

        <dependency>
            <groupId>com.alibaba.cloud</groupId>
            <artifactId>spring-cloud-starter-alibaba-seata</artifactId>
        </dependency>

        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-aop</artifactId>
        </dependency>
        <dependency>
            <groupId>io.seata</groupId>
            <artifactId>seata-spring-boot-starter</artifactId>
        </dependency>

    </dependencies>
</project>

2.3 common模块

base模块只有最基础的包,而common要考虑的就很多了

1. 构建common模块,与base同理创建基本文件夹后,建立pom.xml


2. 编写pom.xml,注意common要引入base模块,最后将模块加入父模块中


在这里插入图片描述


在这里插入图片描述

<?xml version="1.0" encoding="UTF-8"?>

<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
         xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
    <modelVersion>4.0.0</modelVersion>
    <!--    父模块坐标 -->
    <parent>
        <groupId>com.yd_oa_java_cloud.cloud</groupId>
        <artifactId>yd_oa_java_cloud</artifactId>
        <version>1.0</version>
    </parent>
    <!--    自己的坐标-->
    <groupId>com.yd_oa_java_cloud.cloud</groupId>
    <artifactId>yd_oa_java_common</artifactId>
    <version>1.0</version>
    <!--    打包方式为jar-->
    <packaging>jar</packaging>
    <!--    配置-->
    <properties>
        <project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
        <maven.compiler.source>1.8</maven.compiler.source>
        <maven.compiler.target>1.8</maven.compiler.target>
        <skipTests>true</skipTests>
    </properties>
    <!--    jar包-->
    <dependencies>
<!--        引入我们的base模块-->
        <dependency>
            <groupId>com.yd_oa_java_cloud.cloud</groupId>
            <artifactId>yd_oa_java_base</artifactId>
            <version>1.0</version>
        </dependency>

        <dependency>
            <groupId>com.alibaba.cloud</groupId>
            <artifactId>spring-cloud-starter-alibaba-nacos-discovery</artifactId>
        </dependency>

        <!--nacos的配置管理依赖-->
        <dependency>
            <groupId>com.alibaba.cloud</groupId>
            <artifactId>spring-cloud-starter-alibaba-nacos-config</artifactId>
        </dependency>

        <!--负载均衡-->
        <dependency>
            <groupId>org.springframework.cloud</groupId>
            <artifactId>spring-cloud-starter-loadbalancer</artifactId>
        </dependency>

        <dependency>
            <groupId>org.springframework.cloud</groupId>
            <artifactId>spring-cloud-starter-bootstrap</artifactId>
        </dependency>

        <dependency>
            <groupId>org.springframework.cloud</groupId>
            <artifactId>spring-cloud-starter-openfeign</artifactId>
        </dependency>

        <!--mybatis-->
        <dependency>
            <groupId>org.mybatis.spring.boot</groupId>
            <artifactId>mybatis-spring-boot-starter</artifactId>
        </dependency>

        <!-- 数据库-->
        <dependency>
            <groupId>mysql</groupId>
            <artifactId>mysql-connector-java</artifactId>
        </dependency>

        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-data-redis</artifactId>
        </dependency>

        <!--切面-->
        <dependency>
            <groupId>org.aspectj</groupId>
            <artifactId>aspectjweaver</artifactId>
        </dependency>

        <!--okhttp-->
        <dependency>
            <groupId>com.squareup.okhttp3</groupId>
            <artifactId>okhttp</artifactId>
        </dependency>

        <dependency>
            <groupId>com.squareup.okhttp3</groupId>
            <artifactId>okhttp-sse</artifactId>
        </dependency>

        <dependency>
            <groupId>io.github.openfeign</groupId>
            <artifactId>feign-okhttp</artifactId>
        </dependency>

        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-validation</artifactId>
        </dependency>

        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-data-elasticsearch</artifactId>
        </dependency>

        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-web</artifactId>
        </dependency>

        <dependency>
            <groupId>com.github.whvcse</groupId>
            <artifactId>easy-captcha</artifactId>
        </dependency>
    </dependencies>
</project>

2.4 getway网关

1. 步骤一样,不多赘述,getway网关引入base模块


在这里插入图片描述


在这里插入图片描述

<?xml version="1.0" encoding="UTF-8"?>
<project xmlns="http://maven.apache.org/POM/4.0.0"
         xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
         xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
    <modelVersion>4.0.0</modelVersion>
    <parent>
        <groupId>com.yd_oa_java_cloud.cloud</groupId>
        <artifactId>yd_oa_java_cloud</artifactId>
        <version>1.0</version>
    </parent>

    <artifactId>yd_oa_java_gateway</artifactId>
    <version>1.0</version>
    <packaging>jar</packaging>

<!--    <properties>-->
<!--        <maven.compiler.source>21</maven.compiler.source>-->
<!--        <maven.compiler.target>21</maven.compiler.target>-->
<!--        <project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>-->
<!--    </properties>-->
    <properties>
        <project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
        <maven.compiler.source>1.8</maven.compiler.source>
        <maven.compiler.target>1.8</maven.compiler.target>
        <skipTests>true</skipTests>
    </properties>
    <dependencies>
        <!--        引入我们的base模块-->
        <dependency>
            <groupId>com.yd_oa_java_cloud.cloud</groupId>
            <artifactId>yd_oa_java_base</artifactId>
            <version>1.0</version>
        </dependency>

        <dependency>
            <groupId>com.alibaba.cloud</groupId>
            <artifactId>spring-cloud-starter-alibaba-nacos-discovery</artifactId>
        </dependency>
        <!--nacos的配置管理依赖-->
        <dependency>
            <groupId>com.alibaba.cloud</groupId>
            <artifactId>spring-cloud-starter-alibaba-nacos-config</artifactId>
        </dependency>

        <dependency>
            <groupId>org.springframework.cloud</groupId>
            <artifactId>spring-cloud-starter-gateway</artifactId>
        </dependency>

        <dependency>
            <groupId>org.springframework.cloud</groupId>
            <artifactId>spring-cloud-starter-bootstrap</artifactId>
        </dependency>


        <!--负载均衡-->
        <dependency>
            <groupId>org.springframework.cloud</groupId>
            <artifactId>spring-cloud-starter-loadbalancer</artifactId>
        </dependency>

    </dependencies>
<!--  最终打包部署时使用  -->
    <build>
        <plugins>
            <plugin>
                <groupId>org.springframework.boot</groupId>
                <artifactId>spring-boot-maven-plugin</artifactId>
                <version>2.2.6.RELEASE</version>
                <configuration>
                    <mainClass>com.yd_oa_java_cloud.gateway.YdOaCloudGatewayRunApplication</mainClass>
                </configuration>
            </plugin>
        </plugins>
    </build>
</project>

2.5 security权限管理

这个属于普通web服务,也就是一个普通的springboot项目。但是它的权限管理又是几乎所有模块都需要用的,我们直接将其写为单独的微服务,通过一致性处理,解决分布式问题


它只需要引入common模块即可,其余依赖可以在实际写程序时进行引入,不要忘了在父模块中加载这个新伙伴


在这里插入图片描述

<?xml version="1.0" encoding="UTF-8"?>
<project xmlns="http://maven.apache.org/POM/4.0.0"
         xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
         xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
    <modelVersion>4.0.0</modelVersion>
    <parent>
        <groupId>com.yd_oa_java_cloud.cloud</groupId>
        <artifactId>yd_oa_java_cloud</artifactId>
        <version>1.0</version>
    </parent>

    <artifactId>yd_oa_java_security</artifactId>
    <version>1.0</version>
    <packaging>jar</packaging>
<!--    <properties>-->
<!--        <maven.compiler.source>21</maven.compiler.source>-->
<!--        <maven.compiler.target>21</maven.compiler.target>-->
<!--        <project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>-->
<!--    </properties>-->

    <properties>
        <project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
        <maven.compiler.source>1.8</maven.compiler.source>
        <maven.compiler.target>1.8</maven.compiler.target>
        <skipTests>true</skipTests>
    </properties>
    <dependencies>
<!--        引入common模块-->
        <dependency>
            <groupId>com.yd_oa_java_cloud.cloud</groupId>
            <artifactId>yd_oa_java_common</artifactId>
            <version>1.0</version>
        </dependency>
    </dependencies>
<!--    打包的时候用-->
    <build>
        <plugins>
            <plugin>
                <groupId>org.springframework.boot</groupId>
                <artifactId>spring-boot-maven-plugin</artifactId>
                <version>2.2.6.RELEASE</version>
                <configuration>
                    <mainClass>com.yd_oa_java_cloud.security.YdOaCloudSecurityRunApplication</mainClass>
                </configuration>
            </plugin>
        </plugins>
    </build>
</project>

3. 工具类

1. base模块中,专门处理JSON数据的工具类


在这里插入图片描述

package com.yd_oa_java_cloud.base.utils;

import com.alibaba.fastjson.JSON;
import com.alibaba.fastjson.JSONArray;
import com.alibaba.fastjson.JSONObject;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;

import java.util.List;

/**
 * 处理json的工具类
 */
public class JsonUtils {
    private static final Logger logger = LoggerFactory.getLogger(JsonUtils.class);
    //对象转json
    public static String convertObjToJson(Object obj){
        return JSON.toJSONString(obj);
    }
    //json转对象
    public static <T> T convertJsonToObj(String json,Class<T> classz){return JSONObject.parseObject(json,classz);}
    //json转对象列表
    public static <T> List<T> convertJsonArrayToList(String json, Class<T> classz){return JSONArray.parseArray(json,classz);}

}

2. base模块中,建立响应VO(响应值对象ValueObject),封装响应的状态码等信息


根据不同用户习惯,提供两种,一个是ResponseVO,完全通过get和set自定义响应。还有一个是Result类,提供封装好的响应,例如Result.ok(),但是这个类依赖于下面介绍的枚举类,代码放在和枚举类一起


在这里插入图片描述


package com.yd_oa_java_cloud.base.entity.vo;

/**
 * ResonseValueObject
 * RESTful API中,使用VO来封装响应数据是一种常见的做法。响应VO用于封装API接口的返回结果,通常包含状态码、提示信息及数据部分,这样前端可以清晰地获取每次请求的结
 * @param <T>
 */
public class ResponseVO<T> {
    private String status;//响应状态
    private Integer code; //响应码
    private String info; //响应信息
    private T data; //响应数据

    public String getStatus() {
        return status;
    }

    public void setStatus(String status) {
        this.status = status;
    }

    public Integer getCode() {
        return code;
    }

    public void setCode(Integer code) {
        this.code = code;
    }

    public String getInfo() {
        return info;
    }

    public void setInfo(String info) {
        this.info = info;
    }

    public T getData() {
        return data;
    }

    public void setData(T data) {
        this.data = data;
    }
}

3. base模块中,建立响应枚举类,封装响应码和信息


在这里插入图片描述


基于枚举类封装的Result


在这里插入图片描述

package com.yd_oa_java_cloud.base.entity.enums;

/**
 * 响应code,msg枚举类
 */
public enum ResponseCodeEnum {
    CODE_20000(20000,"请求成功!"),
    CODE_20001(20001,"请求失败!"),
    CODE_404(404,"请求地址不存在!"),
    CODE_600(600,"请求参数错误!"),
    CODE_601(601,"信息已存在!"),
    CODE_500(500,"服务器响应出错,请联系管理员!"),
    CODE_503(503,"应用服务错误,请联系管理员!"),//具体微服务错误
    CODE_50014(50014,"Token过期,请重新登录!"),
    CODE_50008(50008,"非法令牌Token!"),
    CODE_50012(50012,"其他客户端已登录!"),
    CODE_901(901,"未登录或登录超时,请重新登录!"),
    ;
    private Integer code;
    private String msg;

    ResponseCodeEnum(Integer code, String msg) {
        this.code = code;
        this.msg = msg;
    }

    public Integer getCode() {
        return code;
    }

    public String getMsg() {
        return msg;
    }
}

package com.yd_oa_java_cloud.base.entity.vo;

import com.yd_oa_java_cloud.base.entity.enums.ResponseCodeEnum;

import java.io.Serializable;
import java.util.Iterator;
import java.util.LinkedHashMap;
import java.util.Map;

public class YdOaResult extends LinkedHashMap<String,Object> implements Serializable {
    private Integer code;//状态码
    private String msg;//返回信息

    public YdOaResult(){

    }

    public YdOaResult(int code, String msg, Object data) {
        this.setCode(code);
        this.setMsg(msg);
        this.setData(data);
    }

    public Integer getCode() {
        return (Integer)this.get("code");
    }

    public String getMsg() {
        return (String)this.get("msg");
    }

    public Object getData() {
        return this.get("data");
    }

    public YdOaResult setCode(int code) {
        this.put("code", code);
        return this;
    }

    public YdOaResult setMsg(String msg) {
        this.put("msg", msg);
        return this;
    }

    public YdOaResult setData(Object data) {
        this.put("data", data);
        return this;
    }

    public YdOaResult set(String key, Object data) {
        this.put(key, data);
        return this;
    }
    

    public YdOaResult removeDefaultFields() {
        this.remove("code");
        this.remove("msg");
        this.remove("data");
        return this;
    }

    public YdOaResult removeNonDefaultFields() {
        Iterator var1 = this.keySet().iterator();

        while(var1.hasNext()) {
            String key = (String)var1.next();
            if (!"code".equals(key) && !"msg".equals(key) && !"data".equals(key)) {
                this.remove(key);
            }
        }

        return this;
    }

    public static YdOaResult ok() {
        ResponseCodeEnum code20000 = ResponseCodeEnum.CODE_20000;
        return new YdOaResult(code20000.getCode(), code20000.getMsg(), (Object)null);
    }

    public static YdOaResult ok(String msg) {
        ResponseCodeEnum code20000 = ResponseCodeEnum.CODE_20000;
        return new YdOaResult(code20000.getCode(), msg, (Object)null);
    }

    public static YdOaResult code(int code) {
        return new YdOaResult(code, (String)null, (Object)null);
    }

    public static YdOaResult data(Object data) {
        ResponseCodeEnum code20000 = ResponseCodeEnum.CODE_20000;
        return new YdOaResult(code20000.getCode(),code20000.getMsg(), data);
    }

    public static YdOaResult error() {
        ResponseCodeEnum code20001 = ResponseCodeEnum.CODE_20001;
        return new YdOaResult(code20001.getCode(), code20001.getMsg(), (Object)null);
    }

    public static YdOaResult error(String msg) {
        ResponseCodeEnum code20001 = ResponseCodeEnum.CODE_20001;
        return new YdOaResult(code20001.getCode(), msg, (Object)null);
    }

    public static YdOaResult get(int code, String msg, Object data) {
        return new YdOaResult(code, msg, data);
    }

    public static YdOaResult empty() {
        return new YdOaResult();
    }

    public String toString() {
        return "{\"code\": " + this.getCode() + ", \"msg\": " + this.transValue(this.getMsg()) + ", \"data\": " + this.transValue(this.getData()) + "}";
    }

    private String transValue(Object value) {
        if (value == null) {
            return null;
        } else {
            return value instanceof String ? "\"" + value + "\"" : String.valueOf(value);
        }
    }
}


4. base模块构建自定义异常类,封装自定义异常


在这里插入图片描述

package com.yd_oa_java_cloud.base.exception;

import com.yd_oa_java_cloud.base.entity.enums.ResponseCodeEnum;

/**
 * 自定义异常
 */
public class BusinessException extends RuntimeException{
    private ResponseCodeEnum codeEnum;//引入响应信息枚举
    private Integer code;//自定义异常响应码
    private String message; //自定义异常响应信息

    //构造方法
    public BusinessException(String message,Throwable e){
        super(message,e);//调用父类构造方法,将异常信息传入
        this.message = message;
    }
    public BusinessException(String message){
        super(message);
        this.message = message;
    }
    public BusinessException(Throwable e) {super(e);}

    public BusinessException(ResponseCodeEnum codeEnum){
        super(codeEnum.getMsg());
        this.codeEnum=codeEnum;
        this.code = codeEnum.getCode();
        this.message = codeEnum.getMsg();
    }
    public BusinessException(Integer code, String message){
        super(message);
        this.code = code;
        this.message = message;
    }

    public ResponseCodeEnum getCodeEnum() {return codeEnum;}

    public Integer getCode() {return code;}

    @Override
    public String getMessage() {
        return message;
    }
    /**
     * 重新fillInStackTrace 业务异常不需要堆栈信息,提高效率
     */
    @Override
    public Throwable fillInStackTrace() {
        return this;
    }
}

3. gateway网关

由于篇幅原因,将其放在:https://blog.youkuaiyun.com/grd_java/article/details/145000544

4. mybatis-plus,代码生成器

按需加载,可以使用mybatis自己写全流程,这一步是可选项


由于篇幅原因,将其放在:https://blog.youkuaiyun.com/grd_java/article/details/145061518

5. Sa-Token权限管理模块rbac

本来想使用spring security的,但是考虑到实际工作中,大家都在用国产的Sa-Token框架实现相关功能,所以采用此框架实现权限认证


这个框架真的很好用呀,spring security玩了这么久,现在有了Sa-Token以后,除了高安全性需求场景基本用不上spring security了,文档还难读,Sa-Token再发展两年,真的可以把spring security关小黑屋了

由于篇幅原因,将其放在:https://blog.youkuaiyun.com/grd_java/article/details/145013189

二、Python后端FastAPI架构

三、Vue3.0前端架构

1. 后台系统

1.1 前端环境搭建

由于篇幅原因,将其放在:https://blog.youkuaiyun.com/grd_java/article/details/144904996

1.2 登录

由于篇幅原因,将其放在:https://blog.youkuaiyun.com/grd_java/article/details/145251917

1.3 权限管理模块前端实现

由于篇幅原因,将其放在:https://blog.youkuaiyun.com/grd_java/article/details/145253695
Vue和FastAPI实现前后端分离 一个是它的异步处理性能比较好,二是它可以类似java swagger的API交互文档,这个对应前后端分离多人开发非常友好。之前总结过Vue和Flask实现前后端分离,这次同样借个小项目实践、并总结下Vue和FastAPI实现前后端分离。 阅读详情

相关推荐

从零构建全栈用户管理系统:FastAPI + Vue 3 + MySQL 实战指南

用户列表展示与关键词搜索(支持用户名和邮箱搜索)新增用户(包含用户名、年龄、邮箱信息)编辑现有用户信息删除用户(含确认机制,防止误操作)表单验证与错误处理加载状态与操作反馈本文详细介绍了基于 FastAPI + Vue 3 + MySQL 的用户管理系统实现过程,涵盖了后端 API 设计、数据库交互、前端状态管理、组件开发等核心知识点。如何使用 FastAPI 快速构建 RESTful API,结合 Pydantic 进行数据验证。

2303_77081844的博客 2495

FastAPI 教程、结合vue实现前后端分离

FastAPI 内部提供了一个 HTTPException,但是我们也可以自定义,但是注意:我们自定义完异常之后,还要定义一个 handler,将异常和 handler 绑定在一起,然后引发该异常的时候就会触发相应的 handler。""""""pass# 通过装饰器的方式,将 ASCIIException 和 ascii_exception_handler 绑定在一起"""当引发 ASCIIException 的时候,会触发 ascii_exception_handler 的执行。

freeking101的博客 1万+

基于文件通信的QMT量化交易信号桥接方案设计与实现

在量化交易系统开发中,进程间通信(IPC)是连接不同计算模块、实现策略逻辑与交易执行解耦的关键技术。其核心原理在于允许运行于独立环境或进程的程序安全、可靠地交换数据。文件系统通信作为一种经典的IPC方法,因其实现简单、跨平台兼容性好且数据可持久化,在非高频场景下具有重要技术价值。它尤其适用于需要将外部复杂计算环境(如配备丰富数据科学库的Python环境)与专用交易终端(如迅投QMT)集成的应用场景。通过约定文件路径与数据格式,外部程序可将包含交易指令的JSON信号文件写入特定目录,而交易终端通过轮询或监听机

weixin_28678151的博客 417

Django+Vue+ElementUI管理后台源码

一款 Python 语言基于Django、Vue2.x、ElementUI、MySQL等框架精心打造的一款模块化、高性能、企业级的敏捷开发框架,本着简化开发、提升开发效率的初衷触发,框架自研了一套个性化的组件,实现了可插拔的组件式开发方式:单图上传、多图上传、下拉选择、开关按钮、单选按钮、多选按钮等等一系列个性化、轻量级的组件,是一款真正意义上实现低代码开发的敏捷开发框架。

一米阳光的博客 1298

2019年数学建模美赛经验总结

北京时间2019年1月29号上午9时,数模美赛结束。美赛结束已经10多天了,我在这次竞赛中负责建模和编程,趁现在记忆还比较清晰,写下这篇博客记录第一次参加数学建模美赛的经历。 补更:2019年4月20日公布成绩,笔者最终获得了美赛一等奖 目录 1、基本情况 2、选题 3、分工合作 4、论文写作 5、建模 6、编程 7、入门资源 ...

Smallactive 7万+

Python爬虫教程:抓取短视频平台数据(以抖音和快手为例)

为什么抓取短视频平台数据?内容分析:通过抓取短视频平台上的视频内容、标题、标签等数据,可以进行内容分类、趋势分析、话题分析等。情感分析:抓取视频的评论数据,并进行情感分析,帮助企业或组织了解公众的情绪反馈。用户行为分析市场监测:通过抓取特定关键词或标签下的视频数据,分析市场趋势,进行竞争对手分析。短视频平台数据类型:视频信息:包括视频标题、描述、标签、作者等。用户信息:包括用户的昵称、粉丝数、关注数等。互动数据评论数据:视频下的用户评论内容及用户信息。

2201_76125261的博客 3662

FastAPI+Vue前后端分离框架

一款 Python 语言基于FastAPI、Vue、ElementUI、MySQL等框架精心打造的一款模块化、高性能、企业级的敏捷开发框架,本着简化开发、提升开发效率的初衷触发,框架自研了一套个性化的组件,实现了可插拔的组件式开发方式:单图上传、多图上传等一系列个性化、轻量级的组件,是一款真正意义上实现组件化开发的敏捷开发框架。

一米阳光的博客 973

openbmc mctp i3c适配步骤

本文介绍了在Intel OKS平台下,BMC作为I3C从设备如何适配MCTP over I3C的实现方法。主要内容包括:1)关键术语解释,如MDB(Mandatory Data Byte)值为0xAE,DCR(Device Characteristics Register)和BCR(Bus Characteristics Register)的设置;2)适配流程说明,包括BMC作为控制器主节点分配地址后成为MCTP端点,CPU作为总线所有者的角色转换;3)测试验证步骤,展示通过mctp-client工具发送指

wit_yuan的专栏 132

毕业设计:Vue3+FastApi+Python+Neo4j实现主题知识图谱网页应用——前后端:数据爬虫

在该模块中,用户输入需要爬取的网址,点击“自动抓取”,后台针对相关网址进行爬虫,并返回进行格式化处理的数据,以便后续上传到数据集中进行处理,如下图所示。

m0_46573428的博客 1410

基于Simulink的光伏-储能-柴油机混合微网仿真

摘要:本文基于Simulink平台构建光伏-储能-柴油机混合微网仿真模型,实现可再生能源与备用电源的协同控制。通过光伏优先、储能调节、柴油机兜底的规则控制策略,在24小时仿真中验证了系统在晴天、阴天和夜间三种典型工况下的运行性能。模型采用PVArray模块模拟光伏发电,Simscape电气库构建储能系统,自定义MATLAB函数实现柴油机启停逻辑和能量管理。仿真结果显示系统功率平衡误差<5%,储能SOC维持在20%-80%,柴油机日均运行时间<4小时,满足设计指标。文章详细说明了建模步骤、参数设置

xiaoheshang_123的博客 68

让 ABAP 复杂内表优雅“喂饱”:Complex Internal Table Filling 全面实战指南

本文为ABAP开发者系统梳理了复杂内表的填充与复制方法。重点介绍了work area的两种声明方式、APPEND操作的多形态用法及其初始值语义,以及VALUE #( )构造器的逐行与整表写法。同时讲解了CORRESPONDING的同名字段映射功能,帮助开发者在"航司与航线"等复杂业务场景中实现最佳实践。文章还涵盖内存优化、可读性建议和常见误区,提供可运行样例,适用于ABAP On-Premise和SAP BTP环境。

2007 年 ~ 2025 年,深耕 SAP 技术 18 年 168

SpringCloud+Vue+Python人工智能(fastAPI,机器学习,深度学习)前后端架构各功能实现思路——Vue3.0前后端分离架构——后台系统前端登录实现

【代码】SpringCloud+Vue+Python人工智能(fastAPI,机器学习,深度学习)前后端架构各功能实现思路——Vue3.0前后端分离架构——后台系统前端登录实现。

殷志鹏的博客 776

c# 如何使用S7NET 读取汇川H5U的数据

本文介绍了两种使用C#读取汇川H5U PLC数据的方法。第一种通过ModbusTCP协议(推荐),使用NModbus库实现,步骤包括配置PLC的Modbus服务器功能、安装库及编写读取保持寄存器的代码。第二种针对兼容西门子S7协议的型号,使用S7NetPlus库直接读取。文章强调需注意地址映射关系、协议配置及网络设置,并建议优先采用ModbusTCP方案以确保稳定性。两种方法均提供了完整的代码示例,帮助开发者快速实现在C#环境下与汇川H5U PLC的通信。

StevenChen的博客 457

SpringCloud+Vue+Python人工智能(fastAPI,机器学习,深度学习)前后端架构各功能实现思路——Vue3.0前后端分离架构——后台系统前端权限管理模块实现

权限管理模块的前端实现

殷志鹏的博客 1163

Allegro如何使用Cross Copy命令快速复制器件的位号和丝印外形其他层

在Allegro做PCB设计的时候,如果需要复制器件的位号到其它层是无法直接实现的,如果直接拷贝器件的位号的话,效果如下。但是Allegro的Cross Copy命令是支持复制任何属性的图形到其它层的,下面以复制器件位号和丝印外框为例说明。同样如果使用Z-copy命令,也是无法Z-copy text的,Finds下方texts是灰色的。如何使用Cross Copy命令快速复制器件的位号和丝印外形其他层。另外cap处可以选择线段的端点是圆形,八角形,或者方形的铜皮。拷贝C1013,出现的是C*

weixin_54787054的博客 2671

VB摄像头监控

该VB模块可对摄像头捕获的画面进行录像等,可在创建的窗口进行控制

SpringCloud+Vue+Python人工智能(fastAPI,机器学习,深度学习)前后端架构各功能实现思路——SpringCloud后端——登录,网关统一鉴权

【代码】SpringCloud+Vue+Python人工智能(fastAPI,机器学习,深度学习)前后端架构各功能实现思路——SpringCloud后端——登录,网关统一鉴权。

殷志鹏的博客 1033

NTscan扫描工具

ntscan是一个扫描器,可以扫描没有密码和弱密码的共享,先到配置文件中填写猜测的用户名和密码,扫描过程中右侧出现的是扫描日志。

SpringCloud+Vue+Python人工智能(fastAPI,机器学习,深度学习)前后端架构各功能实现思路——Vue3.0前后端分离架构——后台系统前端环境搭建

【代码】SpringCloud+Vue+Python人工智能(fastAPI,机器学习,深度学习)前后端架构各功能实现思路——Vue3.0前后端分离架构——后台系统前端环境搭建。

殷志鹏的博客 1215

OV9734 DATASHEET,完整规格书

OV9734完整规格书,包括电气参数,尺寸规格,寄存器配置表等

SIMATIC S7-1200, S7-1500 PID 控制[手册]

SIMATIC S7-1200, S7-1500 PID 控制[手册]

SpringCloud+Vue+Python人工智能(fastAPI,机器学习,深度学习)前后端架构各功能实现思路——SpringCloud后端——Gateway网关

【代码】SpringCloud+Vue+Python人工智能(fastAPI,机器学习,深度学习)前后端架构各功能实现思路——SpringCloud后端——Gateway网关。

殷志鹏的博客 1204

SpringCloud+Vue+Python人工智能(fastAPI,机器学习,深度学习)前后端架构各功能实现思路——SpringCloud后端——权限管理rbac接口实现

SpringCloud+Vue+Python人工智能(fastAPI,机器学习,深度学习)前后端架构各功能实现思路——主目录(持续更新):https://blog.csdn.net/grd_java/article/details/144986730 SpringCloud+Vue+Python人工智能(fastAPI,机器学习,深度学习)前后端架构各功能实现思路——SpringCloud后端——Sa-Token实现Security权限管理https://blog.csdn.net/gr

殷志鹏的博客 979

SpringCloud+Vue+Python人工智能(fastAPI,机器学习,深度学习)前后端架构各功能实现思路——SpringCloud后端——Sa-Token实现Security权限管理

【代码】SpringCloud+Vue+Python人工智能(fastAPI,机器学习,深度学习)前后端架构各功能实现思路——SpringCloud后端——Sa-Token实现Security权限管理。

殷志鹏的博客 936

SpringCloud+Vue+Python人工智能(fastAPI,机器学习,深度学习)前后端架构各功能实现思路——SpringCloud后端——整合mybatis plus和代码生成器

【代码】SpringCloud+Vue+Python人工智能(fastAPI,机器学习,深度学习)前后端架构各功能实现思路——SpringCloud后端——整合mybatis plus和代码生成器。

殷志鹏的博客 1133

关于python FastAPI与Vue3的通信

在设计网络程序时,前后端的分离设计已经是一门成熟的技术,在之前我所做的网络程序中,并未将前后端分离,比如之前的一系列Flask文章,更多是侧重于网络后端的开发,甚至会将原本需要在前端做的工作,比如校验数据等,都提交给服务器来实现,这加大了前后端的交互,也使得在实际部署后,增大了网络通信成本。本着不断学习的理念,现计划学习一下前后端分离技术,前端采用三大框架之一的Vue.js,后端则采用Python的FastAPI框架。

全粘工程师 841

FastAPI实战秘籍:从零构建高性能API到Vue前后端分离全攻略

FastAPI正以惊人速度重塑Python全栈开发格局:相比传统Django/Flask,其异步特性带来5-10倍性能提升,自动文档生成和类型提示使开发效率提升200%-300%。文章详解了从5分钟快速入门到企业级架构设计,包括模块化路由、各种参数处理、文件上传优化、Vue无缝集成、TortoiseORM数据库操作等实战技巧,并给出性能优化黄金法则(异步驱动+Redis缓存+JIT编译)。FastAPI凭借其卓越性能和开发体验,正成为新一代Python全栈开发的首选框架。

学习成长日记 1437

毕业设计:Vue3+FastApi+Python+Neo4j实现主题知识图谱网页应用——数据处理:实体融合

完整项目资源链接:https://download.csdn.net/download/m0_46573428/87796553 项目详细信息请看:https://blog.csdn.net/m0_46573428/article/details/130071302 本文介绍的是数据处理模块的实体融合功能。

m0_46573428的博客 1636

【Vue+python】Vue调用python-fastApi接口实现数据(数值、列表类型数据)渲染

预先准备好变量,用于存放接口调用返回结果。

波点兔的博客 704

【简单】【使用PyWebView、FastAPI、Vue与ElementUI Plus构建桌面应用】

使用PyWebView、FastAPI、Vue以及ElementUI Plus,开发,构建并打包一个功能齐全的桌面应用

qq_38872351的博客 1607
上一篇: 数据科学、数据分析、人工智能必备知识汇总-----机器学习-----Adaboost-----持续更新
下一篇: SpringCloud+Vue+Python人工智能(fastAPI,机器学习,深度学习)前后端架构各功能实现思路——SpringCloud后端——Gateway网关
ydenergy_殷志鹏
博客等级 码龄7年 5885粉丝 543原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

ydenergy_殷志鹏

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值