fastapi学习记录【十】

代码地址:GitHub - wendingming/fastapi-vue-postgresql: fastapi+vue+postgresql搭建项目

今天咱们来学一下,网上开源的这套代码

Vue3+FastAPI: Vue3+ElementPlus+FastAPI 实现学生选课系统

由网友zxiaosi开发完成,感谢

注意:需要python3.8以上版本。

首先进行项目部署:

一、需要先修改fastapi后台的:core/config文件的mysql账号密码,
二、本地mysql新建数据库:elective_system
三、运行fastapi后台的:initial_data的init_data.py文件,【pycharm->打开这个页面->右键->run】
四、VUE前端,修改vite.config.js的BASE_URL: http://127.0.0.1:9000/api/

五、启动fastapi:在terminal输入代码:uvicorn main:app --reload --port 9000,回车

六、VUE前端:在terminal输入代码:先执行:npm install,再执行:npm run dev

最后前端页面如下图:

 接下来我们来详细看代码,首先是main.py,代码如下:

#!/usr/bin/env python3
# _*_ coding: utf-8 _*_
# @Time : 2021/9/19 22:04
# @Author : zxiaosi
# @desc : 主函数
import uvicorn
from fastapi import FastAPI

from core import settings
from db import init_db
from initial_data import sqlalchemy_core_initial, sqlalchemy_orm_initial
from register import register_app, register_cors, register_exception, register_router, register_redis
from register.middleware import register_middleware
from utils import logger

# 接口文档配置
app = FastAPI(description=settings.PROJECT_DESCRIPTION, version=settings.PROJECT_VERSION)

# 挂载其他app
register_app(app)

# 注册路由
register_router(app)

# 注册跨域请求
register_cors(app)

# 注册Redis
register_redis(app)

# 注册请求响应拦截
register_middleware(app)

# 注册捕获全局异常
register_exception(app)

if __name__ == '__main__':
    logger.info("日志初始化成功!!!")

    # 创建所有表
    init_db()

    # 两种初始化表数据的方式 (只能插入一次)
    # sqlalchemy_orm_initial()  # 速度略慢,性能正常
    sqlalchemy_core_initial()  # 速度与性能并行

    # Docker启动方式
    # uvicorn.run(app='main:app', host="0.0.0.0", port=8000)
    uvicorn.run(app='main:app', host="127.0.0.1", port=9000)

其中第一步,是加载日志,加载日志是使用loguru库,

该库的文档说明可以查看:Overview — loguru documentation

备注:【英文】

中文的安装使用说明,可以参考:Python - loguru日志库,高效输出控制台日志和日志记录 - 小菠萝测试笔记 - 博客园

当前开源代码使用的loguru库代码如下:

#!/usr/bin/env python3
# _*_ coding: utf-8 _*_
# @Time : 2021/11/8 10:44
# @Author : zxiaosi
# @desc : 日志文件夹
import os
from loguru import logger

from core.config import settings

# 获取当前文件夹
current_path = os.path.dirname(__file__)

# 获取当前文件夹的上一层文件
base_path = os.path.abspath(os.path.join(current_path, ".."))

# 拼接日志的路径
log_path = base_path + os.sep + settings.LOGGER_FOLDER + os.sep
# print(f'日志文件夹名: {log_path} \n')

"""如果文件夹不存在就创建"""
os.makedirs(log_path, exist_ok=True)

""" 保留日志文件夹下最大个数(自己调试用) """
file_list = os.listdir(log_path)
if len(file_list) > 4:
    os.remove(os.path.join(log_path, file_list[0]))

# 日志输出路径
log_path_name = os.path.join(log_path, settings.LOGGER_NAME)

# 详见: https://loguru.readthedocs.io/en/stable/overview.html#features
logger.add(log_path_name,
           encoding=settings.GLOBAL_ENCODING,
           level=settings.LOGGER_LEVEL,
           rotation=settings.LOGGER_ROTATION,
           retention=settings.LOGGER_RETENTION,
           enqueue=True)

# 导出变量名
__all__ = ["logger"]

使用后的效果如下:

 嗯,赞一个,简单实用,比java的日志简单容易不知道多少倍,python库,永远的神。

PS:我始终认为,JAVA反人类,要记得东西太多了,而且不直观,只不过学JAVA的人多,库多,啥玩意都有,人多势众说的就是JAVA,只不过学习起来,容易让人头秃,尼玛的一个简单的功能,绕来绕去,还要看JDK版本,第三方库版本,还要配置POM,引用后,还要生成对象,使用对象的各种属性方法,写个接口还要分impl,intf,控制器,安卓用个第三方库,还要把库下载,把各种操作方法,属性,写一套操作代码,然后再把它引用的项目里add library,然后项目里还要调用这些方法,属性,尼玛的,烦不烦啊,太复杂了。

python很简洁,优雅,

我觉得java和python对比,就好像马云对比马斯克,马云vs马化腾,都是姓马【都是编程语言】,都是有钱,都是有本事,区别就是:马云太丑了,java就像他。

不扯淡了,薅头发去,明天再学习

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值