update. 添加jwt配置和接口权限配置

This commit is contained in:
2026-04-07 12:51:57 +08:00
parent 402f7e512e
commit 53e91fa458
2 changed files with 44 additions and 57 deletions
+41 -56
View File
@@ -10,6 +10,7 @@ For the full list of settings and their values, see
https://docs.djangoproject.com/en/6.0/ref/settings/
"""
import os
from datetime import timedelta
from pathlib import Path
import environ
@@ -221,63 +222,47 @@ MEDIA_URL = '/media/'
MEDIA_ROOT = os.path.join(BASE_DIR, 'media')
# 日志配置
LOGGING = {
'version': 1, # 版本
'disable_existing_loggers': False, # 是否禁用已经存在的日志器
'formatters': { # 日志信息显示的格式
'verbose': {
'format': '%(levelname)s %(asctime)s %(module)s %(lineno)d %(message)s'
},
'simple': {
'format': '%(levelname)s %(module)s %(lineno)d %(message)s'
},
},
'filters': { # 过滤器
'require_debug_true': { # django在debug模式下才输出日志
'()': 'django.utils.log.RequireDebugTrue',
},
},
'handlers': { # 日志处理方法
'console': { # 向终端中输出日志
'level': 'DEBUG', # 输出等级为“INFO”
'filters': ['require_debug_true'],
'class': 'logging.StreamHandler',
'formatter': 'simple'
},
'file': { # 向文件中输出日志
'level': os.getenv('LOGGER_LEVEL') if os.getenv('LOGGER_LEVEL') else 'INFO', # 输出等级为“INFO”
# 新增内容
# 'class': 'logging.handlers.TimedRotatingFileHandler',
# 'filename': os.path.join(BASE_DIR, 'logs/logs.log'),
# 'when': 'm',
# 'interval': 10,
# 'backupCount': 10,
'class': 'logging.handlers.RotatingFileHandler',
'filename': BASE_DIR / "db/logs/django_server.log", # 日志文件的位置
'maxBytes': 5 * 1024 * 1024, # 日志文件的大小(300*1024*1024为300MB
'backupCount': 10, # 日志文件的数量(超过设定的最大值会自动备份,备份数量最大值为10)
'formatter': 'verbose', # 日志输出格式:使用了在之前定义的'verbose'
'encoding': 'utf-8' # 新增此行,指定文件编码为UTF-8
},
},
'loggers': { # 日志器
'ptools': { # 定义了一个名为django的日志器
'handlers': ['console', 'file'], # 可以同时向终端与文件中输出日志
'propagate': True, # 是否继续传递日志信息
'level': os.getenv('LOGGER_LEVEL') if os.getenv('LOGGER_LEVEL') else 'INFO', # 日志器接收的最低日志级别
},
'requests': {
'level': 'WARNING',
'handlers': ['console'], # 或你定义的其他 handler
'propagate': False,
},
'urllib3': {
'level': 'WARNING',
'handlers': ['console'],
'propagate': False,
},
}
NINJA_JWT = {
'ACCESS_TOKEN_LIFETIME': timedelta(minutes=15), # 访问令牌有效期
'REFRESH_TOKEN_LIFETIME': timedelta(days=3), # 刷新令牌有效期
'ROTATE_REFRESH_TOKENS': False,
'BLACKLIST_AFTER_ROTATION': False, # 旋转后列入黑名单
'UPDATE_LAST_LOGIN': True, # 更新最后登录
'ALGORITHM': 'HS256',
'SIGNING_KEY': SECRET_KEY,
'VERIFYING_KEY': None,
'AUDIENCE': None,
'ISSUER': None,
'JWK_URL': None,
'LEEWAY': 0,
'USER_ID_FIELD': 'id',
'USER_ID_CLAIM': 'user_id',
'USER_AUTHENTICATION_RULE': 'ninja_jwt.authentication.default_user_authentication_rule',
# 'AUTH_TOKEN_CLASSES': ('ninja_jwt.tokens.AccessToken',),
# 'TOKEN_TYPE_CLAIM': 'token_type',
# 'TOKEN_USER_CLASS': 'ninja_jwt.models.TokenUser',
# 'JTI_CLAIM': 'jti',
#
# 'SLIDING_TOKEN_REFRESH_EXP_CLAIM': 'refresh_exp',
# 'SLIDING_TOKEN_LIFETIME': timedelta(minutes=5),
# 'SLIDING_TOKEN_REFRESH_LIFETIME': timedelta(days=1),
# For Controller Schemas
# FOR OBTAIN PAIR
# 'TOKEN_OBTAIN_PAIR_INPUT_SCHEMA': "ninja_jwt.schema.TokenObtainPairInputSchema",
# 'TOKEN_OBTAIN_PAIR_REFRESH_INPUT_SCHEMA': "ninja_jwt.schema.TokenRefreshInputSchema",
# FOR SLIDING TOKEN
# 'TOKEN_OBTAIN_SLIDING_INPUT_SCHEMA': "ninja_jwt.schema.TokenObtainSlidingInputSchema",
# 'TOKEN_OBTAIN_SLIDING_REFRESH_INPUT_SCHEMA': "ninja_jwt.schema.TokenRefreshSlidingInputSchema",
#
# 'TOKEN_BLACKLIST_INPUT_SCHEMA': "ninja_jwt.schema.TokenBlacklistInputSchema",
# 'TOKEN_VERIFY_INPUT_SCHEMA': "ninja_jwt.schema.TokenVerifyInputSchema",
}
# 调整POST传输数据文件大小限制
DATA_UPLOAD_MAX_MEMORY_SIZE = 25 * 1024 * 1024 * 1024
FILE_UPLOAD_MAX_MEMORY_SIZE = 25 * 1024 * 1024 * 1024
+3 -1
View File
@@ -28,6 +28,7 @@ from loguru import logger
from ninja.errors import ValidationError
from ninja_extra import NinjaExtraAPI
from ninja_jwt.controller import NinjaJWTDefaultController
from ninja_jwt.authentication import JWTAuth
from base.views import custom_upload_file
from common.common_response import CommonResponse
@@ -92,10 +93,11 @@ class UnifiedNinjaAPI(NinjaExtraAPI):
return super().create_response(request, data, status=status, temporal_response=temporal_response)
api_v1 = UnifiedNinjaAPI(version='1.0.0')
api_v1 = UnifiedNinjaAPI(version='1.0.0', auth=JWTAuth())
api_v1.register_controllers(NinjaJWTDefaultController)
auto_load_routers()
logger.debug(api_v1.urls)
@api_v1.exception_handler(ValidationError)