011、Python+fastapi,第一个后台管理项目走向第11步:建立python+fastapi项目,简单测试一下

一、说明

本文章就是记录自己的学习过程,如果有用您可以参考,没用你就略过,没有好与不好之分,今天主要是参考了gitee上的一些项目,一步一步的往后i建立

对于学习来说,如果您有java c++等经验,python相对来说简单,当然是入门简单,所以找个简单的教材看看就可开始干了,当然面试除外,问的问题不一样,毕竟不允许你bug多不是。自己学,多点bug也不是坏事,但是面试不一样,得好好学,我不用去面试,就边学边干

至于为什么选fastapi而不是django,这个也是听说fastapi效率更高,还有就是如果以后采集数据,进行数据处理,深度学习不知道会不会更好,反正网上说更适合,我也就用了

二、安装要用的包

既然是站在巨人的肩膀(RuoYi-Vue3-FastAPI)之上,就不客气了,直接搞个requirements.txt文件,装吧,前端好多都是这么玩的(nodejs),在根目录建一个requirements.txt

进入项目根目录直接装

安装之前设置一下pip源

pip config set global.index-url https://pypi.tuna.tsinghua.edu.cn/simple

pip install -r requirements.txt

我这里出错了,python 版本3.8 不行,后来升级了3.9,包的版本和python版本不匹配造成的。

后来又出错了:ERROR: pandas 2.1.4 has requirement pytz>=2020.1, but you'll have pytz 2019.3 which is incompatible.

pip install --upgrade pytz

安装最新的就可以了,后来在别的机器上跑了一遍,没有这一错误

三、导入数据库

前面讲过,我们是在RuoYi-Vue3-FastAPI的基础上学习,所以数据库直接导入,比较数据库的设计还是花时间的,直接搞定框架,再回来学习

没有装远程链接工具,直接用命令行导入

e) jiangkping@bm1dqvp3wr5zfyw:~/Downloads$ sudo mysql -u root -p
Enter password: 

Welcome to the MySQL monitor.  Commands end with ; or \g.
Your MySQL connection id is 13
Server version: 8.0.21 MySQL Community Server - GPL

Copyright (c) 2000, 2020, Oracle and/or its affiliates. All rights reserved.

Oracle is a registered trademark of Oracle Corporation and/or its
affiliates. Other names may be trademarks of their respective
owners.

Type 'help;' or '\h' for help. Type '\c' to clear the current input statement.

mysql> CREATE DATABASE victor CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci;
Query OK, 1 row affected (0.01 sec)

数据sql文件目录/home/jiangkping/Desktop/mucauna-fastapi/sql/victor.sql
 

(base) jiangkping@bm1dqvp3wr5zfyw:~/Downloads$ sudo mysql -u root -p victor < /home/jiangkping/Desktop/mucauna-fastapi/sql/victor.sql
Enter password: 

(base) jiangkping@bm1dqvp3wr5zfyw:~/Downloads$ sudo mysql -u root -p
Enter password: 

Welcome to the MySQL monitor.  Commands end with ; or \g.
Your MySQL connection id is 15
Server version: 8.0.21 MySQL Community Server - GPL

Copyright (c) 2000, 2020, Oracle and/or its affiliates. All rights reserved.

Oracle is a registered trademark of Oracle Corporation and/or its
affiliates. Other names may be trademarks of their respective
owners.

Type 'help;' or '\h' for help. Type '\c' to clear the current input statement.

mysql> use victor;
Reading table information for completion of table and column names
You can turn off this feature to get a quicker startup with -A

Database changed
mysql> show tables;
+------------------+
| Tables_in_victor |
+------------------+
| gen_table        |
| gen_table_column |
| sys_config       |
| sys_dept         |
| sys_dict_data    |
| sys_dict_type    |
| sys_job          |
| sys_job_log      |
| sys_logininfor   |
| sys_menu         |
| sys_notice       |
| sys_oper_log     |
| sys_post         |
| sys_role         |
| sys_role_dept    |
| sys_role_menu    |
| sys_user         |
| sys_user_post    |
| sys_user_role    |
+------------------+
19 rows in set (0.00 sec)

显示出table了,证明导入成功

 四、建立后端代码框架

这可不是我的功劳,我就是个搬运工,搬运代码之后是这个样子,证明有戏,下面把步骤贴上,明天做几个接口测试一下数据库和redis,这个必须要保证

