基于Python的各类企业排行数据可视化分析系统 — 技术文档
一、项目概述
1.1 项目简介
本系统是一个面向企业排行榜数据的可视化分析平台,整合了胡润百富榜、中国民营企业500强、福布斯全球2000强三大权威企业排名数据源,提供多维度的数据查询、统计分析和可视化展示功能。
系统支持从2022年至2025年共4个年度的数据,涵盖691+条胡润品牌数据、760+条民营企业数据、169+条福布斯全球企业数据,并通过40+个API接口和50+个ECharts图表实现丰富的交互式可视化分析。
1.2 核心功能
| 功能模块 | 说明 |
|---|
| 数据概览首页 | 三大排行榜综合统计卡片 + 9个概览图表 |
| 胡润百富榜分析 | 按年份/行业筛选,5个图表 + 分页数据表 |
| 民营企业500强分析 | 按年份/省份筛选,5个图表 + 分页数据表 |
| 福布斯全球2000强分析 | 按年份/国家/行业三维筛选,7个图表 + 分页数据表 |
| 中国地图 | 省级企业分布热力图 + 柱状图 |
| 世界地图 | 国家企业分布地图 + 行业玫瑰图 + 散点图 |
| 数据分析仪表盘 | 20个ECharts图表的综合看板 |
| 全屏可视化大屏 | 适配大屏展示的独立页面,60秒自动刷新 |
| 用户认证系统 | 注册/登录/JWT鉴权/个人中心/修改密码 |
1.3 数据覆盖范围
| 排行榜 | 年份 | 记录数 | 数据维度 |
|---|
| 胡润百富榜 | 2022/2023/2024/2025 | 592条 | 排名、姓名、财富(元)、公司、行业 |
| 民营企业500强 | 2023/2024/2025 | 810条 | 排名、企业名、省份、营收(万元) |
| 福布斯全球2000 | 2024/2025 | 169条 | 排名、企业名、国家、行业、营收、利润、资产、市值(十亿美元) |



























