|
| 1 | +import os |
1 | 2 | from fastapi.security import OAuth2PasswordBearer |
2 | 3 | from passlib.context import CryptContext |
3 | | -import os |
4 | 4 | from loguru import logger |
5 | 5 |
|
6 | | -# ####### 数据库链接 |
| 6 | +from exceptions import MissingRequireConfig |
| 7 | + |
| 8 | +# #### 日志路径 |
| 9 | +BASE_DIR = os.path.dirname(os.path.abspath(__file__)) |
7 | 10 |
|
8 | | -# 形如 mysql+pymysql://root:passwd@127.0.0.1:3306/MemoryCard?charset=utf8mb4 |
| 11 | +LOG_FILE_PATH = os.path.join(BASE_DIR, "logs") |
| 12 | +LOG_FILE_FORMATE = "MemoryCard_{time}.log" |
| 13 | + |
| 14 | +# 日志配置 |
| 15 | +LOGGING_CONFIG = { |
| 16 | + "logger": { |
| 17 | + "path": LOG_FILE_PATH, |
| 18 | + "filename": LOG_FILE_FORMATE, |
| 19 | + "level": "info", |
| 20 | + "rotation": "1 MB", |
| 21 | + "retention": "1 months", |
| 22 | + "format": "<level>{level: <8}</level> <green>{time:YYYY-MM-DD HH:mm:ss.SSS}</green> request id: {extra[request_id]} - <cyan>{name}</cyan>:<cyan>{function}</cyan> - <level>{message}</level>" |
| 23 | + |
| 24 | + } |
| 25 | +} |
| 26 | + |
| 27 | +# ####### 数据库链接 |
9 | 28 | ASYNC_SQLALCHEMY_DATABASE_URL = '' |
10 | 29 |
|
11 | 30 | # ######### jwt |
12 | | -SECRET_KEY = "09d25e094faa6ca2556c818166b7a9563b93f7099f6f0f4caa6cf63b88e8d3e7" |
| 31 | +SECRET_KEY = "" |
13 | 32 | ALGORITHM = "HS256" # jwt加密算法 |
14 | 33 | ACCESS_TOKEN_EXPIRE_MINUTES = 60 * 6 # 访问令牌过期分钟, 默认6小时 |
15 | | - |
16 | 34 | oauth2_schema = OAuth2PasswordBearer(tokenUrl="/user/token") |
17 | | - |
18 | 35 | pwd_context = CryptContext(schemes=["bcrypt"], deprecated="auto") |
19 | 36 |
|
| 37 | +# ###### 检验配置 |
20 | 38 | if os.path.isfile("local_settings.py"): |
21 | 39 | from local_settings import * |
22 | 40 | else: |
23 | 41 | f = open("local_settings.py", mode="w", encoding="utf-8") |
24 | 42 | f.close() |
25 | | - raise Exception("请先配置local_settings, 详情见README") |
| 43 | + |
| 44 | +if not SECRET_KEY: |
| 45 | + f = open("local_settings.py", mode="a", encoding="utf-8") |
| 46 | + # 动态 生成 SECRET_KEY |
| 47 | + import secrets |
| 48 | + |
| 49 | + SECRET_KEY = secrets.token_hex(32) |
| 50 | + f.write(f"\nSECRET_KEY = '{SECRET_KEY}'\n") |
| 51 | + f.close() |
| 52 | + logger.add(os.path.join(LOG_FILE_PATH, "init_settings.log"), rotation="1 MB", |
| 53 | + format=LOGGING_CONFIG["logger"]["format"]) # 滚动大日志文件 |
| 54 | + logger.warning("初始化SECRET_KEY") |
| 55 | + |
| 56 | +if not ASYNC_SQLALCHEMY_DATABASE_URL: |
| 57 | + raise MissingRequireConfig("ASYNC_SQLALCHEMY_DATABASE_URL") |
26 | 58 |
|
27 | 59 | # ######### 一些初始数据 |
28 | 60 |
|
|
35 | 67 | "delete_plan": 6, |
36 | 68 | "create_plan": 7, |
37 | 69 | } |
38 | | -# #### 日志路径 |
39 | | -BASE_DIR = os.path.dirname(os.path.abspath(__file__)) |
40 | | - |
41 | | -LOG_FILE_PATH = os.path.join(BASE_DIR, "logs") |
42 | | -LOG_FILE_FORMATE = "MemoryCard_{time}.log" |
43 | | -# 日志配置 |
44 | | -LOGGING_CONFIG = { |
45 | | - "logger": { |
46 | | - "path": LOG_FILE_PATH, |
47 | | - "filename": LOG_FILE_FORMATE, |
48 | | - "level": "info", |
49 | | - "rotation": "1 MB", |
50 | | - "retention": "1 months", |
51 | | - "format": "<level>{level: <8}</level> <green>{time:YYYY-MM-DD HH:mm:ss.SSS}</green> request id: {extra[request_id]} - <cyan>{name}</cyan>:<cyan>{function}</cyan> - <level>{message}</level>" |
52 | | - |
53 | | - } |
54 | | -} |
|
0 commit comments