1、拷贝config目录

里面有编译不过的,直接注释,基本都是controler接口里的,先干掉,编译再说;SchedulerUtil的先清空,给个空文件,会编译不过

2、拷贝utils目录,和前面一样

3、拷贝middlewares、exceptions、sub_applications,

和前面一样,直接加上就行了,不过这3个目录我放到了一起systemhandle目录里面去了

见图

4、建立 server.py

from fastapi import FastAPI
from config.env import AppConfig
from config.get_redis import RedisUtil
from config.get_db import init_create_table
# from config.get_scheduler import SchedulerUtil
from utils.log_util import logger
from utils.common_util import worship
from contextlib import asynccontextmanager
from systemhandle.subApp.handle import handle_sub_applications
from systemhandle.middlewares.handle import handle_middleware
from systemhandle.exceptions.handle import handle_exception


# 生命周期事件
@asynccontextmanager
async def lifespan(app: FastAPI):
    logger.info(f"{AppConfig.app_name}开始启动")
    worship()
    await init_create_table()
    app.state.redis = await RedisUtil.create_redis_pool()
    await RedisUtil.init_sys_dict(app.state.redis)
    await RedisUtil.init_sys_config(app.state.redis)
    # await SchedulerUtil.init_system_scheduler()
    logger.info(f"{AppConfig.app_name}启动成功")
    yield
    await RedisUtil.close_redis_pool(app)
    # await SchedulerUtil.close_system_scheduler()


# 初始化FastAPI对象
app = FastAPI(
    title=AppConfig.app_name,
    description=f'{AppConfig.app_name}接口文档',
    version=AppConfig.app_version,
    lifespan=lifespan
)

# 挂载子应用
handle_sub_applications(app)
# 加载中间件处理方法
handle_middleware(app)
# 加载全局异常处理方法
handle_exception(app)

# 加载路由列表
controller_list = [
   #先全部去掉,后面再一个一个加
]

for controller in controller_list:
    app.include_router(router=controller.get('router'), tags=controller.get('tags'))

 这个加进去后会出现编译错误,主要是包路径的问题,和我自己有关,我改了路径,你们不改的,没关系,3个handle.py里处理下路径,就是多了个systemhandle的路径

5、建立app.py

import uvicorn
from server import app, AppConfig


if __name__ == '__main__':
    uvicorn.run(
        app='app:app',
        host=AppConfig.app_host,
        port=AppConfig.app_port,
        root_path=AppConfig.app_root_path,
        reload=AppConfig.app_reload
    )
 

 6、环境变量文件

.env.dev和.env.prod,拷贝过来根据自己的改下就行了

# -------- 应用配置 --------
# 应用运行环境
APP_ENV = 'dev'
# 应用名称
APP_NAME = 'mucauna-fastapi'
# 应用代理路径
APP_ROOT_PATH = '/dev-api'
# 应用主机
APP_HOST = '0.0.0.0'
# 应用端口
APP_PORT = 9999
# 应用版本
APP_VERSION= '0.0.1'
# 应用是否开启热重载
APP_RELOAD = true
# 应用是否开启IP归属区域查询
APP_IP_LOCATION_QUERY = true
# 应用是否允许账号同时登录
APP_SAME_TIME_LOGIN = true

# -------- Jwt配置 --------
# Jwt秘钥 openssl rand -hex 32就可生成
JWT_SECRET_KEY = 'cff428973c740c9894d0877c30764a269f48e77254969e6823f51a5eda415da5'
# Jwt算法
JWT_ALGORITHM = 'HS256'
# 令牌过期时间
JWT_EXPIRE_MINUTES = 1440
# redis中令牌过期时间
JWT_REDIS_EXPIRE_MINUTES = 30


# -------- 数据库配置 --------
# 数据库主机
DB_HOST = '127.0.0.1'
# 数据库端口
DB_PORT = 3306
# 数据库用户名
DB_USERNAME = 'root'
# 数据库密码
DB_PASSWORD = '123456'
# 数据库名称
DB_DATABASE = 'victor'
# 是否开启sqlalchemy日志
DB_ECHO = true

# -------- Redis配置 --------
# Redis主机
REDIS_HOST = '127.0.0.1'
# Redis端口
REDIS_PORT = 6379
# Redis用户名
REDIS_USERNAME = ''
# Redis密码
REDIS_PASSWORD = ''
# Redis数据库
REDIS_DATABASE = 0

 7、测试下

