一、开发环境准备与依赖安装
在开始构建之前,我们需要准备好Python运行环境。本系统基于Python 3.9和Django 4.2框架开发,利用其自带的Admin后台可以快速构建功能完善的档案管理系统,无需编写复杂的前端页面。
打开终端(Windows下为CMD或PowerShell),执行以下命令创建项目目录并进入:
```bash
mkdir fire_license_system
cd fire_license_system
```
接着,创建虚拟环境并激活,以隔离项目依赖:
```bash
python -m venv venv
venv\Scripts\activate
```
安装Django框架以及用于处理图片文件的Pillow库:
```bash
pip install django==4.2.7 pillow==10.1.0
```
二、项目框架与应用初始化
环境配置完成后,使用Django的命令行工具创建项目骨架。我们将项目命名为config,核心应用命名为archive:
```bash
django-admin startproject config .
python manage.py startapp archive
```
执行完上述命令后,目录结构中会出现config和archive两个文件夹。接下来,需要将新建的archive应用注册到项目中。打开config/settings.py文件,找到INSTALLED_APPS列表,在末尾添加'archive':
```python
INSTALLED_APPS = [
'django.contrib.admin',
'django.contrib.auth',
'django.contrib.contenttypes',
'django.contrib.sessions',
'django.contrib.messages',
'django.contrib.staticfiles',
'archive', 新增这一行
]
```
三、核心数据模型设计
这是系统的核心部分,用于定义消防许可证档案的数据库结构。打开archive/models.py文件,删除原有内容,并输入以下代码。该模型包含了许可证编号、单位名称、有效期、上传扫描件等关键字段:
```python
from django.db import models
from django.utils import timezone
class FireLicenseArchive(models.Model):
许可证唯一编号
license_number = models.CharField("许可证编号", max_length=100, unique=True)
获取许可证的单位名称
company_name = models.CharField("单位名称", max_length=200)
许可证类型(如:营业前消防安全检查、消防验收等)
license_type = models.CharField("许可证类型", max_length=50, default="营业前检查")
发证日期
issue_date = models.DateField("发证日期")
有效期至
expiry_date = models.DateField("有效期至")
档案存放位置(物理档案柜编号)
physical_location = models.CharField("物理存放位置", max_length=50, blank=True)
负责人姓名
responsible_person = models.CharField("责任人", max_length=50)
联系电话
contact_phone = models.CharField("联系电话", max_length=20)
许可证扫描件上传
(接上文)
document_scan = models.FileField("扫描件上传", upload_to='scans/%Y/%m/', blank=True, null=True)
备注信息
remarks = models.TextField("备注", blank=True)
创建时间
created_at = models.DateTimeField("录入时间", auto_now_add=True)
更新时间
updated_at = models.DateTimeField("最后更新", auto_now=True)
class Meta:
verbose_name = "消防许可证档案"
verbose_name_plural = "消防许可证档案"
ordering = ['-issue_date']
def __str__(self):
return f"{self.company_name} - {self.license_number}"
@property
def is_expired(self):
"""判断许可证是否过期"""
return self.expiry_date < timezone.now().date()
```
四、后台管理功能深度定制
为了方便录入和查询,我们需要对Django Admin后台进行定制。打开archive/admin.py文件,配置列表展示字段、搜索功能和过滤器:
```python
from django.contrib import admin
from .models import FireLicenseArchive
@admin.register(FireLicenseArchive)
class FireLicenseArchiveAdmin(admin.ModelAdmin):
列表页展示的字段
list_display = ('license_number', 'company_name', 'license_type', 'issue_date', 'expiry_date', 'is_expired_status')
每页显示数量
list_per_page = 20
支持搜索的字段
search_fields = ('license_number', 'company_name', 'responsible_person')
右侧筛选栏
list_filter = ('license_type', 'issue_date', 'expiry_date')
点击字段进入编辑页面
list_display_links = ('license_number', 'company_name')
日期层级筛选
date_hierarchy = 'issue_date'
def is_expired_status(self, obj):
"""在列表中显示过期状态"""
if obj.is_expired:
return '已过期'
return '有效'
is_expired_status.short_description = '状态'
简单的CSS样式,给已过期的标红
def is_expired_status(self, obj):
status = '已过期' if obj.is_expired else '有效'
color = 'red' if obj.is_expired else 'green'
return f'
{status}'
is_expired_status.allow_tags = True
is_expired_status.short_description = '状态'
```
五、文件上传与静态资源配置
为了确保证书扫描件能够正常上传和预览,需要配置媒体文件路径。继续编辑config/settings.py,在文件最底部添加以下配置:
```python
import os
媒体文件(用户上传的文件)配置
MEDIA_URL = '/media/'
MEDIA_ROOT = os.path.join(BASE_DIR, 'media')
静态文件配置
STATIC_URL = '/static/'
```
配置完成后,需要修改URL路由,以便开发服务器能处理用户上传的文件。打开config/urls.py,修改为如下内容:
```python
from django.contrib import admin
from django.urls import path
from django.conf import settings
from django.conf.urls.static import static
urlpatterns = [
path('admin/', admin.site.urls),
]
仅在开发环境下提供媒体文件服务
if settings.DEBUG:
urlpatterns += static(settings.MEDIA_URL, document_root=settings.MEDIA_ROOT)
```
六、数据库初始化与管理员创建
代码编写完成后,需要将模型变更同步到数据库,并创建一个管理员账号用于登录系统。

执行数据库迁移命令:
```bash
python manage.py makemigrations
python manage.py migrate
```
创建超级用户(执行后按提示输入用户名、邮箱和密码):
```bash
python manage.py createsuperuser
```
七、系统运行与实操演示
所有配置完成后,启动开发服务器:
```bash
python manage.py runserver
``>
启动成功后,打开浏览器访问 http://127.0.0.1:8000/admin。使用刚才创建的超级用户账号登录。
1. 录入档案:
点击页面上的“消防许可证档案”旁边的“+增加”按钮。在表单中填写:
- 许可证编号:输入例如“XIAOFANG-2023-001”。
- 单位名称:输入“某某商贸有限公司”。
- 有效期至:选择未来的日期(如2025-12-31)。
- 扫描件上传:点击“选择文件”,上传本地的PDF或图片格式的许可证扫描件。
填写完毕后,点击“保存”按钮。
2. 查询与筛选:
回到列表页,在右上角的搜索框输入“某某商贸”,系统会实时过滤出该单位的档案。点击右侧的“有效期至”筛选器,可以快速查看特定年份的许可证。
3. 状态监控:
观察列表页的“状态”列,如果录入的许可证“有效期至”早于当前日期,该字段会显示红色的“已过期”,否则显示绿色的“有效”,方便管理人员快速进行年检提醒。
至此,一个具备增删改查、文件上传、状态监控功能的消防许可证档案管理系统已完全落地。整个系统代码量少,逻辑清晰,可直接部署在内网服务器中使用,无需额外的商业软件授权。