一个仅150K大小的、基于 Python + Flask + SQLite 的 Wiki,零业务 JavaScript。
该项目目前处于早期版本,作者更推荐您:
- 用于内网环境(当前仅适配HTTP模式)
- 单worker 部署
- 尽可能不要用于生产环境
- 新增了本地图片验证;
- 新增了preprocess_images.py工具来处理本地验证图片;
- 新增了外链保护功能:标准MD格式的链接将受到保护,通过图片验证前无法直接查看外链地址;
- 删除原有captcha字体,主程序大小由150k降低至81K;
- 一些功能性修复
- 零业务 JavaScript:无前端脚本依赖,安全透明。
- Markdown 渲染:使用 mistune,支持标准语法。
- 自动转换站内 Wiki 链接
([text](#slug) → /slug)。 - 搜索:导航栏全局搜索框(当前仅限slug搜索)。
- 极简界面:纯文本链接,最大宽度 100ch。
- 单文件部署:只需 Python 3 + Flask + mistune + pillow,大小仅81k
- 环境要求:Python 3.8+、pip
- 克隆项目或下载 zero_js_wiki.py
- 安装依赖:
pip install flask mistune pillow - 在同一文件夹新建“captcha_images”文件夹,使用preprocess_images.py工具来处理验证图片
- 准备好验证图片(分为三类;当前代码硬编码为'A': '车', 'B': '狗', 'C': '猫');
- 设置 SECRET_KEY 环境变量(必须):
Windows PowerShell:$env:SECRET_KEY="你的随机密钥"
Linux/macOS:export SECRET_KEY="你的随机密钥" - 运行:
python zero_js_wiki.py - 访问:http://127.0.0.1:4000
首次点击 Login 会自动创建管理员账户。
可通过环境变量修改:
- SECRET_KEY:必填,Flask 密钥。
- WIKI_DB:数据库文件路径,默认 wiki.db。
- ALLOW_REGISTRATION:是否开放注册,默认 false。
export SECRET_KEY="你的随机密钥" ALLOW_REGISTRATION="true" python zero_js_wiki.py
- GET / 主页(slug=home),若无则显示页面列表
- GET / 查看页面,404 时管理员/写者可创建
- GET/POST /edit/ 编辑或创建页面(需 writer/admin)
- GET/POST /new 新建页面(需 writer/admin)
- GET/POST /delete/ 删除页面(需 admin)
- GET /history/ 页面历史
- GET /search?q=... 搜索页面标题
- GET/POST /login 登录(含验证码)
- GET/POST /register 注册(受 ALLOW_REGISTRATION 控制)
- GET/POST /setup 首次创建管理员
- GET/POST /change_password 修改密码
- GET /admin 用户管理面板(admin)
- POST /admin/add_user 管理员添加用户
- POST /admin/change_role 管理员修改角色
- GET/POST /admin/delete_user 管理员删除用户(确认页)
- POST /logout 登出
- users:用户名、密码哈希、角色、失败计数、锁定时间、会话令牌
- pages:slug、Markdown 内容、创建/更新信息
- page_history:页面编辑历史
- login_rate:注册速率限制时间戳
- Flask
- Werkzeug(内置于 Flask)
- mistune
- Pillow
- ALLOW_REGISTRATION 由环境变量控制,无法在前端控制开放注册功能-p1
- 写操作并发升高时,SQLite 在 WAL 模式下可能成为瓶颈-p2
- 搜索使用 LIKE '%keyword%' 无索引优化-p2
- SECRET_KEY 由环境变量控制,体验较差-p1
- 默认主页不会自动生成,需要自行于http://127.0.0.1:4000/edit/home 中修改-p3
- 无法转义html语法-安全特性?
- 无法正常设置页内锚点-p0——页内锚点改为
[page]##page,临时性解决 - 所有时间戳都是UTC-0-p3
- 注释掉了 SESSION_COOKIE_SECURE,因为HTTP模式下不能设置 Secure cookie,否则 Cookie 不会被发送
- 对Unix Socket的支持不佳
- 侧边目录
- 模板使用
- 备份功能
- 文章分类
- 历史记录回滚
- 多语言支持
- HTTPS功能性
- 多 worker 部署
- 第一个版本移除了基于 IP 的速率限制,改用全局速率限制;需要更安全的策略
- 敏感路由缺乏速率限制,例如页面创建或编辑(当前速率限制仅限注册/登录/验证码)
- 多 worker 部署时,当前基于内存的captcha答案存储会有问题
- 对Unix Socket的支持(uwsgi?)
本项目使用 CC0-1.0 许可
第三方依赖(Flask、werkzeug、mistune、Pillow)采用 BSD-3-Clause / Historical 许可。完整版权声明请参阅各自的包元数据。
本项目在开发过程中使用了 DeepSeek-V4 Pro 模型进行辅助。
AI 辅助主要应用于以下方面:
- 代码生成
- 安全审查
- 问题分析
使用此工具/服务后,作者对内容进行了量力而行的审查和测试。
基于此,作者决定采用 CC0 1.0 通用公共领域奉献 将本项目置于公共领域。在某些法律管辖区不承认公共领域奉献时,CC0 后备条款将自动提供一个宽松的、类似 MIT 的许可。