http://localhost:8080/dev-api/docs

有效果的

 我们今天就加这么多,明天再来

外网也是OK的

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

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

相关文章

Redis的哨兵机制

引入&#xff1a; 主从复制最大的问题还是在主节点上&#xff0c;主节点挂了&#xff0c;从节点就迷茫了&#xff0c;虽然能够提供读操作&#xff0c;但是从节点不能自动生成主节点&#xff0c;不能替换原有主节点对应的角色&#xff1b;此时&#xff0c;就需要程序员/运维手工…

绿联HDMI延长器40265使用AG7120芯片放大器方案

HDMI延长器和放大器 延长器&#xff1a;主要用于HDMI线的延长&#xff0c;有HDMI对接头方式延长&#xff0c;或HDMI公头加HDMI母头的HDMI线进行延长&#xff0c;或通过网线方式延长&#xff0c;早期为双网线&#xff0c;目前已发展为单网线&#xff0c;需要注意的是&#xff0…

L45 【哈工大_操作系统】操作系统接口 系统调用实现

L4 操作系统接口 本节比较简单&#xff0c;故与第五节课程笔记一起发布。本节主要是研究 上层应用 是怎么穿过边界进入 操作系统。 接口&#xff1a;操作系统提供的重要函数/指令( system call )&#xff0c;用来连接硬件&#xff0c;所以OS接口就是系统调用POSIX&#xff08;…

Res2Net网络

Res2Net网络 摘要Abstract1. Res2Net网络1.1 文献摘要1.2 背景1.3 创新点1.4 网络结构1.5 实验1.5.1 在ImageNet数据集上进行实验1.5.2 在CIFAR数据集上进行实验 2. Res2Net代码实现3. 总结 摘要 Res2Net是一种神经网络架构&#xff0c;旨在改善类似ResNet的网络在计算机视觉任…

vscode开发 vue3+ts 的 uni-app 微信小程序项目

创建uni-app项目&#xff1a; # 创建用ts开发的uni-app npx degit dcloudio/uni-preset-vue#vite-ts 项目名称 # 创建用js开发的uni-app npx degit dcloudio/uni-preset-vue#vite 项目名称VS Code 配置 为什么选择 VS Code &#xff1f; HbuilderX 对 TS 类型支持暂不完善VS…

unity记一下如何播放动画

我使用的版本是2022.3.14fc 展开你的模型树&#xff0c;是会出现这个三角形的东西的 然后在资源面板创建一个animation controller 进去之后&#xff0c;把三角形拖进去&#xff0c;就会出现一个动画&#xff0c;然后点击他 在左侧给他创建这么个状态名字&#xff0c;类型…

AskManyAI:一个GPT、Claude、Gemini、Kimi等顶级AI的决斗场

一直以来很多人问我能不能有个稳定&#xff0c;不折腾的全球AI大模型测试网站&#xff0c;既能够保证真实靠谱&#xff0c;又能够保证稳定、快速&#xff0c;不要老动不动就挂了、出错或者漫长的响应。 直到笔者遇到了AskManyAI&#xff0c;直接就惊艳住了&#xff01; 话不多…

第17天:信息打点-语言框架开发组件FastJsonShiroLog4jSpringBoot等

第十七天 本课意义 1.CMS识别到后期漏洞利用和代码审计 2.开发框架识别到后期漏洞利用和代码审计 3.开发组件识别到后期漏洞利用和代码审计 一、CMS指纹识别-不出网程序识别 1.概念 CMS指纹识别一般能识别到的都是以PHP语言开发的网页为主&#xff0c;其他语言开发的网页识…

springboot-tomcat冲突

maven tomcat版本冲突异常 记录一个错误 在项目启动时报错&#xff1a; java.lang.AbstractMethodError: org.apache.tomcat.websocket.server.WsSessionListener.sessionCreated(Ljavax/servlet/http/HttpSessionEvent;)V 引入Session报错。 原因&#xff1a;Springboot默…

数据仓库—维度建模—维度表设计

维度表 维度表(Dimension Table)是数据仓库中描述业务过程中各种维度信息的表,用于提供上下文和描述性信息,以丰富事实数据的分析 维度表是维度建模的灵魂所在,在维度表设计中碰到的问题(比如维度变化、维度层次、维度一致性、维度整合和拆分等)都会直接关系到维度建模…

