Skip to content

Commit d55ddbe

Browse files
insistencegitee-org
authored andcommitted
!14 RuoYi-Vue3-FastAPI v1.3.0
Merge pull request !14 from insistence/develop
2 parents e705a1c + bea5d94 commit d55ddbe

File tree

130 files changed

+6957
-4303
lines changed

Some content is hidden

Large Commits have some content hidden by default. Use the searchbox below for content that may be hidden.

130 files changed

+6957
-4303
lines changed

README.md

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -1,12 +1,12 @@
11
<p align="center">
22
<img alt="logo" src="https://oscimg.oschina.net/oscnet/up-d3d0a9303e11d522a06cd263f3079027715.png">
33
</p>
4-
<h1 align="center" style="margin: 30px 0 30px; font-weight: bold;">RuoYi-Vue3-FastAPI v1.2.2</h1>
4+
<h1 align="center" style="margin: 30px 0 30px; font-weight: bold;">RuoYi-Vue3-FastAPI v1.3.0</h1>
55
<h4 align="center">基于RuoYi-Vue3+FastAPI前后端分离的快速开发框架</h4>
66
<p align="center">
77
<a href="https://gitee.com/insistence2022/RuoYi-Vue3-FastAPI/stargazers"><img src="https://gitee.com/insistence2022/RuoYi-Vue3-FastAPI/badge/star.svg?theme=dark"></a>
88
<a href="https://github.com/insistence/RuoYi-Vue3-FastAPI"><img src="https://img.shields.io/github/stars/insistence/RuoYi-Vue3-FastAPI?style=social"></a>
9-
<a href="https://gitee.com/insistence2022/RuoYi-Vue3-FastAPI"><img src="https://img.shields.io/badge/RuoYiVue3FastAPI-v1.2.2-brightgreen.svg"></a>
9+
<a href="https://gitee.com/insistence2022/RuoYi-Vue3-FastAPI"><img src="https://img.shields.io/badge/RuoYiVue3FastAPI-v1.3.0-brightgreen.svg"></a>
1010
<a href="https://gitee.com/insistence2022/RuoYi-Vue3-FastAPI/blob/master/LICENSE"><img src="https://img.shields.io/github/license/mashape/apistatus.svg"></a>
1111
<img src="https://img.shields.io/badge/python-≥3.8-blue">
1212
<img src="https://img.shields.io/badge/MySQL-≥5.7-blue">
@@ -21,7 +21,7 @@
2121

2222
RuoYi-Vue3-FastAPI是一套全部开源的快速开发平台,毫无保留给个人及企业免费使用。
2323

