1、后台系统设置settings页面增加一个开启关闭网站的按钮

2、如果网站关闭,前台页面所有请求暂时跳转单独的页如果网站关闭,前台页面所有请求暂时跳转单独的页面,页面内容 系统正在升级相关信息
3、要提供一个开发人员可以查看真实网站内容的入口
This commit is contained in:
2026-07-11 10:58:48 +08:00
parent 111c74c7c6
commit d2a30c58ca
11 changed files with 461 additions and 5 deletions
+38 -1
View File
@@ -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)