1、后台系统设置settings页面增加一个开启关闭网站的按钮
2、如果网站关闭,前台页面所有请求暂时跳转单独的页如果网站关闭,前台页面所有请求暂时跳转单独的页面,页面内容 系统正在升级相关信息 3、要提供一个开发人员可以查看真实网站内容的入口
This commit is contained in:
@@ -16,6 +16,7 @@ from app.middleware.logging import RequestLoggingMiddleware
|
||||
from app.middleware.anti_crawler import AntiCrawlerMiddleware
|
||||
from app.middleware.rate_limit import RateLimitMiddleware
|
||||
from app.middleware.request_encrypt import RequestEncryptMiddleware
|
||||
from app.middleware.site_status import SiteStatusMiddleware
|
||||
from app.services.log_config import decrypt_data
|
||||
|
||||
logging.basicConfig(level=logging.INFO if settings.DEBUG else logging.WARNING)
|
||||
@@ -29,6 +30,7 @@ async def lifespan(app: FastAPI):
|
||||
os.makedirs(settings.UPLOAD_LOCAL_PATH, exist_ok=True)
|
||||
await init_database()
|
||||
await init_redis()
|
||||
await _ensure_site_configs()
|
||||
# await _seed_data()
|
||||
|
||||
# Start task queue (handles both video and image generation)
|
||||
@@ -513,6 +515,40 @@ async def _seed_data():
|
||||
await db.commit()
|
||||
|
||||
|
||||
async def _ensure_site_configs() -> None:
|
||||
"""确保网站开关相关配置项存在(不存在则自动创建)。"""
|
||||
import secrets
|
||||
from app.models.base import async_session
|
||||
from app.models.system_config import SystemConfig
|
||||
from app.utils.id_gen import generate_id
|
||||
from sqlalchemy import select
|
||||
|
||||
async with async_session() as db:
|
||||
# site_enabled
|
||||
existing = await db.execute(
|
||||
select(SystemConfig).where(SystemConfig.key == "site_enabled").limit(1)
|
||||
)
|
||||
if not existing.scalar_one_or_none():
|
||||
db.add(SystemConfig(
|
||||
id=generate_id(),
|
||||
key="site_enabled",
|
||||
value="true",
|
||||
description="网站访问开关(true=开启,false=关闭)",
|
||||
))
|
||||
# site_dev_access_token
|
||||
existing_token = await db.execute(
|
||||
select(SystemConfig).where(SystemConfig.key == "site_dev_access_token").limit(1)
|
||||
)
|
||||
if not existing_token.scalar_one_or_none():
|
||||
db.add(SystemConfig(
|
||||
id=generate_id(),
|
||||
key="site_dev_access_token",
|
||||
value=secrets.token_urlsafe(32),
|
||||
description="开发者访问令牌(网站关闭时用于绕过限制)",
|
||||
))
|
||||
await db.commit()
|
||||
|
||||
|
||||
def create_app() -> FastAPI:
|
||||
application = FastAPI(
|
||||
title=settings.APP_NAME,
|
||||
@@ -522,7 +558,8 @@ def create_app() -> FastAPI:
|
||||
redoc_url="/internal/api-redoc",
|
||||
)
|
||||
|
||||
# Middleware (outermost first)
|
||||
# Middleware (outermost first) — SiteStatus 放最外层,早于其他中间件拦截
|
||||
application.add_middleware(SiteStatusMiddleware)
|
||||
application.add_middleware(RequestLoggingMiddleware)
|
||||
application.add_middleware(AntiCrawlerMiddleware)
|
||||
application.add_middleware(RateLimitMiddleware)
|
||||
|
||||
Reference in New Issue
Block a user