11import os
2+ import sys
3+ import argparse
4+ from pydantic import BaseSettings
5+ from functools import lru_cache
6+ from dotenv import load_dotenv
27
38
4- class JwtConfig :
9+ class AppSettings (BaseSettings ):
10+ """
11+ 应用配置
12+ """
13+ app_env : str = 'dev'
14+ app_name : str = 'RuoYi-FasAPI'
15+ app_root_path : str = '/dev-api'
16+ app_host : str = '0.0.0.0'
17+ app_port : int = 9099
18+ app_version : str = '1.0.0'
19+ app_reload : bool = True
20+
21+
22+ class JwtSettings (BaseSettings ):
523 """
624 Jwt配置
725 """
8- SECRET_KEY = " b01c66dc2c58dc6a0aabfe2144256be36226de378bf87f72c0c795dda67f4d55"
9- ALGORITHM = " HS256"
10- ACCESS_TOKEN_EXPIRE_MINUTES = 1440
11- REDIS_TOKEN_EXPIRE_MINUTES = 30
26+ jwt_secret_key : str = ' b01c66dc2c58dc6a0aabfe2144256be36226de378bf87f72c0c795dda67f4d55'
27+ jwt_algorithm : str = ' HS256'
28+ jwt_expire_minutes : int = 1440
29+ jwt_redis_expire_minutes : int = 30
1230
1331
14- class DataBaseConfig :
32+ class DataBaseSettings ( BaseSettings ) :
1533 """
1634 数据库配置
1735 """
18- HOST = " 127.0.0.1"
19- PORT = 3306
20- USERNAME = 'root'
21- PASSWORD = 'mysqlroot'
22- DB = 'dash -fastapi'
36+ db_host : str = ' 127.0.0.1'
37+ db_port : int = 3306
38+ db_username : str = 'root'
39+ db_password : str = 'mysqlroot'
40+ db_database : str = 'ruoyi -fastapi'
2341
2442
25- class RedisConfig :
43+ class RedisSettings ( BaseSettings ) :
2644 """
2745 Redis配置
2846 """
29- HOST = " 127.0.0.1"
30- PORT = 6379
31- USERNAME = ''
32- PASSWORD = ''
33- DB = 2
47+ redis_host : str = ' 127.0.0.1'
48+ redis_port : int = 6379
49+ redis_username : str = ''
50+ redis_password : str = ''
51+ redis_database : int = 2
3452
3553
3654class CachePathConfig :
@@ -52,3 +70,82 @@ class RedisInitKeyConfig:
5270 ACCOUNT_LOCK = {'key' : 'account_lock' , 'remark' : '用户锁定' }
5371 PASSWORD_ERROR_COUNT = {'key' : 'password_error_count' , 'remark' : '密码错误次数' }
5472 SMS_CODE = {'key' : 'sms_code' , 'remark' : '短信验证码' }
73+
74+
75+ class GetConfig :
76+ """
77+ 获取配置
78+ """
79+
80+ def __init__ (self ):
81+ self .parse_cli_args ()
82+
83+ @lru_cache ()
84+ def get_app_config (self ):
85+ """
86+ 获取应用配置
87+ """
88+ # 实例化应用配置模型
89+ return AppSettings ()
90+
91+ @lru_cache ()
92+ def get_jwt_config (self ):
93+ """
94+ 获取Jwt配置
95+ """
96+ # 实例化Jwt配置模型
97+ return JwtSettings ()
98+
99+ @lru_cache ()
100+ def get_database_config (self ):
101+ """
102+ 获取数据库配置
103+ """
104+ # 实例化数据库配置模型
105+ return DataBaseSettings ()
106+
107+ @lru_cache ()
108+ def get_redis_config (self ):
109+ """
110+ 获取Redis配置
111+ """
112+ # 实例化Redis配置模型
113+ return RedisSettings ()
114+
115+ @staticmethod
116+ def parse_cli_args ():
117+ """
118+ 解析命令行参数
119+ """
120+ if 'uvicorn' in sys .argv [0 ]:
121+ # 使用uvicorn启动时,命令行参数需要按照uvicorn的文档进行配置,无法自定义参数
122+ pass
123+ else :
124+ # 使用argparse定义命令行参数
125+ parser = argparse .ArgumentParser (description = '命令行参数' )
126+ parser .add_argument ('--env' , type = str , default = '' , help = '运行环境' )
127+ # 解析命令行参数
128+ args = parser .parse_args ()
129+ # 设置环境变量,如果未设置命令行参数,默认APP_ENV为dev
130+ os .environ ['APP_ENV' ] = args .env if args .env else 'dev'
131+ # 读取运行环境
132+ run_env = os .environ .get ('APP_ENV' , '' )
133+ # 运行环境未指定时默认加载.env.dev
134+ env_file = '.env.dev'
135+ # 运行环境不为空时按命令行参数加载对应.env文件
136+ if run_env != '' :
137+ env_file = f'.env.{ run_env } '
138+ # 加载配置
139+ load_dotenv (env_file )
140+
141+
142+ # 实例化获取配置类
143+ get_config = GetConfig ()
144+ # 应用配置
145+ AppConfig = get_config .get_app_config ()
146+ # Jwt配置
147+ JwtConfig = get_config .get_jwt_config ()
148+ # 数据库配置
149+ DataBaseConfig = get_config .get_database_config ()
150+ # Redis配置
151+ RedisConfig = get_config .get_redis_config ()
0 commit comments