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、测试下

python app.py --env=dev

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

有效果的

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

外网也是OK的

  • 27
    点赞
  • 19
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值