IP地址管理系统 - 项目需求与实现
技术栈
- 后端框架:Flask
- 数据库:SQLite
- 前端框架:Bootstrap 5.3.0
- Excel处理:openpyxl
- 日志记录:Python logging模块
网站目的
记录IPv4地址信息,支持地址的增删改查等管理操作。
效果展示
首页显示
- 可现实所有列数据
- 可定制显示的列数据
- 可导出Excel文件
- 可导入Excel文件
- 可查看或编辑IP的详细信息
- 可定制化搜索IP
编辑IP
实现的功能
1. 核心数据字段
IP地址记录包含以下字段:
- 逻辑划分:MDCN、NMS-CE03&04、BS-5GC、MW-5GC、NFV、UMF
- IP地址(必填,唯一)
- 掩码(支持点分十进制和CIDR格式)
- 在用:是/否(默认:是)
- 设备名称
- 所属系统
- 关联设备
- 所属科室
- 责任人
- 责任人电话
- 厂家责任人
- 厂家责任人电话
- 工单号
- 位置
- 是否扫描:是/否(默认:否)
- 更新日期:年月日(必填,默认当前日期)
- 备注
2. 核心功能
- IP地址增删改查:完整的CRUD操作
- IP地址唯一性验证:确保不会添加重复IP
- IP地址排序:按IP地址从小到大自动排序(SQLite兼容实现)
- 批量添加功能:输入IP地址段(如192.168.1.0/24)时,自动计算并添加所有可用IP
- 子网掩码支持:同时支持点分十进制(如255.255.255.0)和CIDR格式(如24)
- 自动补全功能:常用字段支持自动补全,提高录入效率
- 分页功能:每页显示300行数据,提高大数据量下的页面加载速度
- Excel导入导出:支持批量导出IP地址列表和从Excel文件导入数据
- 搜索功能:支持按IP地址、设备名称、责任人、所属科室进行搜索
3. 技术实现要点
- Bootstrap引入:使用CDN加载,无需本地文件
- 批量IP计算:使用Python的ipaddress库计算地址段中的所有可用IP
- 表单验证:IP地址格式验证、必填字段检查
- 响应式设计:使用Bootstrap栅格系统,适配不同屏幕尺寸
- 分页实现:使用SQLAlchemy的paginate方法实现数据库级分页
- IP排序:SQLite兼容的IP地址数字排序实现(拆分IP为四个部分并转换为整数排序)
- 日志记录:实现了请求日志和错误日志记录
- Excel处理:使用openpyxl库实现Excel文件的导入导出功能
4. 界面功能
- 首页:IP地址列表展示,支持分页、搜索、批量删除和批量导出
- 添加页面:表单式添加IP地址,支持单个添加和批量添加(IP地址段)
- 编辑页面:修改已有IP地址信息
- 消息提示:操作结果反馈(成功/失败/警告信息)
- Excel导入:支持从Excel文件批量导入IP地址信息
- 动态加载:表格数据分页加载,提高大数据量下的性能
使用说明
添加IP地址
- 访问首页,点击"添加IP地址"按钮
- 填写表单信息:
- 逻辑划分:选择合适的逻辑分组(MDCN、NMS-CE03&04、BS-5GC、MW-5GC、NFV、UMF)
- IP地址:输入单个IP或网段(如192.168.1.0)
- 掩码:输入点分十进制(如255.255.255.0)或CIDR格式(如24)
- 其他信息:根据需要填写设备名称、所属系统、责任人等信息
- 点击"添加IP地址"按钮
- 如果输入的是网段,系统会自动计算并添加所有可用IP(跳过已存在的IP)
编辑IP地址
- 在首页找到要编辑的IP地址,点击"编辑"按钮
- 修改所需信息
- 点击"更新IP地址"按钮保存更改
删除IP地址
- 单个删除:在首页找到要删除的IP地址,点击"删除"按钮并确认
- 批量删除:在首页选择多个IP地址,点击"批量删除"按钮并确认
搜索IP地址
- 在首页的搜索框中输入关键词(IP地址、设备名称、责任人、所属科室)
- 系统会实时过滤显示匹配的结果
分页浏览
- 在首页底部使用分页导航栏浏览不同页面
- 每页默认显示300条记录
- 可以通过页码直接跳转到指定页面
导出Excel
- 在首页选择要导出的IP地址(或全选)
- 点击"导出到Excel"按钮
- 系统会生成并下载包含所选IP信息的Excel文件
导入Excel
- 在首页点击"导入Excel"按钮
- 选择要导入的Excel文件(.xlsx格式)
- 确保Excel文件包含必要的列:IP地址、掩码、逻辑划分
- 系统会自动导入文件中的IP地址信息(跳过已存在的IP)
首页显示定制
您可以通过修改代码来自定义首次打开页面时显示的列数据。所有修改都需要在 templates/index.html文件中进行:
-
修改表格头部列的显示状态
- 找到文件中表格头部(大约第759-777行)的
<th>标签 - 对于想要默认显示的列,移除其
class="hidden-column"属性 - 例如,将"关联设备"列从隐藏改为显示:
<!-- 修改前 --> <th data-column="related_device" class="hidden-column">关联设备</th> <!-- 修改后 --> <th data-column="related_device">关联设备</th>
- 找到文件中表格头部(大约第759-777行)的
-
修改表格数据行列的显示状态
- 找到文件中表格数据行(大约第783-801行)的
<td>标签 - 对于想要默认显示的列,移除其
class="hidden-column"属性 - 例如,将"关联设备"列的数据行从隐藏改为显示:
<!-- 修改前 --> <td data-column="related_device" class="hidden-column">{{ ip.related_device or '' }}</td> <!-- 修改后 --> <td data-column="related_device">{{ ip.related_device or '' }}</td>
- 找到文件中表格数据行(大约第783-801行)的
-
修改列选择模态框的默认选中状态
- 找到文件中列选择模态框(大约第492-600行)的复选框输入元素
- 对于想要默认显示的列,在其
<input>标签中添加checked属性 - 例如,将"关联设备"列的复选框默认设为选中:
<!-- 修改前 --> <input class="form-check-input column-checkbox" type="checkbox" value="related_device" id="related_device"> <!-- 修改后 --> <input class="form-check-input column-checkbox" type="checkbox" value="related_device" id="related_device" checked>
注意:
- 以上三处修改需要保持一致,即如果在表格头部显示了某个列,也需要在数据行和列选择模态框中进行相应修改,以确保功能正常。
- 当前"在用"列已经默认显示,无需修改。
项目结构
ipmanager/
├── app.py # 主应用程序
├── .gitignore # Git忽略文件配置
├── LICENSE # 许可证文件
├── README.md # 项目说明文档
├── instance/
│ └── ip_addresses.db # SQLite数据库文件
├── requirements.txt # 项目依赖
├── static/
│ ├── css/
│ │ └── bootstrap.min.css
│ ├── img/
│ │ ├── IPaddress_gateway.png
│ │ └── favicon.png
│ └── js/
│ └── bootstrap.bundle.min.js
└── templates/
├── index.html # 首页模板
├── add.html # 添加页面模板
└── edit.html # 编辑页面模板
项目运行说明
1. 安装依赖
在项目根目录下执行以下命令安装所需依赖:
pip install -r requirements.txt
2. 启动应用
在项目根目录下执行以下命令启动Flask应用:
python app.py
3. 访问应用
应用启动后,可以通过以下方式访问:
- 本地访问:
http://127.0.0.1:5000 - 局域网访问:
http://[服务器IP地址]:5000(应用已配置允许外部IP访问)
4. 开发环境配置
- 默认运行在调试模式下,可以实时查看代码修改效果
- 数据库文件会自动创建在
instance/ip_addresses.db - 首次运行时会自动初始化数据库表结构和初始管理员账号
5. 初始登录信息
- 用户名:
admin123 - 密码:
admin123
注意:首次登录后建议修改密码以确保安全。
5. 停止应用
在终端中按下 Ctrl + C组合键即可停止应用