SeaCMS 产品文档

版本:1.1.0
更新日期:2026-04-18
官方网站:SeaCMS


第一部分:技术文档

1. 产品概述

SeaCMS 是一个基于 Python Flask 框架和 SQLite 数据库构建的轻量级内容管理系统(CMS),专为个人博客、企业官网、技术文档站点等场景设计。系统采用前后端一体化架构,提供完整的后台管理界面和响应式前端展示。

1.1 核心特性

特性

说明

文章管理

支持文章创建、编辑、发布、定时发布、版本控制、SEO优化

页面管理

支持自定义页面创建、排序、模板选择

分类与标签

支持分类层级、标签聚合、多维度内容组织

富文本编辑器

自研 SeaEditor,支持图片/文件上传、表格、代码块等

媒体管理

支持图片、文档上传,自动生成缩略图信息

评论系统

支持评论审核、嵌套回复、状态管理

用户与权限

基于RBAC的角色权限体系,支持5种角色

双因素认证

支持TOTP双因素认证(Google Authenticator兼容)

API接口

RESTful API,支持Token认证,便于第三方集成

主题管理

内置8种预设主题,支持可视化主题编辑器,自定义配色/布局/字体

本地化资源

所有前端资源本地化部署,无需依赖外部CDN

安全防护

内置WAF中间件,CSRF保护,SQL注入/XSS防护

访问统计

访客追踪、页面浏览统计、来源分析

数据备份

数据库备份、恢复、下载

SEO优化

Sitemap自动生成、Meta标签管理、SEO分析评分

暗色模式

全站支持亮色/暗色主题切换

响应式设计

完美适配桌面端和移动端

Docker部署

提供Dockerfile和docker-compose配置

1.2 技术栈

类别

技术

版本

后端框架

Flask

3.1.0

ORM

Flask-SQLAlchemy (SQLAlchemy)

3.1.1 / 2.0.36

数据库

SQLite

系统内置

认证

Flask-Login

0.6.3

权限

Flask-Principal

0.4.0

表单

Flask-WTF (WTForms)

1.2.2 / 3.2.1

数据库迁移

Flask-Migrate

4.0.7

缓存

Flask-Caching

2.3.0

API

Flask-RESTful

0.3.10

邮件

Flask-Mail

0.10.0

限流

Flask-Limiter

3.9.0

密码加密

bcrypt

4.2.1

2FA

pyotp

2.9.0

二维码

qrcode

7.4.2

图片处理

Pillow

-

HTML清洗

bleach

6.2.0

定时任务

APScheduler

3.10.4

生产服务器

Gunicorn

23.0.0

前端CSS

Tailwind CSS

本地部署

前端图标

Font Awesome

本地部署

图表库

Chart.js

本地部署

中文字体

Noto Sans SC

本地部署

反向代理

Nginx

Alpine


2. 技术架构

2.1 系统架构图

┌─────────────────────────────────────────────────┐
│                   Nginx (反向代理)                │
│            静态文件缓存 / SSL终止 / 负载均衡        │
└──────────────────────┬──────────────────────────┘
                       │
┌──────────────────────▼──────────────────────────┐
│              Gunicorn (WSGI服务器)                │
│              4 Workers / 120s超时                 │
└──────────────────────┬──────────────────────────┘
                       │
┌──────────────────────▼──────────────────────────┐
│                 Flask 应用                        │
│  ┌──────────┐ ┌──────────┐ ┌──────────┐         │
│  │ Auth BP  │ │ Admin BP │ │ Main BP  │         │
│  │  /auth   │ │  /admin  │ │    /     │         │
│  └──────────┘ └──────────┘ └──────────┘         │
│  ┌──────────┐ ┌──────────┐ ┌──────────┐         │
│  │  API BP  │ │   WAF    │ │ Scheduler│         │
│  │   /api   │ │ 中间件   │ │ 定时任务  │         │
│  └──────────┘ └──────────┘ └──────────┘         │
│  ┌──────────────────────────────────────┐        │
│  │         Extensions Layer             │        │
│  │  DB | Login | CSRF | Cache | Mail   │        │
│  │  Migrate | Principal | Limiter      │        │
│  └──────────────────────────────────────┘        │
└──────────────────────┬──────────────────────────┘
                       │
┌──────────────────────▼──────────────────────────┐
│              SQLite 数据库                        │
│           (instance/seacms.db)                   │
└─────────────────────────────────────────────────┘

2.2 请求处理流程

客户端请求
    │
    ▼
Nginx (静态文件直接返回,其他转发)
    │
    ▼
Gunicorn
    │
    ▼
