在开始构建档案管理系统之前,必须确保本地开发环境配置正确。本系统基于 Python 3.8+ 和 Django 4.2 框架开发,利用其强大的 ORM 和 Admin 组件快速实现档案的增删改查。
请在终端中执行以下命令安装核心依赖包。建议在虚拟环境中操作以隔离项目依赖:
pip install django==4.2
pip install pillow==10.0.0
注意: Pillow 库用于处理档案中的缩略图或图片文件,是档案管理系统中处理多媒体附件的必备库。
环境配置完成后,执行以下命令创建 Django 项目和名为 archives 的核心应用:
django-admin startproject archive_system
cd archive_system
python manage.py startapp archives
接下来,需要将新建的应用注册到项目中。打开 archive_system/settings.py 文件,找到 INSTALLED_APPS 列表,添加 'archives':
INSTALLED_APPS = [
'django.contrib.admin',
'django.contrib.auth',
'django.contrib.contenttypes',
'django.contrib.sessions',
'django.contrib.messages',
'django.contrib.staticfiles',
'archives', 注册核心应用
]
同时,为了支持档案文件的上传下载,必须在 settings.py 末尾配置媒体文件路径:
import os
MEDIA_URL = '/media/'
MEDIA_ROOT = os.path.join(BASE_DIR, 'media')
档案管理系统的核心在于数据结构的设计。我们需要设计两个主要模型:Category(档案分类)和 Archive(档案详情)。打开 archives/models.py,写入以下代码:
from django.db import models
from django.utils import timezone
class Category(models.Model):
name = models.CharField(max_length=100, unique=True, verbose_name="分类名称")
description = models.TextField(blank=True, null=True, verbose_name="分类描述")
created_at = models.DateTimeField(auto_now_add=True, verbose_name="创建时间")
class Meta:
verbose_name = "档案分类"
verbose_name_plural = verbose_name
ordering = ['name']
def __str__(self):
return self.name
class Archive(models.Model):
LEVEL_CHOICES = (
('public', '公开'),
('internal', '内部'),
('confidential', '机密'),
)
title = models.CharField(max_length=200, verbose_name="档案标题")
category = models.ForeignKey(Category, on_delete=models.SET_NULL, null=True, related_name='archives', verbose_name="所属分类")
file = models.FileField(upload_to='archives/%Y/%m/%d/', verbose_name="档案文件")
confidentiality_level = models.CharField(max_length=20, choices=LEVEL_CHOICES, default='internal', verbose_name="保密等级")
summary = models.TextField(blank=True, null=True, verbose_name="内容摘要")
uploaded_by = models.CharField(max_length=50, verbose_name="上传人")
upload_date = models.DateTimeField(default=timezone.now, verbose_name="归档日期")
is_active = models.BooleanField(default=True, verbose_name="是否有效")
class Meta:
verbose_name = "档案记录"
verbose_name_plural = verbose_name
ordering = ['-upload_date']
def __str__(self):
return self.title
设计细节解析:
'archives/%Y/%m/%d/',系统会自动根据当前年月日创建子目录存储文件,避免单目录文件过多导致性能下降。Django Admin 提供了现成的管理界面,只需简单配置即可拥有一个功能完备的后台。打开 archives/admin.py 进行注册和配置:

from django.contrib import admin
from .models import Category, Archive
@admin.register(Category)
class CategoryAdmin(admin.ModelAdmin):
list_display = ('name', 'created_at')
search_fields = ('name',)
@admin.register(Archive)
class ArchiveAdmin(admin.ModelAdmin):
list_display = ('title', 'category', 'confidentiality_level', 'uploaded_by', 'upload_date', 'is_active')
list_filter = ('category', 'confidentiality_level', 'upload_date')
search_fields = ('title', 'summary', 'uploaded_by')
list_editable = ('is_active',)
date_hierarchy = 'upload_date'
readonly_fields = ('upload_date',)
执行数据库迁移命令以创建表结构:
python manage.py makemigrations
python manage.py migrate
创建超级管理员以登录后台:
python manage.py createsuperuser
为了支持前端对档案的检索和列表展示,我们需要编写视图函数和 URL 路由。首先在 archives/views.py 中添加以下逻辑:
from django.shortcuts import render
from django.db.models import Q
from .models import Archive
def archive_list(request):
query = request.GET.get('q', '')
category_id = request.GET.get('category', '')
archives = Archive.objects.filter(is_active=True)
if query:
archives = archives.filter(
Q(title__icontains=query) | Q(summary__icontains=query)
)
if category_id:
archives = archives.filter(category_id=category_id)
context = {
'archives': archives,
'query': query,
'selected_category': category_id,
'categories': Archive.objects.values_list('category__name', 'category__id').distinct()
}
return render(request, 'archives/list.html', context)
接着配置 URL 路由。在 archives/urls.py(若不存在则新建)中写入:
from django.urls import path
from . import views
urlpatterns = [
path('', views.archive_list, name='archive_list'),
]
并在项目主路由 archive_system/urls.py 中引入应用路由和静态文件服务配置:
from django.contrib import admin
from django.urls import path, include
from django.conf import settings
from django.conf.urls.static import static
urlpatterns = [
path('admin/', admin.site.urls),
path('archives/', include('archives.urls')),
]
if settings.DEBUG:
urlpatterns += static(settings.MEDIA_URL, document_root=settings.MEDIA_ROOT)
在 archives 应用目录下创建 templates 文件夹结构:archives/templates/archives/。新建 list.html 文件,编写检索和展示页面:
档案管理系统
档案列表
标题
分类
保密等级
归档日期
操作
{% for archive in archives %}
{{ archive.title }}
{{ archive.category.name|default:"未分类" }}
{{ archive.get_confidentiality_level_display }}
{{ archive.upload_date|date:"Y-m-d" }}
{% if archive.file %}
下载
{% endif %}
{% empty %}
暂无档案记录
{% endfor %}
所有代码编写完毕后,启动开发服务器进行测试:
python manage.py runserver
1. 访问 http://127.0.0.1:8000/admin/,使用创建的超级管理员账号登录。在“档案分类”中添加几个分类(如“财务档案”、“人事档案”)。
2. 在“档案记录”中上传几份测试文件,填写标题、摘要并选择分类和保密等级。
3. 访问 http://127.0.0.1:8000/archives/,在前端页面查看档案列表。尝试在搜索框输入关键词,或使用分类下拉框进行筛选,验证查询逻辑是否正确。
4. 点击列表中的“下载”链接,确认文件能够正常回传下载。
至此,一个具备基础分类管理、文件上传、多条件检索和下载功能的档案管理系统已完全落地。系统采用了 Django 标准的 MTV 架构,代码结构清晰,便于后续扩展如权限控制、批量导入等高级功能。