24-
* 前端采用Vue、Element Plus,基于<u>[RuoYi-Vue3](https://github.com/yangzongzhuan/RuoYi-Vue3)</u>前端项目修改。
24+
* 前端采用Vue3、Element Plus,基于<u>[RuoYi-Vue3](https://github.com/yangzongzhuan/RuoYi-Vue3)</u>前端项目修改。
2525
* 后端采用FastAPI、sqlalchemy、MySQL、Redis、OAuth2 & Jwt。
2626
* 权限认证使用OAuth2 & Jwt,支持多终端认证系统。
2727
* 支持加载动态权限菜单,多方式轻松权限控制。

ruoyi-fastapi-backend/.env.dev

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -10,7 +10,7 @@ APP_HOST = '0.0.0.0'
1010
# 应用端口
1111
APP_PORT = 9099
1212
# 应用版本
13-
APP_VERSION= '1.2.2'
13+
APP_VERSION= '1.3.0'
1414
# 应用是否开启热重载
1515
APP_RELOAD = true
1616
# 应用是否开启IP归属区域查询

ruoyi-fastapi-backend/.env.prod

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -10,7 +10,7 @@ APP_HOST = '0.0.0.0'
1010
# 应用端口
1111
APP_PORT = 9099
1212
# 应用版本
13-
APP_VERSION= '1.2.2'
13+
APP_VERSION= '1.3.0'
1414
# 应用是否开启热重载
1515
APP_RELOAD = false
1616
# 应用是否开启IP归属区域查询

ruoyi-fastapi-backend/app.py

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,5 @@
11
import uvicorn
2-
from server import app, AppConfig
2+
from server import app, AppConfig # noqa: F401
33

44

55
if __name__ == '__main__':
@@ -8,5 +8,5 @@
88
host=AppConfig.app_host,
99
port=AppConfig.app_port,
1010
root_path=AppConfig.app_root_path,
11-
reload=AppConfig.app_reload
11+
reload=AppConfig.app_reload,
1212
)
Lines changed: 117 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,117 @@
1+
class CommonConstant:
2+
"""
3+
常用常量
4+
5+
WWW: www主域
6+
HTTP: http请求
7+
HTTPS: https请求
8+
LOOKUP_RMI: RMI远程方法调用
9+
LOOKUP_LDAP: LDAP远程方法调用
10+
LOOKUP_LDAPS: LDAPS远程方法调用
11+
YES: 是否为系统默认(是)
12+
NO: 是否为系统默认(否)
13+
DEPT_NORMAL: 部门正常状态
14+
DEPT_DISABLE: 部门停用状态
15+
UNIQUE: 校验是否唯一的返回标识(是)
16+
NOT_UNIQUE: 校验是否唯一的返回标识(否)
17+
"""
18+
19+
WWW = 'www.'
20+
HTTP = 'http://'
21+
HTTPS = 'https://'
22+
LOOKUP_RMI = 'rmi:'
23+
LOOKUP_LDAP = 'ldap:'
24+
LOOKUP_LDAPS = 'ldaps:'
25+
YES = 'Y'
26+
NO = 'N'
27+
DEPT_NORMAL = '0'
28+
DEPT_DISABLE = '1'
29+
UNIQUE = True
30+
NOT_UNIQUE = False
31+
32+
33+
class HttpStatusConstant:
34+
"""
35+
返回状态码
36+
37+
SUCCESS: 操作成功
38+
CREATED: 对象创建成功
39+
ACCEPTED: 请求已经被接受
40+
NO_CONTENT: 操作已经执行成功,但是没有返回数据
41+
MOVED_PERM: 资源已被移除
42+
SEE_OTHER: 重定向
43+
NOT_MODIFIED: 资源没有被修改
44+
BAD_REQUEST: 参数列表错误(缺少,格式不匹配)
45+
UNAUTHORIZED: 未授权
46+
FORBIDDEN: 访问受限,授权过期
47+
NOT_FOUND: 资源,服务未找到
48+
BAD_METHOD: 不允许的http方法
49+
CONFLICT: 资源冲突,或者资源被锁
50+
UNSUPPORTED_TYPE: 不支持的数据,媒体类型
51+
ERROR: 系统内部错误
52+
NOT_IMPLEMENTED: 接口未实现
53+
WARN: 系统警告消息
54+
"""
55+
56+
SUCCESS = 200
57+
CREATED = 201
58+
ACCEPTED = 202
59+
NO_CONTENT = 204
60+
MOVED_PERM = 301
61+
SEE_OTHER = 303
62+
NOT_MODIFIED = 304
63+
BAD_REQUEST = 400
64+
UNAUTHORIZED = 401
65+
FORBIDDEN = 403
66+
NOT_FOUND = 404
67+
BAD_METHOD = 405
68+
CONFLICT = 409
69+
UNSUPPORTED_TYPE = 415
70+
ERROR = 500
71+
NOT_IMPLEMENTED = 501
72+
WARN = 601
73+
74+
75+
class JobConstant:
76+
"""
77+
定时任务常量
78+
79+
JOB_ERROR_LIST: 定时任务禁止调用模块列表
80+
JOB_WHITE_LIST: 定时任务允许调用模块列表
81+
"""
82+
83+
JOB_ERROR_LIST = [
84+
'app',
85+
'config',
86+
'exceptions',
87+
'middlewares',
88+
'module_admin',
89+
'server',
90+
'sub_applications',
91+
'utils',
92+
]
93+
JOB_WHITE_LIST = ['module_task']
94+
95+
96+
class MenuConstant:
97+
"""
98+
菜单常量
99+
100+
TYPE_DIR: 菜单类型(目录)
101+
TYPE_MENU: 菜单类型(菜单)
102+
TYPE_BUTTON: 菜单类型(按钮)
103+
YES_FRAME: 是否菜单外链(是)
104+
NO_FRAME: 是否菜单外链(否)
105+
LAYOUT: Layout组件标识
106+
PARENT_VIEW: ParentView组件标识
107+
INNER_LINK: InnerLink组件标识
108+
"""
109+
110+
TYPE_DIR = 'M'
111+
TYPE_MENU = 'C'
112+
TYPE_BUTTON = 'F'
113+
YES_FRAME = 0
114+
NO_FRAME = 1
115+
LAYOUT = 'Layout'
116+
PARENT_VIEW = 'ParentView'
117+
INNER_LINK = 'InnerLink'

ruoyi-fastapi-backend/config/database.py

Lines changed: 5 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -5,16 +5,18 @@
55
from urllib.parse import quote_plus
66
from config.env import DataBaseConfig
77

8-
ASYNC_SQLALCHEMY_DATABASE_URL = f"mysql+asyncmy://{DataBaseConfig.db_username}:{quote_plus(DataBaseConfig.db_password)}@" \
9-
f"{DataBaseConfig.db_host}:{DataBaseConfig.db_port}/{DataBaseConfig.db_database}"
8+
ASYNC_SQLALCHEMY_DATABASE_URL = (
9+
f'mysql+asyncmy://{DataBaseConfig.db_username}:{quote_plus(DataBaseConfig.db_password)}@'
10+
f'{DataBaseConfig.db_host}:{DataBaseConfig.db_port}/{DataBaseConfig.db_database}'
11+
)
1012

1113
async_engine = create_async_engine(
1214
ASYNC_SQLALCHEMY_DATABASE_URL,
1315
echo=DataBaseConfig.db_echo,
1416
max_overflow=DataBaseConfig.db_max_overflow,
1517
pool_size=DataBaseConfig.db_pool_size,
1618
pool_recycle=DataBaseConfig.db_pool_recycle,
17-
pool_timeout=DataBaseConfig.db_pool_timeout
19+
pool_timeout=DataBaseConfig.db_pool_timeout,
1820
)
1921
AsyncSessionLocal = async_sessionmaker(autocommit=False, autoflush=False, bind=async_engine)
2022

ruoyi-fastapi-backend/config/enums.py

Lines changed: 51 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,51 @@
1+
from enum import Enum
2+
3+
4+
class BusinessType(Enum):
5+
"""
6+
业务操作类型
7+
8+
OTHER: 其它
9+
INSERT: 新增
10+
UPDATE: 修改
11+
DELETE: 删除
12+
GRANT: 授权
13+
EXPORT: 导出
14+
IMPORT: 导入
15+
FORCE: 强退
16+
GENCODE: 生成代码
17+
CLEAN: 清空数据
18+
"""
19+
20+
OTHER = 0
21+
INSERT = 1
22+
UPDATE = 2
23+
DELETE = 3
24+
GRANT = 4
25+
EXPORT = 5
26+
IMPORT = 6
27+
FORCE = 7
28+
GENCODE = 8
29+
CLEAN = 9
30+
31+
32+
class RedisInitKeyConfig(Enum):
33+
"""
34+
系统内置Redis键名
35+
"""
36+
37+
@property
38+
def key(self):
39+
return self.value.get('key')
40+
41+
@property
42+
def remark(self):
43+
return self.value.get('remark')
44+
45+
ACCESS_TOKEN = {'key': 'access_token', 'remark': '登录令牌信息'}
46+
SYS_DICT = {'key': 'sys_dict', 'remark': '数据字典'}
47+
SYS_CONFIG = {'key': 'sys_config', 'remark': '配置信息'}
48+
CAPTCHA_CODES = {'key': 'captcha_codes', 'remark': '图片验证码'}
49+
ACCOUNT_LOCK = {'key': 'account_lock', 'remark': '用户锁定'}
50+
PASSWORD_ERROR_COUNT = {'key': 'password_error_count', 'remark': '密码错误次数'}
51+
SMS_CODE = {'key': 'sms_code', 'remark': '短信验证码'}

ruoyi-fastapi-backend/config/env.py

Lines changed: 31 additions & 21 deletions
Original file line numberDiff line numberDiff line change
@@ -1,15 +1,16 @@
1+
import argparse
12
import os
23
import sys
3-
import argparse
4-
from pydantic_settings import BaseSettings
5-
from functools import lru_cache
64
from dotenv import load_dotenv
5+
from functools import lru_cache
6+
from pydantic_settings import BaseSettings
77

88

99
class AppSettings(BaseSettings):
1010
"""
1111
应用配置
1212
"""
13+
1314
app_env: str = 'dev'
1415
app_name: str = 'RuoYi-FasAPI'
1516
app_root_path: str = '/dev-api'
@@ -25,6 +26,7 @@ class JwtSettings(BaseSettings):
2526
"""
2627
Jwt配置
2728
"""
29+
2830
jwt_secret_key: str = 'b01c66dc2c58dc6a0aabfe2144256be36226de378bf87f72c0c795dda67f4d55'
2931
jwt_algorithm: str = 'HS256'
3032
jwt_expire_minutes: int = 1440
@@ -35,6 +37,7 @@ class DataBaseSettings(BaseSettings):
3537
"""
3638
数据库配置
3739
"""
40+
3841
db_host: str = '127.0.0.1'
3942
db_port: int = 3306
4043
db_username: str = 'root'
@@ -51,6 +54,7 @@ class RedisSettings(BaseSettings):
5154
"""
5255
Redis配置
5356
"""
57+
5458
redis_host: str = '127.0.0.1'
5559
redis_port: int = 6379
5660
redis_username: str = ''
@@ -62,20 +66,38 @@ class UploadSettings:
6266
"""
6367
上传配置
6468
"""
69+
6570
UPLOAD_PREFIX = '/profile'
6671
UPLOAD_PATH = 'vf_admin/upload_path'
6772
UPLOAD_MACHINE = 'A'
6873
DEFAULT_ALLOWED_EXTENSION = [
6974
# 图片
70-
"bmp", "gif", "jpg", "jpeg", "png",
75+
'bmp',
76+
'gif',
77+
'jpg',
78+
'jpeg',
79+
'png',
7180
# word excel powerpoint
72-
"doc", "docx", "xls", "xlsx", "ppt", "pptx", "html", "htm", "txt",
81+
'doc',
82+
'docx',
83+
'xls',
84+
'xlsx',
85+
'ppt',
86+
'pptx',
87+
'html',
88+
'htm',
89+
'txt',
7390
# 压缩文件
74-
"rar", "zip", "gz", "bz2",
91+
'rar',
92+
'zip',
93+
'gz',
94+
'bz2',
7595
# 视频格式
76-
"mp4", "avi", "rmvb",
96+
'mp4',
97+
'avi',
98+
'rmvb',
7799
# pdf
78-
"pdf"
100+
'pdf',
79101
]
80102
DOWNLOAD_PATH = 'vf_admin/download_path'
81103

@@ -90,23 +112,11 @@ class CachePathConfig:
90112
"""
91113
缓存目录配置
92114
"""
115+
93116
PATH = os.path.join(os.path.abspath(os.getcwd()), 'caches')
94117
PATHSTR = 'caches'
95118

96119

97-
class RedisInitKeyConfig:
98-
"""
99-
系统内置Redis键名
100-
"""
101-
ACCESS_TOKEN = {'key': 'access_token', 'remark': '登录令牌信息'}
102-
SYS_DICT = {'key': 'sys_dict', 'remark': '数据字典'}
103-
SYS_CONFIG = {'key': 'sys_config', 'remark': '配置信息'}
104-
CAPTCHA_CODES = {'key': 'captcha_codes', 'remark': '图片验证码'}
105-
ACCOUNT_LOCK = {'key': 'account_lock', 'remark': '用户锁定'}
106-
PASSWORD_ERROR_COUNT = {'key': 'password_error_count', 'remark': '密码错误次数'}
107-
SMS_CODE = {'key': 'sms_code', 'remark': '短信验证码'}
108-
109-
110120
class GetConfig:
111121
"""
112122
获取配置
Lines changed: 5 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -1,10 +1,11 @@
1-
from config.database import *
1+
from config.database import async_engine, AsyncSessionLocal, Base
22
from utils.log_util import logger
33

44

55
async def get_db():
66
"""
77
每一个请求处理完毕后会关闭当前连接,不同的请求使用不同的连接
8+
89
:return:
910
"""
1011
async with AsyncSessionLocal() as current_db:
@@ -14,9 +15,10 @@ async def get_db():
1415
async def init_create_table():
1516
"""
1617
应用启动时初始化数据库连接
18+
1719
:return:
1820
"""
19-
logger.info("初始化数据库连接...")
21+
logger.info('初始化数据库连接...')
2022
async with async_engine.begin() as conn:
2123
await conn.run_sync(Base.metadata.create_all)
22-
logger.info("数据库连接成功")
24+
logger.info('数据库连接成功')

0 commit comments

Comments
 (0)