放弃OneNav,使用Curor写了一个书签导航系统
前言
个人书签导航系统过去两三年一直用的OneNav,主要原因就是它支持全文搜索。2023-05-05也购买了永久订阅来支持正版,订阅版在当时的主要特色是支持多种主题在线切换,不过在后续的使用过程发现适配的主题多少都有功能上的损失,尤其是全文搜索,启用后均不支持链接描述搜索,有的直接不支持站内搜索。。。。对搜索适配最好的就是默认主题,只有这个支持链接标题、地址和描述搜索,所以即使订阅了也是一直使用的默认主题。而实际上默认主题也有缺陷,链接分类如果设置成前端仅显示20,此分类下超出的链接是搜索不到的,为了解决这个问题,我分类设置成前端显示500个链接来绕过这个缺陷。到此OneNav使用的问题基本就解决了,后续也一直稳定使用,适配的浏览器插件也非常好用能非常方便的快速添加链接,这也是坚持使用OneNav的第二个点。但是一直以来对默认主题的样式还是耿耿于怀,不满足它的简陋样式,终于最近使用Cursor写了个符合自己心意的书签导航。功能上必然支持无缺陷的全文搜索,至于快速添加链接是用前端监听粘贴链接的动作(自动弹出添加链接窗口+自动抓取链接信息)来替代OneNav的插件快速添加链接。至此,OneNav吸引我的两个主要优势已经被替代,并且自己开发的导航系统具备了还不错的前端UI。下面详细讲下书签导航主要的功能特色,喜欢的也可以前往Github拉取下来部署体验,觉得有用的话希望能给个Star支持下。
项目地址:https://github.com/DEKVIW/book-nav
特色功能
BookNav(炫酷导航) 基于 Flask Web 框架打造,提供了以下核心功能:
交互增强功能
- 右键菜单交互: 链接卡片右键可弹出快捷菜单,支持添加、编辑、删除、复制链接等操作
- 快速添加网站: 首页直接粘贴链接可弹出快速添加链接对话框,无需进入后台
- 拖拽排序功能:
- 支持网站卡片拖拽排序
- 支持侧边栏分类拖拽排序
- 重复链接验证功能:
- 在添加或编辑网站时自动检测 URL 是否已存在
- 智能提示已存在的链接及其所属分类
- 提供选项: 取消添加、强制添加或跳转到已有链接
- 有效防止重复添加相同网站,保持导航整洁
高效搜索系统
- 全局快速搜索: 顶部搜索框支持即时搜索整站内容
- 多维度匹配:支持网站标题、URL、描述和关键词的全文搜索
- 分类内搜索: 在特定分类页面可限定搜索范围
数据库导入导出功能:
- 完美兼容 OneNav 数据结构,支持无缝迁移
- 支持导入 OneNav 的 SQLite 数据库导出文件
- 自动匹配分类,保留原有的组织结构
- 导出为多种格式:原生格式、OneNav 兼容格式
后台管理系统
- 完整的后台管理界面: 独立的管理控制台
- 网站与分类管理: 完整的增删改查功能,批量删除,批量修改公开,私有状态
- 站点设置: 自定义站点名称、Logo、SEO 信息等,支持自定义背景图片,支持开启链接跳转过渡页(支持放广告)
- 邀请码管理: 生成和管理注册邀请码
- 数据批量操作功能:
- 一键抓取图标
- 一键清空所有数据
- 备份功能
用户系统
- 用户管理: 首次启动默认超级管理员权限,支持查看和管理用户账户,支持添加普通用户和管理员角色
- 邀请码注册: 仅通过邀请码才能注册新用户,确保站点的私密性
- 用户认证: 完整的登录、注册和登出功能
- 权限管理: 区分普通用户和管理员权限
注意:如果多用户,谨慎放开用户的的超级管理员权限;可以适当放开普通管理员权限(普通管理员后台功能只涉及链接相关和邀请码部分)
图标处理
- 自动获取网站图标: 自动尝试获取并显示网站的 Favicon
- 优雅的降级显示: 当图标加载失败时,显示基于网站名称首字母的默认图标
- 一致的视觉体验: 确保界面整洁一致,即使外部资源不可用
响应式设计
- 全设备适配: 完美支持桌面、平板和移动设备
- 布局自适应: 基于 Bootstrap 的响应式网格系统
- 触摸友好: 为移动设备优化的交互体验
技术栈
后端
- 核心框架: Python 3.9+, Flask
- ORM: SQLAlchemy
- 数据库迁移: Flask-Migrate
- 用户认证: Flask-Login
- 表单处理: Flask-WTF
- WSGI 服务器: Gunicorn
前端
- UI 框架: Bootstrap 5
- 动画效果: Animate.css
- 图标: Font Awesome, Bootstrap Icons
- 交互: 原生 JavaScript
数据存储
- 默认数据库: SQLite
- 可选扩展: 支持 PostgreSQL, MySQL 等关系型数据库
部署
- 容器化: Docker, Docker Compose
- Web 服务器: Nginx (容器内反向代理)
- 进程管理: Supervisor
部署指南
自构建镜像运行
环境准备:
- 安装 Docker
- 安装 Docker Compose
获取代码:
1
2
3
4git clone https://github.com/yourusername/booknav.git
cd booknav
sed -i 's/\r$//' docker/cleanup_backups.sh
sed -i 's/\r$//' docker/entrypoint.sh构建与启动:
1
2docker-compose build
docker-compose up -d注意:无需预先创建任何配置文件!容器首次启动时会自动将默认的 Nginx 配置文件复制到宿主机映射目录,实现真正的一键部署体验。
访问:
- 在浏览器中打开
http://<您的服务器IP>:8988
- 默认用户名:
admin
,密码:admin123
- 在浏览器中打开
拉取镜像运行
1 | version: "3" |
docker-compose.yml文件同级目录下创建.env文件
1 | # 基本配置 |
SECRET_KEY=
ADMIN_USERNAME=
ADMIN_EMAIL=
ADMIN_PASSWORD=
这些参数自定义填写,执行
1 | docker-compose up -d |
用户名和密码为.env文件中自定义填写的