Flask App
    │
    ├── WAF中间件检查 (SQL注入/XSS/路径遍历检测)
    │
    ├── CSRF验证 (POST/PUT/DELETE请求)
    │
    ├── 限流检查 (Flask-Limiter)
    │
    ├── 路由分发 (Blueprint)
    │   ├── /auth/*    → 认证模块
    │   ├── /admin/*   → 后台管理模块
    │   ├── /          → 前台展示模块
    │   └── /api/*     → API模块
    │
    ├── 业务逻辑处理
    │
    ├── 模板渲染 (Jinja2)
    │
    └── 返回响应

2.3 蓝图注册

蓝图

URL前缀

功能

auth_bp

/auth

用户认证(登录、注册、2FA)

admin_bp

/admin

后台管理(文章、页面、设置等)

main_bp

/

前台展示(首页、博客、文章详情等)

api_bp

/api

RESTful API接口


3. 项目结构

seacms/
├── app/                          # 应用主目录
│   ├── __init__.py               # 应用工厂函数 create_app()
│   ├── extensions.py             # Flask扩展初始化
│   ├── middleware.py             # WAF中间件
│   ├── models.py                 # 数据模型定义
│   ├── tasks.py                  # 定时任务(定时发布)
│   ├── admin/                    # 后台管理模块
│   │   ├── __init__.py
│   │   ├── forms.py              # WTForms表单定义
│   │   └── routes.py             # 后台路由(50+接口)
│   ├── api/                      # API模块
│   │   ├── __init__.py
│   │   └── routes.py             # RESTful API路由
│   ├── auth/                     # 认证模块
│   │   ├── __init__.py
│   │   ├── forms.py              # 登录/注册/资料表单
│   │   └── routes.py             # 认证路由
│   ├── main/                     # 前台模块
│   │   ├── __init__.py
│   │   └── routes.py             # 前台路由
│   ├── static/                   # 静态资源
│   │   ├── css/
│   │   │   └── sea-editor.css    # 富文本编辑器样式
│   │   ├── js/
│   │   │   └── sea-editor.js     # 富文本编辑器脚本
│   │   ├── uploads/              # 上传文件目录
│   │   └── vendor/               # 本地化前端资源
│   │       ├── tailwindcss/      # Tailwind CSS (JIT编译器)
│   │       ├── fontawesome/      # Font Awesome (CSS+字体)
│   │       ├── chartjs/          # Chart.js 图表库
│   │       └── fonts/            # Noto Sans SC 中文字体
│   └── templates/                # Jinja2模板
│       ├── admin/                # 后台模板(30个)
│       ├── auth/                 # 认证模板(6个)
│       └── main/                 # 前台模板(7个)
├── instance/                     # 实例目录
│   └── seacms.db                 # SQLite数据库文件
├── backups/                      # 数据库备份目录
├── scripts/
│   └── init_db.py                # 数据库初始化脚本
├── config.py                     # 配置类
├── run.py                        # 应用入口
├── Dockerfile                    # Docker镜像构建
├── docker-compose.yml            # Docker编排
├── nginx.conf                    # Nginx配置
├── requirements.txt              # Python依赖
├── .env.example                  # 环境变量示例
└── start.sh                      # 启动脚本

4. 数据库设计

4.1 ER关系图

┌──────────┐     ┌──────────────┐     ┌──────────┐
│   User   │────<│  user_roles  │>────│   Role   │
└────┬─────┘     └──────────────┘     └──────────┘
     │
     │ 1:N
     │
┌────▼─────┐     ┌──────────┐     ┌──────────┐
│   Post   │>────│ post_tags │<────│   Tag    │
└────┬─────┘     └──────────┘     └──────────┘
     │
     │ N:1          ┌──────────┐
     ├──────────────>│ Category │
     │              └──────────┘
     │ N:1
     ├──────────────>│   User   │ (author)
     │
     │ 1:N
     ├──────────────>│ Comment  │
     │
     │ 1:N
     └──────────────>│PostVersion│

┌──────────┐  ┌──────────────┐  ┌──────────────┐
│   Page   │  │    Media     │  │   Setting    │
└──────────┘  └──────────────┘  └──────────────┘

┌──────────────┐  ┌──────────────┐  ┌──────────────┐
│ OperationLog │  │   APIToken   │  │ContactMessage│
└──────────────┘  └──────────────┘  └──────────────┘

┌──────────────┐  ┌──────────────┐
│  VisitLog    │  │ContentTemplate│
└──────────────┘  └──────────────┘

4.2 数据表详细设计

users - 用户表

字段

类型

约束

说明

id

INTEGER

PK, AUTO

主键

username

VARCHAR(64)

UNIQUE, NOT NULL

用户名

email

VARCHAR(120)

UNIQUE, NOT NULL

邮箱

password_hash

VARCHAR(256)

NOT NULL

bcrypt加密密码

nickname

VARCHAR(64)

-

昵称

avatar

VARCHAR(255)

DEFAULT 'default_avatar.png'

头像

bio

TEXT

-

个人简介

is_active

BOOLEAN

DEFAULT TRUE

是否启用

is_confirmed

BOOLEAN

DEFAULT FALSE

邮箱是否验证

login_attempts

INTEGER

DEFAULT 0

登录尝试次数

locked_until

DATETIME

-

锁定截止时间

last_login_at

DATETIME

-

最后登录时间

last_login_ip

VARCHAR(45)

-

最后登录IP

totp_secret

VARCHAR(32)

-

TOTP密钥

two_factor_enabled

BOOLEAN

DEFAULT FALSE

是否启用2FA

created_at

DATETIME

DEFAULT UTCNOW

创建时间

updated_at

DATETIME

ON UPDATE UTCNOW

更新时间

roles - 角色表

字段

类型

约束

说明

id

INTEGER

PK, AUTO

主键

name

VARCHAR(64)

UNIQUE, NOT NULL, INDEX

角色名称

description

VARCHAR(255)

-

角色描述

permissions

TEXT

DEFAULT ''

权限列表(逗号分隔)

created_at

DATETIME

DEFAULT UTCNOW

创建时间

预置角色:

角色

描述

权限

superadmin

超级管理员

all

admin

管理员

manage_users,manage_posts,manage_pages,manage_media,manage_settings

editor

编辑

manage_posts,manage_pages,manage_media

author

作者

write_post,manage_own_posts

user

普通用户

comment

posts - 文章表

字段

类型

约束

说明

id

INTEGER

PK, AUTO

主键

title

VARCHAR(200)

NOT NULL

标题

slug

VARCHAR(200)

UNIQUE, NOT NULL, INDEX

URL别名

content

TEXT

-

内容(HTML)

summary

TEXT

-

摘要

cover_image

VARCHAR(255)

-

封面图URL

status

VARCHAR(20)

DEFAULT 'draft', INDEX

状态: draft/pending/published/trash

is_top

BOOLEAN

DEFAULT FALSE, INDEX

是否置顶

allow_comment

BOOLEAN

DEFAULT TRUE

允许评论

view_count

INTEGER

DEFAULT 0

浏览次数

meta_title

VARCHAR(200)

-

SEO标题

meta_description

VARCHAR(300)

-

SEO描述

meta_keywords

VARCHAR(255)

-

SEO关键词

author_id

INTEGER

FK→users.id, INDEX

作者ID

category_id

INTEGER

FK→categories.id, INDEX

分类ID

published_at

DATETIME

-

发布时间

scheduled_at

DATETIME

-

定时发布时间

language

VARCHAR(10)

DEFAULT 'zh'

语言

created_at

DATETIME

DEFAULT UTCNOW, INDEX

创建时间

updated_at

DATETIME

ON UPDATE UTCNOW

更新时间

categories - 分类表

字段

类型

约束

说明

id

INTEGER

PK, AUTO

主键

name

VARCHAR(64)

NOT NULL

分类名称

slug

VARCHAR(64)

UNIQUE, NOT NULL, INDEX

URL别名

description

VARCHAR(255)

-

描述

parent_id

INTEGER

FK→categories.id

父分类ID

sort_order

INTEGER

DEFAULT 0

排序

created_at

DATETIME

DEFAULT UTCNOW

创建时间

tags - 标签表

字段

类型

约束

说明

id

INTEGER

PK, AUTO

主键

name

VARCHAR(64)

NOT NULL, UNIQUE

标签名称

slug

VARCHAR(64)

UNIQUE, NOT NULL, INDEX

URL别名

created_at

DATETIME

DEFAULT UTCNOW

创建时间

pages - 页面表

字段

类型

约束

说明

id

INTEGER

PK, AUTO

主键

title

VARCHAR(200)

NOT NULL

标题

slug

VARCHAR(200)

UNIQUE, NOT NULL, INDEX

URL别名

content

TEXT

-

内容(HTML)

template

VARCHAR(100)

DEFAULT 'default'

模板名称

sort_order

INTEGER

DEFAULT 0

排序

is_home

BOOLEAN

DEFAULT FALSE

是否首页

status

VARCHAR(20)

DEFAULT 'published'

状态

meta_title

VARCHAR(200)

-

SEO标题

meta_description

VARCHAR(300)

-

SEO描述

meta_keywords

VARCHAR(255)

-

SEO关键词

author_id

INTEGER

FK→users.id

作者ID

language

VARCHAR(10)

DEFAULT 'zh'

语言

created_at

DATETIME

DEFAULT UTCNOW

创建时间

updated_at

DATETIME

ON UPDATE UTCNOW

更新时间

comments - 评论表

字段

类型

约束

说明

id

INTEGER

PK, AUTO

主键

content

TEXT

NOT NULL

评论内容

author_name

VARCHAR(64)

-

评论者名称

author_email

VARCHAR(120)

-

评论者邮箱

author_url

VARCHAR(255)

-

评论者网址

author_id

INTEGER

FK→users.id

注册用户ID

post_id

INTEGER

FK→posts.id, INDEX

文章ID

parent_id

INTEGER

FK→comments.id

父评论ID

status

VARCHAR(20)

DEFAULT 'pending', INDEX

状态: pending/approved/spam/trash

ip_address

VARCHAR(45)

-

IP地址

created_at

DATETIME

DEFAULT UTCNOW

创建时间

media - 媒体文件表

字段

类型

约束

说明

id

INTEGER

PK, AUTO

主键

filename

VARCHAR(255)

NOT NULL

存储文件名(UUID)

original_name

VARCHAR(255)

NOT NULL

原始文件名

file_path

VARCHAR(500)

NOT NULL

文件路径

file_size

INTEGER

-

文件大小(字节)

file_type

VARCHAR(50)

-

类型: image/document

mime_type

VARCHAR(100)

-

MIME类型

alt_text

VARCHAR(255)

-

替代文本

width

INTEGER

-

图片宽度

height

INTEGER

-

图片高度

uploader_id

INTEGER

FK→users.id

上传者ID

created_at

DATETIME

DEFAULT UTCNOW, INDEX

创建时间

post_versions - 文章版本表

字段

类型

约束

说明

id

INTEGER

PK, AUTO

主键

post_id

INTEGER

FK→posts.id, INDEX, NOT NULL

文章ID

version_number

INTEGER

NOT NULL

版本号

title

VARCHAR(200)

-

版本标题

content

TEXT

-

版本内容

summary

TEXT

-

版本摘要

user_id

INTEGER

FK→users.id

操作用户ID

change_summary

VARCHAR(255)

-

变更说明

created_at

DATETIME

DEFAULT UTCNOW

创建时间

settings - 系统设置表

字段

类型

约束

说明

id

INTEGER

PK, AUTO

主键

key

VARCHAR(100)

UNIQUE, NOT NULL, INDEX

设置键

value

TEXT

-

设置值

description

VARCHAR(255)

-

描述

group

VARCHAR(50)

DEFAULT 'general'

分组: general/seo/comment/upload/mail/theme/security/performance/editor

created_at

DATETIME

DEFAULT UTCNOW

创建时间

updated_at

DATETIME

ON UPDATE UTCNOW

更新时间

visit_logs - 访问日志表

字段

类型

约束

说明

id

INTEGER

PK, AUTO

主键

url

VARCHAR(500)

NOT NULL, INDEX

访问URL

referrer

VARCHAR(500)

-

来源URL

ip_address

VARCHAR(45), INDEX

-

IP地址

user_agent

VARCHAR(500)

-

浏览器UA

visitor_id

VARCHAR(36), INDEX

-

访客标识(Cookie)

post_id

INTEGER

FK→posts.id

关联文章ID

created_at

DATETIME

DEFAULT UTCNOW, INDEX

创建时间

operation_logs - 操作日志表

字段

类型

约束

说明

id

INTEGER

PK, AUTO

主键

user_id

INTEGER

FK→users.id

操作用户ID

action

VARCHAR(100)

NOT NULL

操作类型

target_type

VARCHAR(50)

-

目标类型

target_id

INTEGER

-

目标ID

detail

TEXT

-

操作详情

ip_address

VARCHAR(45)

-

IP地址

created_at

DATETIME

DEFAULT UTCNOW, INDEX

创建时间

api_tokens - API令牌表

字段

类型

约束

说明

id

INTEGER

PK, AUTO

主键

name

VARCHAR(100)

NOT NULL

令牌名称

token

VARCHAR(64)

UNIQUE, NOT NULL, INDEX

令牌值

user_id

INTEGER

FK→users.id, NOT NULL

所属用户ID

is_active

BOOLEAN

DEFAULT TRUE

是否启用

last_used_at

DATETIME

-

最后使用时间

created_at

DATETIME

DEFAULT UTCNOW

创建时间

contact_messages - 联系消息表

字段

类型

约束

说明

id

INTEGER

PK, AUTO

主键

name

VARCHAR(64)

NOT NULL

发送者姓名

email

VARCHAR(120)

NOT NULL

发送者邮箱

subject

VARCHAR(200)

-

主题

message

TEXT

NOT NULL

消息内容

is_read

BOOLEAN

DEFAULT FALSE

是否已读

ip_address

VARCHAR(45)

-

IP地址

created_at

DATETIME

DEFAULT UTCNOW

创建时间

content_templates - 内容模板表

字段

类型

约束

说明

id

INTEGER

PK, AUTO

主键

name

VARCHAR(100)

NOT NULL

模板名称

description

VARCHAR(255)

-

描述

content

TEXT

-

模板内容(HTML)

template_type

VARCHAR(20)

DEFAULT 'post'

类型: post/page

is_builtin

BOOLEAN

DEFAULT FALSE

是否内置

created_at

DATETIME

DEFAULT UTCNOW

创建时间

updated_at

DATETIME

ON UPDATE UTCNOW

更新时间

themes - 主题表

字段

类型

约束

说明

id

INTEGER

PK, AUTO

主键

name

VARCHAR(100)

NOT NULL

主题名称

slug

VARCHAR(100)

UNIQUE, NOT NULL

主题标识

description

VARCHAR(255)

-

描述

is_preset

BOOLEAN

DEFAULT FALSE

是否预设主题

is_active

BOOLEAN

DEFAULT FALSE

是否启用

thumbnail

VARCHAR(255)

-

缩略图URL

config

TEXT

-

主题配置(JSON)

custom_css

TEXT

-

自定义CSS

created_at

DATETIME

DEFAULT UTCNOW

创建时间

updated_at

DATETIME

ON UPDATE UTCNOW

更新时间

预设主题(8种):

主题

说明

ocean-blue

海洋蓝 - 清新专业风格

sunset-orange

日落橙 - 温暖活力风格

forest-green

森林绿 - 自然清新风格

royal-purple

皇家紫 - 高贵典雅风格

midnight-dark

午夜黑 - 现代暗色风格

sakura-pink

樱花粉 - 浪漫温柔风格

golden-sand

金沙黄 - 商务稳重风格

arctic-white

极地白 - 简约纯净风格

关联表

user_roles - 用户角色关联

字段

类型

约束

user_id

INTEGER

FK→users.id, PK

role_id

INTEGER

FK→roles.id, PK

post_tags - 文章标签关联

字段

类型

约束

post_id

INTEGER

FK→posts.id, PK

tag_id

INTEGER

FK→tags.id, PK


5. API 接口文档

5.1 公开接口

获取文章列表

GET /api/public/posts

参数:

参数

类型

默认值

说明

page

int

1

页码

per_page

int

10

每页数量

category_id

int

-

按分类筛选

响应字段:

字段

类型

说明

id

int

文章ID

title

string

标题

slug

string

URL别名

content

string

内容

summary

string

摘要

cover_image

string

封面图

status

string

状态

view_count

int

浏览次数

is_top

bool

是否置顶

meta_title

string

SEO标题

meta_description

string

SEO描述

meta_keywords

string

SEO关键词

published_at

datetime

发布时间

created_at

datetime

创建时间

updated_at

datetime

更新时间

获取文章详情

GET /api/public/posts/<slug>

获取分类列表

GET /api/public/categories

获取页面列表

GET /api/public/pages

获取页面详情

GET /api/public/pages/<slug>

获取站点信息

GET /api/public/site-info

响应示例:

{
    "site_name": "SeaCMS",
    "site_description": "一个基于Flask的内容管理系统",
    "site_keywords": "CMS,Flask,内容管理",
    "total_posts": 42,
    "total_categories": 5,
    "total_tags": 18
}

提交评论

POST /api/comments

请求体:

{
    "post_id": 1,
    "content": "评论内容",
    "author_name": "访客",
    "author_email": "visitor@example.com"
}

用户认证

POST /api/auth

请求体:

{
    "username": "admin",
    "password": "password"
}

5.2 管理接口(需Token认证)

所有管理接口需在请求头中携带API Token:

Authorization: Bearer <your-api-token>

管理文章列表

GET /api/manage/posts?page=1&per_page=20

创建文章

POST /api/manage/posts

请求体:

{
    "title": "文章标题",
    "content": "文章内容",
    "summary": "文章摘要",
    "status": "draft"
}

获取/更新/删除文章

GET    /api/manage/posts/<id>
PUT    /api/manage/posts/<id>
DELETE /api/manage/posts/<id>

PUT请求体(部分更新):

{
    "title": "新标题",
    "content": "新内容",
    "status": "published"
}

DELETE操作: 将文章状态设为 trash,不物理删除。


6. 安全机制

6.1 WAF(Web应用防火墙)

系统内置WAF中间件,在请求到达路由前进行安全检查:

防护类型

检测内容

SQL注入

UNION SELECT, OR 1=1, DROP TABLE, 注释符等

XSS攻击

script标签, javascript:, 事件处理器, iframe, eval等

路径遍历

../, /etc/passwd, /proc/self, .env, .git/等

IP封锁

支持手动封锁IP和IP白名单

豁免规则: 已登录用户的后台管理(/admin/*)和API(/api/*)请求跳过WAF内容检查,允许发布包含HTML代码的文章内容。前台公开接口(评论提交、搜索等)仍受WAF保护。

6.2 认证安全

机制

说明

密码加密

bcrypt算法,自动加盐

登录保护

5次失败后锁定15分钟

CSRF保护

所有POST请求验证CSRF Token

会话安全

HttpOnly Cookie, SameSite=Lax, 生产环境Secure

会话超时

24小时过期

双因素认证

TOTP协议,兼容Google Authenticator

6.3 请求限流

限制

每日请求

200次/IP

每小时请求

50次/IP

6.4 文件上传安全

措施

说明

类型限制

仅允许配置的白名单扩展名

大小限制

默认16MB

文件名处理

UUID重命名,防止路径注入

内容检测

图片文件自动获取尺寸信息


7. 部署指南

7.1 本地开发部署

# 1. 克隆项目
git clone <repository-url>
cd seacms

# 2. 创建虚拟环境
python3 -m venv venv
source venv/bin/activate

# 3. 安装依赖
pip install -r requirements.txt

# 4. 配置环境变量
cp .env.example .env
# 编辑 .env 文件,设置 SECRET_KEY 等

# 5. 初始化数据库
python scripts/init_db.py

# 6. 启动开发服务器
python run.py

访问 http://localhost:8000 查看前台,http://localhost:8000/admin 进入后台。

7.2 Docker部署

# 构建并启动
docker-compose up -d

# 查看日志
docker-compose logs -f

# 停止服务
docker-compose down

Docker Compose服务:

服务

端口

说明

web

5000

Flask应用(Gunicorn)

nginx

80

Nginx反向代理

7.3 生产环境部署

# 使用Gunicorn启动
gunicorn --bind 0.0.0.0:5000 \
         --workers 4 \
         --timeout 120 \
         --access-logfile - \
         --error-logfile - \
         run:app

Nginx配置要点:

  • 静态文件直接由Nginx服务,设置30天缓存

  • 代理请求到Gunicorn

  • 设置 client_max_body_size 20M 支持文件上传

  • 建议配置SSL证书启用HTTPS

7.4 环境变量配置

变量

必填

默认值

说明

SECRET_KEY

-

应用密钥,生产环境必须修改

DATABASE_URL

sqlite:///seacms.db

数据库连接

FLASK_ENV

development

运行环境: development/production

FLASK_DEBUG

0

调试模式

UPLOAD_FOLDER

app/static/uploads

上传目录

MAX_CONTENT_LENGTH

67108864

最大上传大小(字节,默认64MB)

ALLOWED_EXTENSIONS

png,jpg,jpeg,gif,...

允许的文件类型

MAIL_SERVER

smtp.example.com

邮件服务器

MAIL_PORT

587

邮件端口

MAIL_USE_TLS

1

启用TLS

MAIL_USERNAME

-

邮箱账号

MAIL_PASSWORD

-

邮箱密码

ADMIN_EMAIL

admin@seacms.com

管理员邮箱

ADMIN_PASSWORD

admin123456

管理员初始密码


8. 配置参考

8.1 应用配置类

配置项

DevelopmentConfig

ProductionConfig

DEBUG

True

False

SQLALCHEMY_ECHO

False

False

SESSION_COOKIE_SECURE

False

True

WTF_CSRF_ENABLED

True

True

PERMANENT_SESSION_LIFETIME

86400s

86400s

POSTS_PER_PAGE

10

10

ADMIN_PER_PAGE

15

15

LOGIN_ATTEMPTS_MAX

5

5

LOGIN_LOCKOUT_TIME

900s

900s

8.2 Flask扩展配置

扩展

配置

SQLAlchemy

pool_pre_ping=True, pool_recycle=300

LoginManager

session_protection='strong'

CSRFProtect

time_limit=3600s

Cache

type=SimpleCache, timeout=300s

Limiter

200/day, 50/hour per IP


第二部分:操作手册

1. 快速开始

1.1 首次登录

  1. 启动应用后访问 http://your-domain/admin

  2. 使用默认管理员账号登录:

    • 用户名:admin

    • 密码:admin123456

  3. 首次登录后请立即修改密码

1.2 基本设置

登录后台后,建议按以下顺序完成初始配置:

  1. 系统设置 → 修改站点名称、描述、关键词

  2. 分类管理 → 创建文章分类

  3. 用户管理 → 修改管理员密码,创建其他用户

  4. 安全设置 → 启用WAF,配置双因素认证


2. 后台管理

2.1 仪表盘

仪表盘提供系统概览信息:

区域

内容

统计卡片

文章总数、用户总数、总浏览量、评论总数

待处理

待审核评论数、未读消息数

近期文章

最近5篇文章列表

7日趋势

最近7天文章发布数量图表

分类统计

各分类文章数量分布

访问统计

最近7天访问量、独立访客数

2.2 导航菜单

菜单

功能

权限要求

仪表盘

系统概览

登录用户

文章管理

文章CRUD、批量操作

登录用户(作者仅管理自己的)

分类管理

分类CRUD

编辑及以上

标签管理

标签CRUD

编辑及以上

页面管理

页面CRUD

编辑及以上

评论管理

评论审核、状态管理

管理员

媒体管理

文件上传、管理

登录用户

用户管理

用户CRUD、启用/禁用

管理员

系统设置

站点配置

管理员

内容模板

模板CRUD

编辑及以上

访问统计

流量分析

管理员

API令牌

Token管理

管理员

联系消息

消息查看

管理员

数据备份

备份/恢复

管理员

操作日志

日志查看

管理员

系统信息

运行环境信息

管理员


3. 内容管理

3.1 文章管理

创建文章

  1. 进入 文章管理 → 点击 新建文章

  2. 填写文章信息:

    • 标题(必填):文章标题

    • URL别名(可选):留空自动生成

    • 内容:使用富文本编辑器编写

    • 摘要:文章简介,留空时自动截取

    • 封面图:输入图片URL

    • 分类:选择文章分类

    • 标签:输入标签,多个标签用逗号分隔

    • 状态:草稿/待审核/已发布

    • 置顶:是否在列表顶部显示

    • 允许评论:是否开启评论

  3. SEO设置(可选):

    • Meta标题

    • Meta描述

    • Meta关键词

  4. 点击 SEO分析 查看优化建议

  5. 点击 保存发布

编辑文章

  1. 在文章列表中点击文章标题或编辑按钮

  2. 修改内容后点击保存

  3. 系统自动保存版本记录

文章版本

  1. 在编辑页面点击 版本历史

  2. 查看所有历史版本

  3. 点击版本号查看版本详情

  4. 点击 恢复此版本 回滚内容

批量操作

  1. 在文章列表勾选多个文章

  2. 选择操作类型:

    • 删除(移入回收站/永久删除)

    • 发布

    • 转为草稿

    • 移动到指定分类

  3. 点击执行

自动保存

编辑文章时,系统每45秒自动保存一次,保存指示器会短暂显示。

3.2 富文本编辑器 (SeaEditor)

SeaEditor 是系统内置的富文本编辑器,提供以下功能:

工具栏功能

分组

按钮

功能

撤销

撤销、重做

撤销/重做操作

格式

标题下拉

H1-H4、正文

文本

加粗、斜体、下划线、删除线

文本样式

对齐

左对齐、居中、右对齐、两端对齐

段落对齐

列表

无序列表、有序列表

列表

缩进

增加/减少缩进

缩进控制

插入

链接、图片、文件上传

内容插入

高级

引用、代码块、表格、水平线

高级格式

颜色

文字颜色、背景颜色

颜色设置

工具

清除格式、源代码、全屏

辅助工具

图片插入

  1. 点击工具栏 图片 按钮

  2. 选择插入方式:

    • URL地址:输入图片URL、替代文字、宽度

    • 本地上传:点击或拖拽上传本地图片,支持预览

  3. 支持格式:JPG、PNG、GIF、WebP

文件上传

  1. 点击工具栏 上传文件 按钮

  2. 点击或拖拽上传文件

  3. 可选填链接文字

  4. 图片文件自动插入为图片,其他文件插入为下载链接

3.3 页面管理

创建页面

  1. 进入 页面管理 → 点击 新建页面

  2. 填写页面信息:

    • 标题、URL别名、内容

    • 模板选择

    • 排序序号

    • 是否设为首页

    • 发布状态

    • SEO设置

  3. 已发布的页面会自动出现在前台导航栏

3.4 分类管理

  • 支持层级分类(父子关系)

  • 每个分类可设置排序序号

  • 有文章的分类无法删除

  • 分类URL使用slug格式

3.5 标签管理

  • 标签在文章编辑时可直接创建

  • 也可在标签管理页面单独管理

  • 同一标签可关联多篇文章

3.6 内容模板

系统预置5个内容模板:

模板名

类型

说明

标准文章

post

包含概述、正文、总结

教程文章

post

步骤式教程格式

产品评测

post

产品评测格式

联系页面

page

联系信息页面

关于页面

page

关于我们页面

内置模板不可编辑/删除,可创建自定义模板。


4. 媒体管理

4.1 上传文件

  1. 进入 媒体管理 → 点击 上传文件

  2. 选择文件或拖拽上传

  3. 支持批量上传

  4. 上传后自动记录文件信息

4.2 文件管理

  • 按类型筛选(图片/文档)

  • 点击文件可复制URL

  • 支持批量删除

  • 图片文件显示尺寸信息

4.3 上传限制

项目

默认值

最大文件大小

16MB

允许的图片格式

png, jpg, jpeg, gif, webp, svg

允许的文档格式

doc, docx, pdf, xlsx, xls, zip

可在系统设置中修改上传限制。


5. 用户与权限

5.1 角色权限矩阵

功能

superadmin

admin

editor

author

user

仪表盘

管理所有文章

管理自己的文章

分类管理

标签管理

页面管理

评论管理

媒体管理

用户管理

系统设置

数据备份

操作日志

5.2 用户管理操作

  • 编辑用户:修改用户名、邮箱、昵称、角色、状态

  • 启用/禁用:切换用户活跃状态,不能禁用自己

  • 删除用户:物理删除,不能删除自己

5.3 双因素认证 (2FA)

启用2FA

  1. 登录后进入 个人资料 页面

  2. 点击 设置双因素认证

  3. 使用Google Authenticator等APP扫描二维码

  4. 输入APP显示的6位验证码完成绑定

使用2FA登录

  1. 输入用户名和密码

  2. 系统跳转到2FA验证页面

  3. 输入验证码完成登录

禁用2FA

  1. 进入个人资料页面

  2. 点击禁用双因素认证

  3. 输入当前验证码确认


6. 系统设置

6.1 基本设置

设置项

说明

默认值

站点名称

显示在导航栏和标题

SeaCMS

站点描述

SEO描述

-

站点关键词

SEO关键词

-

站点Logo

Logo图片URL

-

ICP备案号

显示在页脚

-

统计代码

第三方统计JS代码

-

6.2 SEO设置

设置项

说明

默认值

SEO标题后缀

追加到页面标题后

- SeaCMS

默认SEO描述

未设置时的默认描述

-

默认SEO关键词

未设置时的默认关键词

-

6.3 评论设置

设置项

说明

默认值

开启评论

全局评论开关

开启

评论审核

新评论需审核

开启

评论验证码

评论需输入验证码

关闭

6.4 上传设置

设置项

说明

默认值

上传大小限制

单文件最大MB数

16MB

允许上传类型

逗号分隔的扩展名

png,jpg,jpeg,gif,webp,svg,doc,docx,pdf

6.5 主题设置

设置项

说明

自定义CSS

追加到页面底部的CSS代码

自定义JS

追加到页面底部的JS代码

6.6 安全设置

设置项

说明

默认值

启用WAF

Web应用防火墙

开启

IP白名单

每行一个IP

6.7 性能设置

设置项

说明

默认值

CDN地址

静态资源CDN前缀

缓存超时

缓存过期时间(秒)

300


7. 主题管理

7.1 主题概述

SeaCMS 提供强大的主题管理功能,支持一键切换预设主题,也可通过可视化编辑器自定义主题样式。

7.2 预设主题

系统内置 8 种精心设计的预设主题:

主题名称

主色调

风格描述

海洋蓝 (Ocean Blue)

#2563eb

清新专业,适合技术博客

日落橙 (Sunset Orange)

#ea580c

温暖活力,适合生活类网站

森林绿 (Forest Green)

#16a34a

自然清新,适合环保主题

皇家紫 (Royal Purple)

#9333ea

高贵典雅,适合艺术类网站

午夜黑 (Midnight Dark)

#1f2937

现代暗色,适合科技类网站

樱花粉 (Sakura Pink)

#ec4899

浪漫温柔,适合个人博客

金沙黄 (Golden Sand)

#d97706

商务稳重,适合企业官网

极地白 (Arctic White)

#6b7280

简约纯净,适合文档站点

7.3 主题切换

  1. 进入 外观管理主题管理

  2. 浏览预设主题列表,点击主题卡片预览效果

  3. 点击 启用 按钮切换主题

  4. 前台立即应用新主题样式

7.4 可视化主题编辑器

点击主题的 编辑 按钮进入可视化编辑器,支持以下自定义选项:

颜色设置

设置项

说明

主色调

网站主要颜色(按钮、链接等)

主色调浅色

悬停状态、浅色背景

主色调深色

激活状态、深色背景

背景色

页面背景颜色

文字颜色

正文文字颜色

边框颜色

边框、分割线颜色

布局设置

设置项

说明

导航样式

顶部固定 / 静态导航

侧边栏位置

左侧 / 右侧 / 隐藏

内容宽度

固定宽度 / 全宽

圆角大小

元素圆角半径

字体设置

设置项

说明

正文字号

文章正文字体大小

标题字号

文章标题字体大小

行高

文字行间距

模块设置

设置项

说明

显示Hero横幅

是否显示首页顶部横幅

Hero高度

横幅高度

Hero背景图

横幅背景图片URL

显示侧边栏

是否显示侧边栏

显示页脚

是否显示页脚

页脚设置

设置项

说明

页脚背景色

页脚区域背景颜色

页脚文字色

页脚文字颜色

页脚样式

简洁 / 标准 / 详细

自定义CSS

自定义CSS 文本框中输入任意CSS代码,实现更高级的样式定制。

7.5 主题开发

如需开发自定义主题,请参考 SeaCMS_主题开发文档.md


8. 前端展示

8.1 页面路由

路由

说明

/

首页(轮播+最新文章)

/blog

博客列表(分页、分类筛选、标签筛选)

/post/<slug>

文章详情(评论、相关文章)

/page/<slug>

自定义页面

/search?q=关键词

搜索

/contact

联系我们

/sitemap.xml

站点地图

/robots.txt

爬虫规则

8.2 首页布局

  • 顶部轮播图(置顶文章,最多5篇)

  • 最新文章列表(10篇)

  • 侧边栏:分类列表、标签云、热门文章

8.3 暗色模式

  • 点击导航栏主题切换按钮

  • 自动保存偏好到本地存储

  • 全站适配暗色主题

8.4 SEO特性

  • 自动生成Sitemap(包含文章、页面、分类)

  • 每篇文章可设置独立的Meta标签

  • 内置SEO分析评分工具

  • 语义化HTML结构

  • Open Graph标签支持


第三部分:授权许可

SeaCMS 开源许可协议

MIT License

Copyright (c) 2026 SeaCMS

Permission is hereby granted, free of charge, to any person obtaining a copy of this software and associated documentation files (the "Software"), to deal in the Software without restriction, including without limitation the rights to use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of the Software, and to permit persons to whom the Software is furnished to do so, subject to the following conditions:

The above copyright notice and this permission notice shall be included in all copies or substantial portions of the Software.

THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.


第三方开源组件许可

SeaCMS 使用了以下开源组件,各组件遵循其各自的许可协议:

组件

版本

许可协议

Flask

3.1.0

BSD-3-Clause

Flask-SQLAlchemy

3.1.1

BSD-3-Clause

SQLAlchemy

2.0.36

MIT

Flask-Login

0.6.3

MIT

Flask-Principal

0.4.0

BSD-3-Clause

Flask-WTF

1.2.2

BSD-3-Clause

WTForms

3.2.1

BSD-3-Clause

Flask-Migrate

4.0.7

MIT

Flask-Caching

2.3.0

BSD-3-Clause

Flask-RESTful

0.3.10

BSD-3-Clause

Flask-Mail

0.10.0

BSD-3-Clause

Flask-Limiter

3.9.0

MIT

bcrypt

4.2.1

Apache-2.0

Pillow

-

HPND

bleach

6.2.0

Apache-2.0

pyotp

2.9.0

MIT

qrcode

7.4.2

BSD-3-Clause

APScheduler

3.10.4

MIT

Gunicorn

23.0.0

MIT

python-dotenv

1.0.1

BSD-3-Clause

email-validator

2.2.0

Unlicense

Tailwind CSS

本地部署

MIT

Font Awesome

本地部署

Font Awesome Free License

Chart.js

本地部署

MIT

Noto Sans SC

本地部署

SIL OFL


免责声明

  1. 本软件按"原样"提供,不作任何明示或暗示的保证,包括但不限于对适销性、特定用途适用性和非侵权性的保证。

  2. 在任何情况下,作者或版权持有人均不对任何索赔、损害或其他责任负责,无论这些追责来自合同、侵权或其他行为,还是产生于、源于或有关于本软件以及本软件的使用或其他处置。

  3. 用户应对使用本软件所产生的任何结果自行承担全部责任和风险。

  4. 本软件不提供任何形式的技术支持保证,作者保留随时停止维护的权利。


贡献者协议

通过向 SeaCMS 项目提交代码、文档或其他贡献,您同意:

  1. 您的贡献将按照 MIT 许可协议进行授权

  2. 您拥有提交贡献的合法权利

  3. 您的贡献不侵犯任何第三方的知识产权

  4. 项目维护者有权决定是否合并您的贡献


文档结束 — SeaCMS v1.1.0