基于R语言实现的负二项回归模型【理解与实现】-理解负二项回归模型和泊松回归模型之间的区别

前言 我们可以在R语言中使用MASS包中的glm.nb函数来拟合负二项模型&#xff0c;以及使用glm函数来拟合泊松模型。以下是一个详细的过程&#xff0c;包括模拟数据的生成、模型的拟合、结果的比较和解释。 需要的包 if (!require("MASS")) install.packages("M…

【Leetcode每日一题】 分治 - 颜色分类(难度⭐⭐)(57)

1. 题目解析 题目链接&#xff1a;75. 颜色分类 这个问题的理解其实相当简单&#xff0c;只需看一下示例&#xff0c;基本就能明白其含义了。 2.算法原理 算法思路解析 本算法采用三指针法&#xff0c;将数组划分为三个区域&#xff0c;分别用于存放值为0、1和2的元素。通过…

CentOS 7安装Zookeeper

说明&#xff1a;本文介绍如何在CentOS 7操作系统下使用Zookeeper 下载安装 首先&#xff0c;去官网下载所需要安装的版本&#xff0c;我这里下载3.4.9版本&#xff1b; 上传到云服务器上&#xff0c;解压 tar -xvf zookeeper-3.4.9.tar.gz修改配置 进入Zookeeper目录下的co…

3. 安装arrach结构的Mysql

提示&#xff1a;arm的centos上面安装arrach结构的Mysql 文章目录 前言一、查看已经安装过的并卸载mysql二、创建mysql用户组1.设置用户组2. 安装3.设置启动4.查看密码5.修改登录密码6.授权7.修改连接8.设置参数 常见问题排查1. 启动失败查看&#xff1a;2. 用户操作3. 踩坑解决…

【已开源】​基于stm32f103的爬墙小车

​基于stm32f103的遥控器无线控制爬墙小车&#xff0c;实现功能为可平衡在竖直墙面上&#xff0c;并进行移动和转向&#xff0c;具有超声波防撞功能。 直接上&#xff1a; 演示视频如&#xff1a;哔哩哔哩】 https://b23.tv/BzVTymO 项目说明&#xff1a; 在这个项目中&…

Unity 2D让相机跟随角色移动

相机跟随移动 最简单的方式通过插件Cinemachine 在窗口/包管理器选择全部找到Cinemachine&#xff0c;导入。然后在游戏对象/Cinemachine创建2D Camera。此时层级中创建一个2D相机。选中人物拖入检查器Follow。此时相机跟随人物移动。 修改相机视口距离 在检查器中Lens下调正…

linux学习:文件属性

在操作文件的时候&#xff0c;经常需要获取文件的属性&#xff0c;比如类型、权限、大小、所有者等等&#xff0c; 这些信息对于比如文件的传输、管理等是必不可少的&#xff0c;而这些信息 这三个函数的功能完全一样&#xff0c;区别是&#xff1a;stat( )参数是一个文件的名字…

UI设计/交互设计/视觉设计项目汇报/作品集Figma/PPT模板

作为UI设计/交互设计/视觉设计师&#xff0c;创建作品集对于向潜在客户或雇主展示您的技能、创造力和风格至关重要。以下分步指南可帮助您创建令人印象深刻的作品集&#xff1a; 选择您的最佳作品&#xff1a;选择您最强大且最相关的设计项目&#xff0c;将其纳入您的作品集。…

Java应用中文件上传安全性分析与安全实践

✨✨谢谢大家捧场&#xff0c;祝屏幕前的小伙伴们每天都有好运相伴左右&#xff0c;一定要天天开心哦&#xff01;✨✨ &#x1f388;&#x1f388;作者主页&#xff1a; 喔的嘛呀&#x1f388;&#x1f388; 目录 引言 一. 文件上传的风险 二. 使用合适的框架和库 1. Spr…

CCF区块链论文录用资讯--ICDE 2024

ICDE是CCF A类会议 (数据库&#xff0f;数据挖掘&#xff0f;内容检索) 其2024录用了8篇区块链论文 Database technology for Blockchains I Efficient Partial Order Based Transaction Processing for Permissioned Blockchains &#xff08;针对许可区块链的高效的基于偏序…