diff --git a/README.md b/README.md index c4454b226675c7cbdba97c1170022cafbbe6a5b3..e6442553c911423f2244a5c5f9e03de4272c4731 100644 --- a/README.md +++ b/README.md @@ -1,12 +1,12 @@

logo

-

RuoYi-Vue-FastAPI v1.1.1

+

RuoYi-Vue-FastAPI v1.1.2

基于RuoYi-Vue+FastAPI前后端分离的快速开发框架

- + @@ -17,6 +17,7 @@ + ## 平台简介 RuoYi-Vue-FastAPI是一套全部开源的快速开发平台,毫无保留给个人及企业免费使用。 diff --git a/ruoyi-fastapi-backend/.env.dev b/ruoyi-fastapi-backend/.env.dev index 099fdbbc9b3151fc7a9be6a67fba4312e1cdc40c..6249b39f8240c8cd3cbf38c2e801722c5b6b4da2 100644 --- a/ruoyi-fastapi-backend/.env.dev +++ b/ruoyi-fastapi-backend/.env.dev @@ -10,7 +10,7 @@ APP_HOST = '0.0.0.0' # 应用端口 APP_PORT = 9099 # 应用版本 -APP_VERSION= '1.1.1' +APP_VERSION= '1.1.2' # 应用是否开启热重载 APP_RELOAD = true # 应用是否开启IP归属区域查询 @@ -42,6 +42,14 @@ DB_PASSWORD = 'mysqlroot' DB_DATABASE = 'ruoyi-fastapi' # 是否开启sqlalchemy日志 DB_ECHO = true +# 允许溢出连接池大小的最大连接数 +DB_MAX_OVERFLOW = 10 +# 连接池大小,0表示连接数无限制 +DB_POOL_SIZE = 50 +# 连接回收时间(单位:秒) +DB_POOL_RECYCLE = 3600 +# 连接池中没有线程可用时,最多等待的时间(单位:秒) +DB_POOL_TIMEOUT = 30 # -------- Redis配置 -------- # Redis主机 diff --git a/ruoyi-fastapi-backend/.env.prod b/ruoyi-fastapi-backend/.env.prod index a4c6607e75572b2f3e3ce41ea17cde1564eee8db..c9e201f14b2acb52a091fc197284f50743bba802 100644 --- a/ruoyi-fastapi-backend/.env.prod +++ b/ruoyi-fastapi-backend/.env.prod @@ -10,7 +10,7 @@ APP_HOST = '0.0.0.0' # 应用端口 APP_PORT = 9099 # 应用版本 -APP_VERSION= '1.1.1' +APP_VERSION= '1.1.2' # 应用是否开启热重载 APP_RELOAD = false # 应用是否开启IP归属区域查询 @@ -42,6 +42,14 @@ DB_PASSWORD = 'root' DB_DATABASE = 'ruoyi-fastapi' # 是否开启sqlalchemy日志 DB_ECHO = true +# 允许溢出连接池大小的最大连接数 +DB_MAX_OVERFLOW = 10 +# 连接池大小,0表示连接数无限制 +DB_POOL_SIZE = 50 +# 连接回收时间(单位:秒) +DB_POOL_RECYCLE = 3600 +# 连接池中没有线程可用时,最多等待的时间(单位:秒) +DB_POOL_TIMEOUT = 30 # -------- Redis配置 -------- # Redis主机 diff --git a/ruoyi-fastapi-backend/config/database.py b/ruoyi-fastapi-backend/config/database.py index 4f00f8b73d941698ad19824c8eed134ba2afc1d9..cb871ecb816a3ad308b6ca2758209f92da6d21e4 100644 --- a/ruoyi-fastapi-backend/config/database.py +++ b/ruoyi-fastapi-backend/config/database.py @@ -8,7 +8,12 @@ SQLALCHEMY_DATABASE_URL = f"mysql+pymysql://{DataBaseConfig.db_username}:{quote_ f"{DataBaseConfig.db_host}:{DataBaseConfig.db_port}/{DataBaseConfig.db_database}" engine = create_engine( - SQLALCHEMY_DATABASE_URL, echo=DataBaseConfig.db_echo + SQLALCHEMY_DATABASE_URL, + echo=DataBaseConfig.db_echo, + max_overflow=DataBaseConfig.db_max_overflow, + pool_size=DataBaseConfig.db_pool_size, + pool_recycle=DataBaseConfig.db_pool_recycle, + pool_timeout=DataBaseConfig.db_pool_timeout ) SessionLocal = sessionmaker(autocommit=False, autoflush=False, bind=engine) Base = declarative_base() diff --git a/ruoyi-fastapi-backend/config/env.py b/ruoyi-fastapi-backend/config/env.py index 236b53ea8b7aad97dee4eb10fe3041e950a7d179..71718f926d1e6eb17fc7d33aafe133a5291f0761 100644 --- a/ruoyi-fastapi-backend/config/env.py +++ b/ruoyi-fastapi-backend/config/env.py @@ -41,6 +41,10 @@ class DataBaseSettings(BaseSettings): db_password: str = 'mysqlroot' db_database: str = 'ruoyi-fastapi' db_echo: bool = True + db_max_overflow: int = 10 + db_pool_size: int = 50 + db_pool_recycle: int = 3600 + db_pool_timeout: int = 30 class RedisSettings(BaseSettings): diff --git a/ruoyi-fastapi-backend/module_admin/annotation/log_annotation.py b/ruoyi-fastapi-backend/module_admin/annotation/log_annotation.py index 079bfd0f2720e8e43e075733ab842afbf653cfb5..e86439159831e608f63938539d7f0c4344a73c59 100644 --- a/ruoyi-fastapi-backend/module_admin/annotation/log_annotation.py +++ b/ruoyi-fastapi-backend/module_admin/annotation/log_annotation.py @@ -1,4 +1,4 @@ -from functools import wraps +from functools import wraps, lru_cache from fastapi import Request from fastapi.responses import JSONResponse, ORJSONResponse, UJSONResponse import inspect @@ -52,21 +52,7 @@ def log_decorator(title: str, business_type: int, log_type: Optional[str] = 'ope oper_ip = request.headers.get("X-Forwarded-For") oper_location = '内网IP' if AppConfig.app_ip_location_query: - try: - if oper_ip != '127.0.0.1' and oper_ip != 'localhost': - ip_result = requests.get(f'https://qifu-api.baidubce.com/ip/geo/v1/district?ip={oper_ip}') - if ip_result.status_code == 200: - prov = ip_result.json().get('data').get('prov') - city = ip_result.json().get('data').get('city') - if prov or city: - oper_location = f'{prov}-{city}' - else: - oper_location = '未知' - else: - oper_location = '未知' - except Exception as e: - oper_location = '未知' - print(e) + oper_location = get_ip_location(oper_ip) # 根据不同的请求类型使用不同的方法获取请求参数 content_type = request.headers.get("Content-Type") if content_type and ("multipart/form-data" in content_type or 'application/x-www-form-urlencoded' in content_type): @@ -175,3 +161,26 @@ def log_decorator(title: str, business_type: int, log_type: Optional[str] = 'ope return wrapper return decorator + + +@lru_cache() +def get_ip_location(oper_ip: str): + """ + 查询ip归属区域 + :param oper_ip: 需要查询的ip + :return: ip归属区域 + """ + oper_location = '内网IP' + try: + if oper_ip != '127.0.0.1' and oper_ip != 'localhost': + oper_location = '未知' + ip_result = requests.get(f'https://qifu-api.baidubce.com/ip/geo/v1/district?ip={oper_ip}') + if ip_result.status_code == 200: + prov = ip_result.json().get('data').get('prov') + city = ip_result.json().get('data').get('city') + if prov or city: + oper_location = f'{prov}-{city}' + except Exception as e: + oper_location = '未知' + print(e) + return oper_location diff --git a/ruoyi-fastapi-backend/module_admin/service/user_service.py b/ruoyi-fastapi-backend/module_admin/service/user_service.py index 29a04b6810bcefd0c76f99a13c74f5bb7b84ea8d..9f8f1e3bf6cb36a1c56ccd9f732b350acdac1dc3 100644 --- a/ruoyi-fastapi-backend/module_admin/service/user_service.py +++ b/ruoyi-fastapi-backend/module_admin/service/user_service.py @@ -206,7 +206,7 @@ class UserService: :param page_object: 重置用户对象 :return: 重置用户校验结果 """ - reset_user = page_object.model_dump(exclude_unset=True) + reset_user = page_object.model_dump(exclude_unset=True, exclude={'admin'}) if page_object.old_password: user = UserDao.get_user_detail_by_id(query_db, user_id=page_object.user_id).get('user_basic_info') if not PwdUtil.verify_password(page_object.old_password, user.password): diff --git a/ruoyi-fastapi-frontend/package.json b/ruoyi-fastapi-frontend/package.json index bb0aff529362aa4a62a8e754f9f4d1cea5fa6f67..8b59cc2d8d853d023be9447ed12ff995f3c5cb16 100644 --- a/ruoyi-fastapi-frontend/package.json +++ b/ruoyi-fastapi-frontend/package.json @@ -1,6 +1,6 @@ { "name": "vfadmin", - "version": "1.1.1", + "version": "1.1.2", "description": "vfadmin管理系统", "author": "insistence", "license": "MIT",