bwstudio
|
be99b8a925
|
feat(data): 数据库搬到 data/ 目录 + SQLite WAL + 单卷绑定挂载
- config.py 新增 PEAR_DATA_DIR(默认 <项目根>/data),SQLite 库、Flask-Session
统一收进 DATA_DIR;不设时本地开发行为不变
- applications/__init__.py 顶部先 load_dotenv,保证 .env 里的 PEAR_DATA_DIR
在 config 导入时就生效
- extensions/init_sqlalchemy.py 接 SQLite connect 事件:WAL + synchronous=NORMAL
+ busy_timeout=30s(多 worker 写不再撞锁)
- config.py 注入 SQLALCHEMY_ENGINE_OPTIONS(pool_pre_ping + SQLite connect_args
超时;MySQL 路径下自动跳过 connect_args 防止参数错误)
- 新增 alembic 迁移 a47a5d2a3f1b 建 site_nav_click(含 anon_id 字段),
解决之前该表只由 db.create_all 建、不在迁移链里的隐患
- .gitignore / .dockerignore 加 data/ 排除规则(且把 migrations/ 从
ignore 里重新放行 —— 否则新加的迁移进不了库)
- NAS Docker 部署全面重写:
- compose 唯一绑定挂载 ./data:/app/data,宿主 File Station 看得见
- start.sh 自检 data 目录 + 子目录;workers 默认改为 1 threads 8
(SQLite 写串行,单进程最稳)
- 新增 backup.sh:sqlite3 .backup 在线热备(确保 WAL 一致性)+ 压缩
+ 保留 14 天
- Dockerfile 安装 sqlite3 客户端备用,建 /app/data 子目录并 chown
- docs/deployment-nas.md 重写数据持久化章节(路径表 + 热备命令 +
恢复步骤 + 整库迁移 tar/untar 流程)
|
2026-09-06 19:43:28 +08:00 |
|
bwstudio
|
34e8010830
|
feat(site): 方案 C - 「我常访问」个人榜(匿名 ID + localStorage 合并)
- NavClick 加 anon_id 字段(已为历史表自动迁移)
- 后端静默下发 wk_anon cookie(uuid4,1 年,HttpOnly)
- 点击埋点写入 anon_id;新增 GET /site/api/my-top 与 POST /site/api/my-clear
- 首页服务端渲染「我常访问」区(时间衰减加权分),与「热门网址」共显
- 前端 localStorage 累计 + 与服务端榜取 max 合并;冷启动阈值 2 个网址
- 一键清除:清 localStorage + 服务端删该匿名 ID 的全部记录
- 移动端抽屉、顶部导航同步加「我常访问」入口
- 底部隐私说明更新
|
2026-09-06 19:16:45 +08:00 |
|
bwstudio
|
a47ad991d0
|
feat(public): 首页增加「热门网址」分类(访问量 TOP12)
跨分类聚合:按 NavClick 总点击数倒序,取前 12 个有效 nav。
实现要点:
- applications/view/public/nav.py: 新增 _top_navs(limit=12),
复用 get_nav_visit_counts() 的 60s 进程内缓存;同点击数按 id asc 稳定排序;
0 点击返回空列表(前端整段不渲染)
- _render_index() 注入 top_navs 到模板
- templates/public/index.html: 在 groups 循环前渲染 .section-hot,标题「🔥 热门网址」,
meta 显示「近期访问量最大的 N 个」;卡片复用 .card,新增 .card-top 类
- templates/public/base.html:
- .card-top:左侧 3px 品牌色边框 + 浅色背景渐变 + hover 增强阴影
- .section-hot h2 图标用 brand-orange #ff6b35
- .cat-nav-inner a.cat-nav-hot 顶部导航热门入口用品牌色
- 抽屉:首页 top_navs 非空时插入「🔥 热门」区段,链接到 #cat-top
边界:
- 没有任何点击时整段隐藏(包括抽屉和顶部 nav),不出现「0 个」空标题
- 同一 nav 不会重复(按 nav.id 维度聚合)
- Nav.enable=0 的不会进 TOP12
验证:
- 15 个 nav 各灌入 20..6 次点击,前 12 个按降序显示访问数 20..9
- 清空所有 NavClick 后首页 section-hot / #cat-top / .cat-drawer-hot 三处全不渲染
- 测试数据已清理
|
2026-09-06 18:52:05 +08:00 |
|
bwstudio
|
98edfdaf2d
|
feat(deploy): 个人 NAS 单机 Docker 部署方案
适用:内网 / 家庭 / 小团队(≤50 并发),无 K8s 需求。
特性:单容器 + SQLite + 端口暴露,最小维护成本。
新增:
- deploy/nas/Dockerfile: python:3.11-slim 基础镜像 + 非 root + HEALTHCHECK
- deploy/nas/start.sh: flask db upgrade 幂等迁移 + gunicorn (2 workers × 4 threads)
- deploy/nas/docker-compose.yaml: 单服务 + 4 个命名卷 (db/logs/session/upload) + 资源限制
- docs/deployment-nas.md: 完整部署/备份/升级/排障指南
完善:
- .env.example: 改为生产环境导向 (PEAR_ENV=pro,SECRET_KEY 必填)
- .dockerignore: 排除 deploy/dev (开发用容器配置)、tests/截图、一次性脚本
- applications/view/public/__init__.py: 注释说明 /healthz 已在 applications/view/health.py 注册
复用现有:
- /healthz 接口 (applications/view/health.py) 含 DB 探活,DB 不可达返回 503
→ 容器 HEALTHCHECK 直接用 /healthz 即可
⚠️ 本机无 docker,未执行 docker build 验证;已静态校验 YAML/bash 语法、
文件路径、.env 字段消费、ProConfig 严格性、/healthz 端点可用性。
首次 NAS 上部署时跑一遍文档步骤即可。
|
2026-09-06 18:35:31 +08:00 |
|
bwstudio
|
0ffc103e46
|
feat(plugins): 4 个业务插件代码 + 前台公开页面改造
plugins/navManager:导航 CRUD + 导航分类 CRUD(独立 blueprint)
plugins/friendManager:友情链接 CRUD
plugins/aboutManager:关于本站 CRUD
plugins/siteStats:访问统计主页 + JSON 接口 + /site/* GET 埋点 + nav 卡片点击埋点
applications/view/public/nav.py:导航聚合页 / 分类详情 / JSON 接口,支持 visit_count 注入
applications/view/public/about.py:关于本站公开页
applications/view/public/friend.py:友情链接公开页
templates/public/base.html:响应式首页(搜索框 / 分类抽屉 / 5 主题切换 / footer 隐私小字)
templates/public/index.html / category.html:卡片右下角访问次数
templates/public/about.html / friend.html:关于 + 友链前台页
docs/plugins-development.md:插件开发完整指南(生命周期 + 4 个示例 + FAQ + framework 迁移)
scripts/:探针与端到端验证脚本(probe_*/verify_*/test_*)
|
2026-09-06 18:18:06 +08:00 |
|
bwstudio
|
1ea69c2c34
|
refactor(plugins): 将导航/友链/关于/统计 4 模块迁出 framework 至 plugins
- 在 applications/config.py 中通过 PLUGIN_ENABLE_FOLDERS 启用 4 个业务插件
- 删除 framework 内 applications/view/system/nav.py 与 templates/system/nav/* 模板
- applications/extensions/init_plugs 移除重复的 broadcast_execute('event_init'/'event_finish')
(由 init_bps / init_script 触发,避免 Blueprint 注册冲突)
- applications/view/system/index.py:未登录访问 / 直接渲染前台公开聚合页
- templates/system/index.html:移动端首屏即折叠侧边栏
- 新增 5 个 model(Nav 字段 status→enable 兼容、NavCategory、About、Friend、VisitLog/PageStat、NavClick)
- 新增 2 个 schema(NavCategorySchema、FriendOutSchema/ManageSchema)
- admin_about/admin_friend/admin_nav_category 在 init.json 中以「网站管理」分组挂载
- .gitignore 补充一次性备份、调试截图、探针截图不入库
|
2026-09-06 18:17:52 +08:00 |
|
bwstudio
|
1214bfdf4a
|
feat(ops): 环境变量化配置 + 健康检查 + 启动脚本 + 部署/安全文档
主要变更:
config
- 引入 python-dotenv,从 .env 加载 SECRET_KEY / MAIL_* / SQLALCHEMY_DATABASE_URI
- 拆分 BaseConfig / DevConfig / ProConfig,PEAR_ENV 控制切换
- ProConfig 在 init_app() 校验 SECRET_KEY,禁止使用默认值
ops
- 新增 /healthz 端点:DB 探活 + 环境名 + 时间戳,失败返回 503
- 新增 start.bat (Windows) / Makefile (跨平台) 一键启动 / 初始化
- 新增 .env.example 模板;.gitignore 排除 .env / logs / vscode 等
- 新增 docs/DEPLOY.md(部署指南)和 docs/SECURITY.md(安全清单)
- app.py 不再硬编码 debug=False,交给配置类决定
本提交不包含上一次会话的其它工作树修改(模板/导航相关),后续单独 PR。
|
2026-09-05 20:46:12 +08:00 |
|
bwstudio
|
115585c00d
|
feat(nav): 从 nav.bwhome.top 同步 5 个分类共 54 条导航
分类与数量
- 常用分类(4 条):短信平台、BT网站大全、菜鸟教程、旺柯博客
- 旺珂内网(10 条):MoviePilot / Jellyfin / qBittorent / 旁路由 / 小雅电影 / QNAP / NextCloud / PVE / BW gitea / 家庭服务器
- 常用网站(4 条):百度 / 豆瓣 / 新浪 / DeepSeek
- 休闲娱乐(18 条):HDFans / OKPT / HDTime / 小蚂蚁PT / HDArea / 铂金学院 / carpt / hdkyl / tosky / 52PT / 1PTBA / PTZONE / 馒头 / 铜钟音乐 / PTFans / 咖啡 / BTSCHOOL / 库非
- 技术网站(18 条):JFinal / shadmin / layuijfinal / respeed / 网站代理 / Layui / GitHub加速 / down.npee / DNS查询 / DOCK状态 / 博旺 / chromeDriver / 系统更新 / 免费节点 / Clash节点 / 狐蒂云 / chatgpt / NVIDIA AI
数据来源:https://nav.bwhome.top(OneNav 系统)
已 flask admin init --force 灌入数据库并通过 /site/api/navs 验证
|
2026-09-05 15:15:33 +08:00 |
|
bwstudio
|
b208087f74
|
feat(nav): 新增前台公开导航页与后台导航管理
新增模块
- Nav 模型(applications/models/admin_nav.py):公开导航表,与 admin_power 解耦
- NavOutSchema / NavManageSchema(applications/schemas/admin_nav.py)
- 前台公开视图 applications/view/public/nav.py:/site/、/site/category/<name>、/site/api/navs,无需登录
- 后台管理视图 applications/view/system/nav.py:CRUD + 启用/禁用,挂入 system_bp
- 前台模板 templates/public/{base,index,category}.html(独立配色,无需登录即可访问)
- 后台模板 templates/system/nav/{main,add,edit}.html(Layui table + form)
调整
- applications/view/__init__.py:注册前台蓝图到根
- applications/view/system/__init__.py:注册后台 nav 子蓝图
- applications/common/script/admin.py:admin init/export 支持 navs 数组
- applications/common/script/app_data/init.json:新增 10 条导航种子 + 4 条 system:nav 权限
数据库
- 新增 public_nav 表(含 category 索引)
- migration: 38751d88d42c_add_public_nav_table.py
|
2026-09-05 14:58:08 +08:00 |
|
不胜舟
|
12c31a8e8a
|
重构 admin 初始化:改为 JSON 配置,增加导入导出功能
|
2026-01-16 18:43:03 +08:00 |
|
 laoknasandGitee
|
0ebc9394ad
|
update applications/extensions/__init__.py.
在 init_plugs 函数中添加了两个关键的事件广播调用:
- 第33行: broadcast_execute(app, 'event_init')
- 第34行: broadcast_execute(app, 'event_finish')
### 执行流程优化
修改后的 init_plugs 函数执行流程更加合理:
1. 加载插件模块 :注册所有启用的插件
2. 触发 event_begin :通知插件系统开始初始化
3. 初始化核心功能 :登录、数据库、邮件、上传等
4. 初始化系统蓝图 :模板指令、错误视图等
5. 触发 event_init :执行插件的主要初始化逻辑
6. 触发 event_finish :执行插件的最终初始化操作
### 事件触发时机
事件名称 触发时机 用途 event_begin 插件加载后,核心功能初始化前 插件准备工作 event_init 核心功能初始化完成后 插件主要初始化逻辑 event_finish 所有初始化完成后 插件最终初始化操作,包括应用上下文初始化
这个修改是插件系统架构的重要优化,确保了所有插件能够在正确的时机执行初始化逻辑,特别是对于复杂的任务插件至关重要。
Signed-off-by: laoknas <kuai410022283@qq.com>
|
2025-12-13 16:50:39 +00:00 |
|
不胜舟
|
5bcc28a492
|
feat(api): 新增 CSRF 校验
|
2025-09-02 11:37:27 +08:00 |
|
不胜舟
|
000330dbd7
|
feat(cli): 新增检查路由鉴权装饰器的命令
|
2025-09-01 20:22:54 +08:00 |
|
不胜舟
|
ad7b79129e
|
引入接口频率限制机制
|
2025-08-25 22:42:52 +08:00 |
|
不胜舟
|
4da732538f
|
引入接口频率限制机制
|
2025-08-25 22:01:33 +08:00 |
|
 zmf96andGitee
|
49d1db3571
|
fix: 当在lxc容器运行时,获取磁盘信息失败
Signed-off-by: zmf96 <1602893+zmf96@user.noreply.gitee.com>
|
2025-05-18 15:21:49 +00:00 |
|
 星辰大海andGitee
|
d49b3c1a79
|
update applications/view/system/rights.py.
管理员也需要隐藏不要显示的菜单。
Signed-off-by: 星辰大海 <2317903+shaodj@user.noreply.gitee.com>
|
2025-02-25 11:27:47 +00:00 |
|
wojiaoyishang
|
23db487356
|
添加文档构建章节
|
2025-01-31 10:51:11 +08:00 |
|
wojiaoyishang
|
552bf77924
|
完善文档并添加示例插件
|
2025-01-30 16:56:12 +08:00 |
|
wojiaoyishang
|
ac1f82e81d
|
基本完成文档
|
2025-01-30 10:31:50 +08:00 |
|
wojiaoyishang
|
41bda82c60
|
完善开发文档与调整初始化项目架构
|
2025-01-28 17:47:41 +08:00 |
|
wojiaoyishang
|
da5917344e
|
更新文档,完善插件功能
|
2025-01-27 21:34:42 +08:00 |
|
wojiaoyishang
|
5153daf7da
|
更新文档
|
2025-01-27 19:48:27 +08:00 |
|
wojiaoyishang
|
155af93c77
|
完善开发文档与合并 admin_log 文件
|
2025-01-27 11:30:59 +08:00 |
|
wojiaoyishang
|
0db36a6218
|
完善开发文档与更新函数注释
|
2025-01-27 11:16:26 +08:00 |
|
wojiaoyishang
|
184c4ad80d
|
更正插件与配置文件
|
2025-01-25 14:03:37 +08:00 |
|
wojiaoyishang
|
ba7cc42628
|
数据库中的权限地址直接改为跳转之后的地址,防止 https 出现错误
|
2025-01-25 10:07:31 +08:00 |
|
 我叫以赏andGitee
|
cb5e352e8d
|
fix: 修正序列化表述错误
Merge pull request !1 from 星辰大海/N/A
|
2025-01-25 01:52:12 +00:00 |
|
wojiaoyishang
|
8a99864b41
|
删除用于测试的 print
|
2025-01-25 09:51:02 +08:00 |
|
 星辰大海andGitee
|
de644f0f34
|
update applications/models/admin_dept.py.
Signed-off-by: 星辰大海 <2317903+shaodj@user.noreply.gitee.com>
|
2025-01-24 22:33:09 +00:00 |
|
wojiaoyishang
|
2ee703d2eb
|
错误处理页面进行更新
|
2025-01-24 19:13:41 +08:00 |
|
wojiaoyishang
|
3c4377915b
|
Update: 增加后台消息接口
|
2025-01-24 18:44:53 +08:00 |
|
wojiaoyishang
|
ed1f402c04
|
Update: (步骤备份)完善邮件管理、文件上传的页面更改
|
2025-01-24 18:01:02 +08:00 |
|
wojiaoyishang
|
52838222db
|
Update: (步骤备份)完善字典
|
2025-01-23 21:16:16 +08:00 |
|
wojiaoyishang
|
de36a9936a
|
Update: (步骤备份)完善系统监控
|
2025-01-21 20:58:37 +08:00 |
|
wojiaoyishang
|
3bb59d3786
|
Update: (步骤备份)修复刷新内置标签页的问题
|
2025-01-21 16:09:27 +08:00 |
|
wojiaoyishang
|
fa7e62b12b
|
Update: (步骤备份)部门管理更新完成
|
2025-01-21 12:07:37 +08:00 |
|
wojiaoyishang
|
b6a64f15dc
|
Update: (步骤备份)更新夜间模式同步
|
2025-01-21 11:02:03 +08:00 |
|
wojiaoyishang
|
813363f0d4
|
Update: (步骤备份)更新部门管理前端
|
2025-01-20 21:38:08 +08:00 |
|
wojiaoyishang
|
61be7a09c6
|
Update: (步骤备份)选项管理修改完成,增加批量删除功能
|
2025-01-20 16:38:38 +08:00 |
|
wojiaoyishang
|
9f8fe2c83e
|
Update: (步骤备份)角色管理页面更新完成并增加参数效验
|
2025-01-20 14:59:41 +08:00 |
|
wojiaoyishang
|
d4a1b0ec57
|
Update: (步骤备份)更新 Pear Admin 框架版本与 Pear Admin Layui 一致,尝试重写页面
|
2025-01-19 20:03:18 +08:00 |
|
 我叫以赏andGitee
|
22fa797809
|
!121 fix 字典分类提交时候,验证type_code 是否为空
Merge pull request !121 from jiangsi/N/A
|
2024-12-27 09:44:27 +00:00 |
|
 qxdoandGitee
|
6def11b009
|
移除内部session操作,会导致session首次创建不一致的问题
Signed-off-by: qxdo <qxdo123@gmail.com>
|
2024-08-14 12:28:46 +00:00 |
|
 我叫以赏andGitee
|
175b3f5f5b
|
!106 更新 applications/common/helper.py 中函数注释的错误
Merge pull request !106 from 星辰大海/N/A
|
2024-06-26 02:36:54 +00:00 |
|
 我叫以赏andGitee
|
874084492e
|
update applications/common/utils/validate.py.
新版本将会移除 flask.escape 按照官方说法使用 markupsafe.escape 代替,可以避免 Python Warning。
Signed-off-by: 我叫以赏 <lovepikachu@foxmail.com>
|
2024-02-10 04:21:13 +00:00 |
|
 我叫以赏andGitee
|
dff1cc18ce
|
fix: 移出不必要的导入
Signed-off-by: 我叫以赏 <lovepikachu@foxmail.com>
|
2024-02-10 04:08:09 +00:00 |
|
不胜舟
|
21408f1bf3
|
add flask-session扩展
|
2024-01-14 17:56:46 +08:00 |
|
不胜舟
|
f59767096b
|
fix 记住密码
|
2024-01-12 21:29:27 +08:00 |
|
不胜舟
|
57f2ce1413
|
add flask-session扩展
|
2024-01-12 15:52:27 +08:00 |
|