赞
踩
代码地址: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就像他。
不扯淡了,薅头发去,明天再学习
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。