代码地址: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就像他。
不扯淡了,薅头发去,明天再学习