二、技术栈
2.1 后端技术
| 技术 | 版本 | 用途 |
|---|
| Python | 3.10+ | 主开发语言 |
| FastAPI | 0.104+ | Web框架,提供RESTful API和页面路由 |
| Uvicorn | 0.24+ | ASGI服务器,支持热重载 |
| SQLAlchemy | 2.0+ | ORM框架,数据库模型定义和查询 |
| PyMySQL | 1.1+ | MySQL数据库驱动 |
| Pydantic | 2.5+ | 数据验证和序列化(Schemas) |
| python-jose | 3.3+ | JWT令牌生成和验证 |
| passlib[bcrypt] | 1.7+ | 密码哈希(BCrypt算法) |
2.2 前端技术
| 技术 | 版本 | 用途 |
|---|
| Jinja2 | 3.1+ | HTML模板引擎(FastAPI内置) |
| Bootstrap | 5.3.2 | 响应式UI框架(栅格、组件、工具类) |
| Bootstrap Icons | 1.11.3 | 图标库(300+图标) |
| ECharts | 5.5.0 | 数据可视化图表库(40+图表实例) |
| Google Fonts | — | 字体加载(Cormorant Garamond、DM Sans、JetBrains Mono) |
2.3 数据库
| 技术 | 说明 |
|---|
| MySQL | 8.0+ 关系型数据库 |
| 数据库名 | design_119_company |
| 字符集 | utf8mb4(支持中文和特殊字符) |
| 连接串 | mysql+pymysql://root:123456@localhost:3306/design_119_company?charset=utf8mb4 |
2.4 数据采集工具
| 工具 | 用途 |
|---|
| Firecrawl | 网页抓取和结构化数据提取 |
| Pandas | CSV/Excel数据文件读取 |
| openpyxl | Excel文件解析引擎 |
三、系统架构
3.1 整体架构
┌──────────────────────────────────────────────────────────┐
│ 浏览器 (Client) │
│ ┌──────────┐ ┌──────────┐ ┌──────────┐ ┌──────────┐ │
│ │ 首页概览 │ │ 排行分析 │ │ 地图可视化│ │ 大屏展示 │ │
│ └────┬─────┘ └────┬─────┘ └────┬─────┘ └────┬─────┘ │
│ │ │ │ │ │
│ └──────────────┴──────────────┴──────────────┘ │
│ │ AJAX / fetch │
└─────────────────────────┼──────────────────────────────────┘
│ HTTP (JSON)
┌─────────────────────────┼──────────────────────────────────┐
│ FastAPI Server │
│ ┌──────────┐ ┌───────────────────────────────────────┐ │
│ │ Page │ │ API Routers │ │
│ │ Routes │ │ /auth /api/hurun /api/private │ │
│ │ (Jinja2) │ │ /api/forbes /api/analysis │ │
│ └──────────┘ └───────────────────┬───────────────────┘ │
│ │ │
│ ┌──────────────────────────────────┴──────────────────┐ │
│ │ SQLAlchemy ORM │ │
│ │ Models: User, HurunBrand, PrivateEnterprise, │ │
│ │ ForbesGlobal │ │
│ └──────────────────────────┬──────────────────────────┘ │
└─────────────────────────────┼──────────────────────────────┘
│
┌─────────────────────────────┼──────────────────────────────┐
│ MySQL Database │
│ design_119_company │
│ ┌────────┐ ┌──────────────┐ ┌────────────────┐ │
│ │ users │ │hurun_brand │ │private_enterprise│ │
│ └────────┘ └──────────────┘ └────────────────┘ │
│ ┌────────────┐ │
│ │forbes_global│ │
│ └────────────┘ │
└────────────────────────────────────────────────────────────┘
3.2 目录结构
119-基于Python的各类企业排行数据可视化分析系统/
├── code/
│ ├── app/
│ │ ├── __init__.py
│ │ ├── main.py # FastAPI应用入口,路由注册
│ │ ├── config.py # 配置常量(DB连接、JWT密钥)
│ │ ├── database.py # SQLAlchemy引擎和会话工厂
│ │ ├── models.py # ORM模型定义(4张表)
│ │ ├── schemas.py # Pydantic请求/响应模型
│ │ ├── routers/
│ │ │ ├── auth.py # 认证路由(注册/登录/鉴权)
│ │ │ ├── hurun.py # 胡润榜数据API
│ │ │ ├── private.py # 民营企业数据API
│ │ │ ├── forbes.py # 福布斯数据API
│ │ │ └── analysis.py # 跨排行榜分析API(17个接口)
│ │ ├── services/
│ │ │ ├── crawler.py # Firecrawl网页爬虫
│ │ │ └── data_loader.py # CSV/Excel批量导入
│ │ └── static/
│ │ └── css/
│ │ └── style.css # 全局样式(Luxury Dark主题)
│ ├── templates/
│ │ ├── base.html # 基础布局模板(侧边栏+顶栏)
│ │ ├── index.html # 首页数据概览
│ │ ├── login.html # 登录页
│ │ ├── register.html # 注册页
│ │ ├── profile.html # 个人中心
│ │ ├── hurun.html # 胡润百富榜分析
│ │ ├── private.html # 民营企业500强分析
│ │ ├── forbes.html # 福布斯全球2000强分析
│ │ ├── map_china.html # 中国地图
│ │ ├── map_world.html # 全球地图
│ │ ├── dashboard.html # 数据分析仪表盘(20图表)
│ │ └── screen.html # 全屏可视化大屏
│ ├── run.py # 启动脚本(uvicorn)
│ ├── import_scraped2.py # 数据导入: 胡润2022/2023, 民营2023
│ ├── import_scraped_data.py # 数据导入: 胡润2024, 福布斯2024
│ ├── import_2025_data.py # 数据导入: 2025年三大榜单
│ ├── scraped_data.py # 原始数据定义(硬编码)
│ └── import_data.py # 通用数据导入工具
└── 技术文档.md # 本文档
3.3 请求处理流程
用户访问页面 ──→ FastAPI Page Route ──→ Jinja2渲染HTML ──→ 浏览器
│
JS加载后
│
checkAuth()验证token
│
┌───────────┴───────────┐
│ │
有token且有效 无token或无效
│ │
加载数据(ECharts) 跳转到 /login
│
fetch('/api/...')
│
Authorization: Bearer <token>
│
FastAPI API Route
│
SQLAlchemy查询MySQL
│
返回JSON ──→ ECharts渲染图表
四、数据库设计
4.1 数据模型
users — 用户表
| 字段 | 类型 | 约束 | 说明 |
|---|
| id | INTEGER | PK, AUTO_INCREMENT | 用户ID |
| username | VARCHAR(50) | UNIQUE, NOT NULL | 用户名 |
| password | VARCHAR(255) | NOT NULL | BCrypt哈希密码 |
| email | VARCHAR(100) | NULLABLE | 邮箱 |
| created_at | DATETIME | DEFAULT NOW() | 注册时间 |
hurun_brand — 胡润品牌榜
| 字段 | 类型 | 约束 | 说明 |
|---|
| id | INTEGER | PK, AUTO_INCREMENT | 记录ID |
| year | INTEGER | NOT NULL | 年份 |
| ranking | INTEGER | — | 排名 |
| brand_name | VARCHAR(100) | — | 品牌/个人名称 |
| brand_value | NUMERIC(15,2) | — | 品牌价值(元) |
| parent_company | VARCHAR(200) | — | 母公司 |
| industry | VARCHAR(100) | — | 行业 |
private_enterprise — 民营企业500强
| 字段 | 类型 | 约束 | 说明 |
|---|
| id | INTEGER | PK, AUTO_INCREMENT | 记录ID |
| year | INTEGER | NOT NULL | 年份 |
| ranking | INTEGER | — | 排名 |
| company_name | VARCHAR(200) | — | 企业名称 |
| province | VARCHAR(50) | — | 省份 |
| revenue | NUMERIC(15,2) | — | 营收(万元) |
forbes_global — 福布斯全球2000强
| 字段 | 类型 | 约束 | 说明 |
|---|
| id | INTEGER | PK, AUTO_INCREMENT | 记录ID |
| year | INTEGER | NOT NULL | 年份 |
| ranking | INTEGER | — | 排名 |
| company_name | VARCHAR(200) | — | 企业名称 |
| country | VARCHAR(100) | — | 国家 |
| industry | VARCHAR(100) | — | 行业 |
| revenue | NUMERIC(15,2) | — | 营收(十亿美元) |
| profit | NUMERIC(15,2) | — | 利润(十亿美元) |
| assets | NUMERIC(15,2) | — | 总资产(十亿美元) |
| market_value | NUMERIC(15,2) | — | 市值(十亿美元) |
4.2 数据量统计
| 表 | 2022 | 2023 | 2024 | 2025 | 合计 |
|---|
| hurun_brand | 100 | 340 | 102 | 50 | 592 |
| private_enterprise | — | 260 | 500 | 50 | 810 |
| forbes_global | — | — | 119 | 50 | 169 |
五、API接口文档
5.1 认证接口 /auth
| 方法 | 路径 | 说明 | 认证 |
|---|
| POST | /auth/register | 用户注册 | 否 |
| POST | /auth/login | 用户登录,返回JWT | 否 |
| GET | /auth/me | 获取当前用户信息 | 是 |
| PUT | /auth/password | 修改密码 | 是 |
登录响应示例:
{
"token": "eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9...",
"token_type": "bearer",
"user": {"id": 1, "username": "admin", "email": null}
}
5.2 胡润榜接口 /api/hurun
| 方法 | 路径 | 参数 | 说明 |
|---|
| GET | /list | year, industry, page, size | 分页查询,支持年份和行业筛选 |
| GET | /years | — | 获取可用年份列表 |
| GET | /industries | year | 获取行业列表 |
| GET | /stats/industry | year | 行业分布统计(数量+总价值) |
| GET | /stats/top | year, limit | 品牌价值Top N(去重) |
5.3 民营企业接口 /api/private
| 方法 | 路径 | 参数 | 说明 |
|---|
| GET | /list | year, province, page, size | 分页查询,支持年份和省份筛选 |
| GET | /years | — | 获取可用年份列表 |
| GET | /provinces | year | 获取省份列表(标准化短名) |
| GET | /stats/province | year | 省份分布统计(数量+总营收) |
| GET | /stats/top | year, limit | 营收Top N(去重) |
5.4 福布斯接口 /api/forbes
| 方法 | 路径 | 参数 | 说明 |
|---|
| GET | /list | year, country, industry, page, size | 分页查询,三维筛选 |
| GET | /years | — | 获取可用年份列表 |
| GET | /countries | year | 获取国家列表 |
| GET | /industries | year | 获取行业列表 |
| GET | /stats/country | year | 国家分布统计 |
| GET | /stats/industry | year | 行业分布统计 |
| GET | /stats/top | year, limit | 营收Top N(中英文去重) |
5.5 分析接口 /api/analysis (17个)
| 方法 | 路径 | 说明 |
|---|
| GET | /overview | 三大排行榜综合概览(总记录数、年均值、极值) |
| GET | /industry-comparison | 胡润 vs 福布斯行业对比 |
| GET | /province-map | 省份企业分布(数量+营收) |
| GET | /country-map | 国家企业分布(数量+营收) |
| GET | /hurun/year-trend | 胡润年度趋势(数量、总值、均值) |
| GET | /private/year-trend | 民营企业年度趋势 |
| GET | /forbes/year-trend | 福布斯年度趋势 |
| GET | /revenue-distribution | 民营企业营收分布(8个区间) |
| GET | /forbes/profit-ranking | 福布斯利润排名 |
| GET | /forbes/assets-ranking | 福布斯资产排名 |
| GET | /hurun/parent-company | 胡润母公司品牌统计Top 15 |
| GET | /private/top-revenue-by-province | 省份营收排名Top 15 |
| GET | /forbes/country-industry | 国家×行业交叉统计 |
| GET | /cross-rank/industry | 跨排行榜行业分析 |
| GET | /yoy/growth | 三大排行榜同比增长率 |
| GET | /forbes/profit-margin | 福布斯利润率排名 |
| GET | /forbes/market-value-dist | 福布斯市值分布 |
| GET | /kpis | 仪表盘KPI指标 |
| GET | /forbes/industry-country-heatmap | 行业×国家热力矩阵 |
六、前端页面详解
6.1 页面路由
| 路径 | 页面 | 认证 | 说明 |
|---|
/ | 首页 | 否 | 数据概览,4个统计卡片+9个图表 |
/login | 登录 | 否 | JWT登录表单 |
/register | 注册 | 否 | 用户注册表单 |
/profile | 个人中心 | 是 | 用户信息+修改密码 |
/hurun | 胡润分析 | 是 | 5图表+筛选+分页表 |
/private | 民营分析 | 是 | 5图表+筛选+分页表 |
/forbes | 福布斯分析 | 是 | 7图表+三维筛选+分页表 |
/map-china | 中国地图 | 是 | ECharts地图+热力图 |
/map-world | 全球地图 | 是 | ECharts世界地图+玫瑰图 |
/dashboard | 仪表盘 | 是 | 20个图表综合看板 |
/screen | 全屏大屏 | 是 | 独立大屏展示,60秒自动刷新 |
6.2 图表类型统计
| 图表类型 | 使用场景 | 数量 |
|---|
| 饼图/环形图 | 行业分布、省份分布、国家分布 | 8 |
| 柱状图(竖向) | 省份统计、行业统计、年度趋势 | 12 |
| 柱状图(横向) | Top N排名(品牌价值/营收) | 10 |
| 折线图 | 年度趋势、同比增长 | 4 |
| 散点图 | 营收vs利润、品牌价值分布 | 3 |
| 雷达图 | 母公司品牌对比、企业综合指标 | 2 |
| 树图 | 跨排行榜行业分析 | 1 |
| 漏斗图 | 营收分布区间 | 1 |
| 热力图 | 行业×国家矩阵 | 1 |
| 仪表盘 | KPI指标展示 | 3 |
| 地图 | 中国省份/全球国家分布 | 2 |
| 组合图(柱+线) | 年度趋势双轴展示 | 2 |
| 合计 | | 49 |
6.3 ECharts图表类型清单
本系统使用了以下12种ECharts图表类型:
- pie — 饼图/环形图 (行业、省份、国家分布)
- bar — 柱状图 (统计、排名、趋势)
- line — 折线图 (趋势、增长率)
- scatter — 散点图 (相关性分析)
- radar — 雷达图 (多维对比)
- treemap — 树图 (层级分布)
- funnel — 漏斗图 (区间分布)
- heatmap — 热力图 (交叉矩阵)
- gauge — 仪表盘 (KPI)
- map — 地图 (地理分布)
- bar+line — 组合图 (双轴展示)
- roseType — 南丁格尔玫瑰图 (面积等比)
七、核心功能实现
7.1 JWT认证机制
注册流程:
用户提交 ──→ POST /auth/register
├── 校验用户名唯一性
├── BCrypt哈希密码
└── 写入users表
登录流程:
用户提交 ──→ POST /auth/login
├── 查询用户名
├── BCrypt验证密码
├── 生成JWT(sub=username, exp=60min)
└── 返回 {token, user}
鉴权流程:
API请求 ──→ Authorization: Bearer <token>
├── jwt.decode(token, SECRET_KEY, HS256)
├── 查询users表获取用户
└── 注入到路由参数
前端Token管理:
- 登录成功后存储到
localStorage.setItem('token', token) - 页面加载时
checkAuth() 检查token,无token跳转 /login - API请求通过
getAuthHeaders() 自动附加 Authorization 头
7.2 省份名称标准化
民营企业数据中省份名称存在"北京市"和"北京"两种格式,系统统一标准化为短名:
PROVINCE_SHORT = {
'北京市': '北京', '天津市': '天津', '河北省': '河北',
'山西省': '山西', '内蒙古自治区': '内蒙古', ...
}
def norm_province(name):
return PROVINCE_SHORT.get(name, name.rstrip('省市'))
7.3 福布斯中英文去重
福布斯数据中同一企业可能以中文和英文两种名称存在,系统通过映射表去重:
CN_TO_EN = {
'中国石油': 'PetroChina', '阿里巴巴': 'Alibaba Group',
'中国银行': 'Bank of China', '腾讯': 'Tencent Holdings', ...
}
查询时先SQL过滤中文名,再内存合并中英文记录。
7.4 数据采集方案
| 数据源 | 采集方式 | 工具 |
|---|
| 胡润百富榜2025 | PDF抓取+人工校正 | Firecrawl + sxhhy.com |
| 福布斯202000 2025 | 开源数据集 | Kaggle |
| 民营企业500强2025 | 新浪财经Top 10 + 2024数据增长推算 | Sina Finance |
| 胡润2022/2023 | 硬编码数据导入 | Python脚本 |
| 民营企业2023/2024 | CSV/Excel导入 | Pandas |
7.5 图表主题系统
系统采用"奢华暗黑"(Luxury Dark)主题,CSS变量定义:
:root {
--bg-primary: #06060b;
--bg-card: #151520;
--accent-primary: #c9a84c;
--text-primary: #f0ece2;
--font-display: 'Cormorant Garamond';
--font-body: 'DM Sans';
--font-mono: 'JetBrains Mono';
}
ECharts图表统一使用金色渐变和深色配色:
- 15色调色板
chartColors - 金色渐变工具
getGoldGradient() - 暗色悬浮提示框
chartTooltipStyle
八、安装与运行
8.1 环境要求
- Python 3.10+
- MySQL 8.0+
- Node.js (可选,用于前端开发)
8.2 安装步骤
cd "119-基于Python的各类企业排行数据可视化分析系统/code"
pip install fastapi uvicorn sqlalchemy pymysql pydantic python-jose[cryptography] passlib[bcrypt] pandas openpyxl
mysql -u root -p -e "CREATE DATABASE design_119_company CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci;"
python import_scraped2.py
python import_scraped_data.py
python import_2025_data.py
python run.py
8.3 访问地址
http://127.0.0.1:8000 # 首页
http://127.0.0.1:8000/login # 登录页
http://127.0.0.1:8000/docs # Swagger API文档
九、页面功能清单
9.1 首页 (/)
| 区域 | 内容 | 数据源 |
|---|
| 统计卡片 | 胡润总数、民营总数、福布斯总数、合计 | /api/analysis/overview |
| 图表1 | 胡润行业分布饼图 | /api/hurun/stats/industry |
| 图表2 | 民营省份分布饼图 | /api/private/stats/province |
| 图表3 | 福布斯国家分布饼图 | /api/forbes/stats/country |
| 图表4 | 胡润Top 10品牌价值 | /api/hurun/stats/top |
| 图表5 | 民营Top 10营收 | /api/private/stats/top |
| 图表6 | 省份排名柱状图 | /api/analysis/private/top-revenue-by-province |
| 图表7 | 营收分布柱状图 | /api/analysis/revenue-distribution |
| 图表8 | 福布斯Top 10营收 | /api/forbes/stats/top |
| 图表9 | 胡润年度趋势(柱+线) | /api/analysis/hurun/year-trend |
9.2 胡润百富榜 (/hurun)
| 区域 | 内容 |
|---|
| 筛选栏 | 年份下拉、行业下拉、筛选/重置按钮 |
| 图表1 | 行业分布饼图 |
| 图表2 | 行业品牌价值柱状图 |
| 图表3 | Top 20品牌价值横向柱状图 |
| 图表4 | 母公司雷达图 |
| 图表5 | 品牌价值散点图 |
| 数据表 | 排名、品牌名、母公司、行业、品牌价值(20条/页) |
9.3 民营企业500强 (/private)
| 区域 | 内容 |
|---|
| 筛选栏 | 年份下拉、省份下拉、筛选/重置按钮 |
| 图表1 | 省份分布饼图 |
| 图表2 | 省份企业数量柱状图 |
| 图表3 | Top 20营收横向柱状图 |
| 图表4 | 省份总营收折线图 |
| 图表5 | 营收散点图 |
| 数据表 | 排名、企业名、省份、营收(20条/页) |
9.4 福布斯全球2000强 (/forbes)
| 区域 | 内容 |
|---|
| 筛选栏 | 年份、国家、行业三个下拉,筛选/重置按钮 |
| 图表1 | 国家分布饼图 |
| 图表2 | 行业分布饼图 |
| 图表3 | 国家企业数量柱状图 |
| 图表4 | 行业营收柱状图 |
| 图表5 | Top 20营收横向柱状图 |
| 图表6 | 营收 vs 利润散点图 |
| 图表7 | Top 5企业综合雷达图 |
| 数据表 | 排名、企业名、国家、行业、营收、利润、资产、市值(20条/页) |
9.5 中国地图 (/map-china)
| 区域 | 内容 |
|---|
| 筛选栏 | 年份下拉 |
| 地图 | 省级热力图(企业数量) |
| 图表1 | 各省企业数量柱状图 |
| 图表2 | 各省营收总额柱状图 |
9.6 全球地图 (/map-world)
| 区域 | 内容 |
|---|
| 筛选栏 | 年份下拉 |
| 地图 | 世界地图(国家企业数量) |
| 图表1 | 各国企业数量柱状图 |
| 图表2 | 各国营收总额柱状图 |
| 图表3 | 行业分布玫瑰图 |
| 图表4 | 营收 vs 利润散点图 |
9.7 数据分析仪表盘 (/dashboard)
8个KPI卡片 + 20个ECharts图表,覆盖所有分析维度。包含:饼图、柱状图、折线图、散点图、雷达图、树图、漏斗图、热力图、仪表盘、组合图共10种图表类型。
9.8 全屏大屏 (/screen)
独立页面(不继承base.html),适配大屏投影。6个KPI指标 + 6个图表,60秒自动刷新,带浮动粒子动画背景。
十、UI设计规范
10.1 设计语言
系统采用 “Bloomberg Terminal × Art Deco × Cinematic” 的奢华暗黑主题:
- 背景: 近黑色 (
#06060b),多层渐变叠加 - 强调色: 暖金色 (
#c9a84c),用于标题、边框、高亮 - 文字: 暖白色 (
#f0ece2) 层级分明 - 卡片: 深灰 (
#151520),带金色阴影光晕 - 特效: 胶片颗粒纹理、浮动粒子、入场动画
10.2 字体方案
| 用途 | 字体 | 说明 |
|---|
| 标题/展示 | Cormorant Garamond | 衬线体,高端感 |
| 正文/导航 | DM Sans | 无衬线体,现代感 |
| 数据/代码 | JetBrains Mono | 等宽体,精确感 |
10.3 响应式断点
| 断点 | 宽度 | 布局 |
|---|
| 桌面 | ≥992px | 侧边栏展开,双列图表 |
| 平板 | 768-991px | 侧边栏折叠,单列图表 |
| 手机 | <768px | 侧边栏隐藏,全宽布局 |
十一、安全设计
11.1 认证安全
- 密码使用 BCrypt 算法哈希存储,不可逆
- JWT令牌使用 HS256 签名,有效期60分钟
- 前端通过
localStorage 存储token,页面加载时验证
11.2 页面保护
- 非公开页面(除首页、登录、注册外)均需JWT认证
- 前端
checkAuth() 在页面加载第一时间检查token - 无token时立即重定向到登录页,不渲染页面内容
11.3 API保护
- 数据API(如
/api/hurun/list)当前为开放访问 - 认证API(如
/auth/me)通过 get_current_user 依赖注入验证
十二、扩展能力
12.1 数据扩展
系统支持通过编写Python导入脚本增加新年度数据:
from app.models import HurunBrand
from decimal import Decimal
record = HurunBrand(
year=2026,
ranking=1,
brand_name="某品牌",
brand_value=Decimal("10000000000"),
parent_company="某公司",
industry="某行业"
)
db.add(record)
db.commit()
12.2 图表扩展
新增图表只需在对应HTML模板中:
- 添加
<div id="new-chart" class="chart-container"></div> - 在JS中初始化ECharts实例并调用API
12.3 API扩展
新增API端点遵循现有模式:
@router.get("/new-endpoint")
def new_endpoint(year: int = None, db: Session = Depends(get_db)):
query = db.query(Model)
if year:
query = query.filter(Model.year == year)
return query.all()
所有评论(0)