Hikaritora/RescueNET
GitHub: Hikaritora/RescueNET
RescueNet是一款基于Django的事件管理和应急响应系统,旨在帮助调度员和救援队伍高效管理紧急事件。
Stars: 0 | Forks: 2
# RescueNet
一个使用 Django 构建的全面**事件管理和应急响应系统**。RescueNet 允许调度员和救援队伍高效地管理紧急事件,协调资源,并实时跟踪响应操作。
  
## 🌟 功能
- **事件管理**:创建、分配、跟踪和关闭紧急事件
- **资源管理**:管理救护车、警察单位、消防车和技术设备
- **实时地图**:Leaflet 的交互式地图界面,用于事件和资源位置跟踪
- **动态资源分配**:直接在地图上拖放资源分配到事件
- **基于角色的访问控制**:三个用户角色(救援人员、调度员、管理员)具有细粒度权限
- **分析和报告**:显示事件类型、状态和资源可用性的综合图表
- **数据导出**:将事件报告导出到 CSV
- **演示数据种植**:内置命令用于测试填充示例数据
## 📋 用户角色与权限
| 角色 | 功能 |
|------|---|
| **救援人员** | 查看仪表板、事件、资源和报告(只读) |
| **调度员** | 创建事件、分配/取消分配资源、关闭事件 |
| **管理员** | 完全访问 + 添加/删除资源,管理资源可用性 |
查看[ROLE_PERMISSIONS.md](ROLE_PERMISSIONS.md)以获取详细权限。
## 🏗️ 技术栈
- **后端**:Django 6.0.4
- **数据库**:PostgreSQL 16+(使用 psycopg2)
- **前端**:HTML5、CSS3、JavaScript(Vanilla + Chart.js、Leaflet)
- **地图**:Leaflet 1.9.4、Carto、标记由 [@pointhi](https://github.com/pointhi)
- **图表**:Chart.js(用于分析仪表板)
- **服务器**:ASGI(与 daphne 兼容的 Uvicorn)
## 📦 先决条件
在安装 RescueNet 之前,请确保您有:
1. **Python 3.11 或更高版本**
- 从:https://www.python.org/downloads/ 下载
- 在安装过程中,请勾选“将 Python 添加到 PATH”
2. **PostgreSQL 16、17 或 18**
- 从:https://www.postgresql.org/download/ 下载
- 记住您为 `postgres` 用户设置的密码
## 🚀 安装
### 选项 1:自动安装(推荐)
开始的最简单方法是使用内置的设置脚本:
```
python setup.py
```
这将:
1. 创建一个虚拟环境
2. 安装所有依赖项
3. 设置 PostgreSQL 数据库
4. 运行迁移
5. 创建一个演示超级用户(用户名:`admin`,密码:`admin`)
6. 可选:种植演示数据
7. 可选:启动开发服务器
**当提示时**,按 Enter 键接受默认值,或根据需要自定义。
### 选项 2:手动安装
如果您喜欢手动设置:
#### 1. 克隆或导航到项目目录
```
cd RescueNet
```
#### 2. 创建并激活虚拟环境
**在 Windows(PowerShell)中**:
```
python -m venv .venv
.\.venv\Scripts\Activate.ps1
```
**在 macOS/Linux 中**:
```
python3 -m venv .venv
source .venv/bin/activate
```
#### 3. 安装依赖项
```
pip install -r requirements.txt
```
#### 4. 在项目根目录中创建 `.env` 文件
```
DATABASE_NAME=rescuenet
DATABASE_USER=postgres
DATABASE_PASSWORD=your_postgres_password
DATABASE_HOST=localhost
DATABASE_PORT=5432
DJANGO_SECRET_KEY=your_secret_key_here
RESCUENET_SUPERUSER_NAME=admin
RESCUENET_SUPERUSER_EMAIL=admin@example.com
RESCUENET_SUPERUSER_PASSWORD=admin
```
#### 5. 创建 PostgreSQL 数据库
```
psql -U postgres -c "CREATE DATABASE rescuenet;"
```
#### 6. 运行迁移
```
python manage.py migrate
```
#### 7. 创建超级用户
```
python manage.py createsuperuser
```
#### 8. (可选)种植演示数据
```
python manage.py seed_database --admins 3 --dysp 50 --rescuers 50 --resources 60 --incidents 200
```
#### 9. 启动开发服务器
```
python manage.py runserver
```
## 🎯 快速入门
1. **启动开发服务器**:
python manage.py runserver
2. **打开您的浏览器并导航到**:
- 主应用:http://127.0.0.1:8000/
- 管理面板:http://127.0.0.1:8000/admin/
3. **使用演示凭据登录**:
- 用户名:`admin`
- 密码:`admin`
4. **探索仪表板**:
- 查看活动事件
- 创建新事件
- 使用交互式地图分配资源
- 查看分析和报告
## 📁 项目结构
```
RescueNet/
├── core/ # Django project settings
│ ├── settings.py # Main Django configuration
│ ├── urls.py # URL routing
│ ├── wsgi.py # WSGI application
│ └── asgi.py # ASGI application
│
├── management/ # Main Django app
│ ├── migrations/ # Database migrations
│ ├── static/
│ │ ├── css/ # Static stylesheets
│ │ └── js/ # Static JavaScript (map-picker)
│ ├── templates/
│ │ └── management/ # HTML templates
│ ├── models.py # Database models (User, Incident, Resource)
│ ├── views.py # View logic
│ ├── forms.py # Django forms
│ ├── admin.py # Django admin configuration
│ └── management/
│ └── commands/
│ └── seed_database.py # Demo data seeding command
│
├── setup.py # Automated installation script
├── manage.py # Django management CLI
├── requirements.txt # Python dependencies
├── README.md # This file
├── ROLE_PERMISSIONS.md # Detailed role documentation
├── LICENSE # License
└── .env # Environment configuration (created during setup)
```
## 🗂️ 关键模型
### 用户
- 扩展 Django 的 AbstractUser 的自定义用户模型
- 角色:`rescuer`、`dispatcher`、`admin`
- 基于角色的权限检查
### 事件
- 类型(11 个类别:道路事故、医疗紧急情况、火灾等)
- 优先级(低、中、高、危急)
- 状态(已报告、进行中、已关闭)
- 位置(纬度/经度)
- 时间戳和报告者跟踪
### 资源
- 类型(救护车、警察、消防车、技术)
- 专业化(根据类型而异)
- 状态(可用、已分配、不可用)
- 位置跟踪和事件分配
## 📊 分析
**报告和存档**部分提供了四个交互式图表的视觉分析:
1. **按类型的事件**(饼图)- 具有独特颜色调色的不同事件类型的分布
2. **事件状态**(柱状图)- 已报告、进行中和已关闭事件的计数
3. **资源类型**(饼图)- 资源类型的分布
4. **资源状态**(柱状图)- 可用、已分配和不可用资源的计数
## 🔧 可用命令
### 运行开发服务器
```
python manage.py runserver
```
### 创建演示数据
```
python manage.py seed_database --admins 3 --dysp 50 --rescuers 50 --resources 60 --incidents 200
```
### 应用迁移
```
python manage.py migrate
```
### 创建新超级用户
```
python manage.py createsuperuser
```
### 访问 Django 管理面板
访问:http://127.0.0.1:8000/admin/
## 🔐 安全注意事项
- 所有密码都必须通过环境变量(`.env`)配置
- 权限检查在所有修改端点上强制执行
- UI 隐藏用户不应执行的操作,但保护始终在服务器端
- 在所有表单上启用 CSRF 保护
- 数据库凭据绝不应提交到版本控制
## 📝 环境变量
`.env` 文件(在安装期间创建)包含:
```
DATABASE_NAME # PostgreSQL database name
DATABASE_USER # PostgreSQL user
DATABASE_PASSWORD # PostgreSQL user password
DATABASE_HOST # PostgreSQL host (default: localhost)
DATABASE_PORT # PostgreSQL port (default: 5432)
DJANGO_SECRET_KEY # Django secret key (auto-generated)
RESCUENET_SUPERUSER_NAME # Default admin username
RESCUENET_SUPERUSER_EMAIL # Default admin email
RESCUENET_SUPERUSER_PASSWORD # Default admin password
```
## 🐛 故障排除
### 数据库连接错误
- 确保 PostgreSQL 正在运行:`psql -U postgres -c "\l"`
- 检查 `.env` 是否具有正确的数据库凭据
- 验证数据库是否存在:`psql -U postgres -c "\l rescuenet"`
### 虚拟环境未激活
**Windows**:使用 `.\venv\Scripts\Activate.ps1`(不是 `.venv\Scripts\...`)
**macOS/Linux**:使用 `source .venv/bin/activate`
### 端口 8000 已被占用
```
python manage.py runserver 8001
```
### 丢失依赖项
```
pip install -r requirements.txt --upgrade
```
## 📚 其他资源
- [Django 文档](https://docs.djangoproject.com/)
- [PostgreSQL 文档](https://www.postgresql.org/docs/)
- [Leaflet.js 文档](https://leafletjs.com/reference.html)
- [Chart.js 文档](https://www.chartjs.org/docs/latest/)
## 👥 创建者
- [@Hikaritora](https://github.com/Hikaritora)
- [@Private-AS](https://github.com/Private-AS)
- [@ToTenPatryk](https://github.com/ToTenPatryk)
## 📄 许可证
本项目采用 MIT 许可证 — 请参阅[许可证](https://github.com/Hikaritora/RescueNET/blob/main/LICENSE)文件以获取详细信息。
这是一个大学课程项目。我们与任何名为“RescueNet”的其他项目或公司无关联。
**用❤️为应急管理系统制作**
## 🌟 功能
- **事件管理**:创建、分配、跟踪和关闭紧急事件
- **资源管理**:管理救护车、警察单位、消防车和技术设备
- **实时地图**:Leaflet 的交互式地图界面,用于事件和资源位置跟踪
- **动态资源分配**:直接在地图上拖放资源分配到事件
- **基于角色的访问控制**:三个用户角色(救援人员、调度员、管理员)具有细粒度权限
- **分析和报告**:显示事件类型、状态和资源可用性的综合图表
- **数据导出**:将事件报告导出到 CSV
- **演示数据种植**:内置命令用于测试填充示例数据
## 📋 用户角色与权限
| 角色 | 功能 |
|------|---|
| **救援人员** | 查看仪表板、事件、资源和报告(只读) |
| **调度员** | 创建事件、分配/取消分配资源、关闭事件 |
| **管理员** | 完全访问 + 添加/删除资源,管理资源可用性 |
查看[ROLE_PERMISSIONS.md](ROLE_PERMISSIONS.md)以获取详细权限。
## 🏗️ 技术栈
- **后端**:Django 6.0.4
- **数据库**:PostgreSQL 16+(使用 psycopg2)
- **前端**:HTML5、CSS3、JavaScript(Vanilla + Chart.js、Leaflet)
- **地图**:Leaflet 1.9.4、Carto、标记由 [@pointhi](https://github.com/pointhi)
- **图表**:Chart.js(用于分析仪表板)
- **服务器**:ASGI(与 daphne 兼容的 Uvicorn)
## 📦 先决条件
在安装 RescueNet 之前,请确保您有:
1. **Python 3.11 或更高版本**
- 从:https://www.python.org/downloads/ 下载
- 在安装过程中,请勾选“将 Python 添加到 PATH”
2. **PostgreSQL 16、17 或 18**
- 从:https://www.postgresql.org/download/ 下载
- 记住您为 `postgres` 用户设置的密码
## 🚀 安装
### 选项 1:自动安装(推荐)
开始的最简单方法是使用内置的设置脚本:
```
python setup.py
```
这将:
1. 创建一个虚拟环境
2. 安装所有依赖项
3. 设置 PostgreSQL 数据库
4. 运行迁移
5. 创建一个演示超级用户(用户名:`admin`,密码:`admin`)
6. 可选:种植演示数据
7. 可选:启动开发服务器
**当提示时**,按 Enter 键接受默认值,或根据需要自定义。
### 选项 2:手动安装
如果您喜欢手动设置:
#### 1. 克隆或导航到项目目录
```
cd RescueNet
```
#### 2. 创建并激活虚拟环境
**在 Windows(PowerShell)中**:
```
python -m venv .venv
.\.venv\Scripts\Activate.ps1
```
**在 macOS/Linux 中**:
```
python3 -m venv .venv
source .venv/bin/activate
```
#### 3. 安装依赖项
```
pip install -r requirements.txt
```
#### 4. 在项目根目录中创建 `.env` 文件
```
DATABASE_NAME=rescuenet
DATABASE_USER=postgres
DATABASE_PASSWORD=your_postgres_password
DATABASE_HOST=localhost
DATABASE_PORT=5432
DJANGO_SECRET_KEY=your_secret_key_here
RESCUENET_SUPERUSER_NAME=admin
RESCUENET_SUPERUSER_EMAIL=admin@example.com
RESCUENET_SUPERUSER_PASSWORD=admin
```
#### 5. 创建 PostgreSQL 数据库
```
psql -U postgres -c "CREATE DATABASE rescuenet;"
```
#### 6. 运行迁移
```
python manage.py migrate
```
#### 7. 创建超级用户
```
python manage.py createsuperuser
```
#### 8. (可选)种植演示数据
```
python manage.py seed_database --admins 3 --dysp 50 --rescuers 50 --resources 60 --incidents 200
```
#### 9. 启动开发服务器
```
python manage.py runserver
```
## 🎯 快速入门
1. **启动开发服务器**:
python manage.py runserver
2. **打开您的浏览器并导航到**:
- 主应用:http://127.0.0.1:8000/
- 管理面板:http://127.0.0.1:8000/admin/
3. **使用演示凭据登录**:
- 用户名:`admin`
- 密码:`admin`
4. **探索仪表板**:
- 查看活动事件
- 创建新事件
- 使用交互式地图分配资源
- 查看分析和报告
## 📁 项目结构
```
RescueNet/
├── core/ # Django project settings
│ ├── settings.py # Main Django configuration
│ ├── urls.py # URL routing
│ ├── wsgi.py # WSGI application
│ └── asgi.py # ASGI application
│
├── management/ # Main Django app
│ ├── migrations/ # Database migrations
│ ├── static/
│ │ ├── css/ # Static stylesheets
│ │ └── js/ # Static JavaScript (map-picker)
│ ├── templates/
│ │ └── management/ # HTML templates
│ ├── models.py # Database models (User, Incident, Resource)
│ ├── views.py # View logic
│ ├── forms.py # Django forms
│ ├── admin.py # Django admin configuration
│ └── management/
│ └── commands/
│ └── seed_database.py # Demo data seeding command
│
├── setup.py # Automated installation script
├── manage.py # Django management CLI
├── requirements.txt # Python dependencies
├── README.md # This file
├── ROLE_PERMISSIONS.md # Detailed role documentation
├── LICENSE # License
└── .env # Environment configuration (created during setup)
```
## 🗂️ 关键模型
### 用户
- 扩展 Django 的 AbstractUser 的自定义用户模型
- 角色:`rescuer`、`dispatcher`、`admin`
- 基于角色的权限检查
### 事件
- 类型(11 个类别:道路事故、医疗紧急情况、火灾等)
- 优先级(低、中、高、危急)
- 状态(已报告、进行中、已关闭)
- 位置(纬度/经度)
- 时间戳和报告者跟踪
### 资源
- 类型(救护车、警察、消防车、技术)
- 专业化(根据类型而异)
- 状态(可用、已分配、不可用)
- 位置跟踪和事件分配
## 📊 分析
**报告和存档**部分提供了四个交互式图表的视觉分析:
1. **按类型的事件**(饼图)- 具有独特颜色调色的不同事件类型的分布
2. **事件状态**(柱状图)- 已报告、进行中和已关闭事件的计数
3. **资源类型**(饼图)- 资源类型的分布
4. **资源状态**(柱状图)- 可用、已分配和不可用资源的计数
## 🔧 可用命令
### 运行开发服务器
```
python manage.py runserver
```
### 创建演示数据
```
python manage.py seed_database --admins 3 --dysp 50 --rescuers 50 --resources 60 --incidents 200
```
### 应用迁移
```
python manage.py migrate
```
### 创建新超级用户
```
python manage.py createsuperuser
```
### 访问 Django 管理面板
访问:http://127.0.0.1:8000/admin/
## 🔐 安全注意事项
- 所有密码都必须通过环境变量(`.env`)配置
- 权限检查在所有修改端点上强制执行
- UI 隐藏用户不应执行的操作,但保护始终在服务器端
- 在所有表单上启用 CSRF 保护
- 数据库凭据绝不应提交到版本控制
## 📝 环境变量
`.env` 文件(在安装期间创建)包含:
```
DATABASE_NAME # PostgreSQL database name
DATABASE_USER # PostgreSQL user
DATABASE_PASSWORD # PostgreSQL user password
DATABASE_HOST # PostgreSQL host (default: localhost)
DATABASE_PORT # PostgreSQL port (default: 5432)
DJANGO_SECRET_KEY # Django secret key (auto-generated)
RESCUENET_SUPERUSER_NAME # Default admin username
RESCUENET_SUPERUSER_EMAIL # Default admin email
RESCUENET_SUPERUSER_PASSWORD # Default admin password
```
## 🐛 故障排除
### 数据库连接错误
- 确保 PostgreSQL 正在运行:`psql -U postgres -c "\l"`
- 检查 `.env` 是否具有正确的数据库凭据
- 验证数据库是否存在:`psql -U postgres -c "\l rescuenet"`
### 虚拟环境未激活
**Windows**:使用 `.\venv\Scripts\Activate.ps1`(不是 `.venv\Scripts\...`)
**macOS/Linux**:使用 `source .venv/bin/activate`
### 端口 8000 已被占用
```
python manage.py runserver 8001
```
### 丢失依赖项
```
pip install -r requirements.txt --upgrade
```
## 📚 其他资源
- [Django 文档](https://docs.djangoproject.com/)
- [PostgreSQL 文档](https://www.postgresql.org/docs/)
- [Leaflet.js 文档](https://leafletjs.com/reference.html)
- [Chart.js 文档](https://www.chartjs.org/docs/latest/)
## 👥 创建者
- [@Hikaritora](https://github.com/Hikaritora)
- [@Private-AS](https://github.com/Private-AS)
- [@ToTenPatryk](https://github.com/ToTenPatryk)
## 📄 许可证
本项目采用 MIT 许可证 — 请参阅[许可证](https://github.com/Hikaritora/RescueNET/blob/main/LICENSE)文件以获取详细信息。
这是一个大学课程项目。我们与任何名为“RescueNet”的其他项目或公司无关联。
**用❤️为应急管理系统制作**标签:DFIR, Django, DNS解析, PostgreSQL, Python, 事故管理, 代码示例, 后端开发, 地图服务, 实时地图, 应急管理系统, 开源项目, 救援团队, 数据分析, 数据可视化, 数据导出, 数据库管理, 无后门, 测试用例, 紧急事件响应, 角色权限控制, 调度系统, 资源管理, 逆向工具