从零搭建高校轻量招生数字档案馆系统实操全流程
一、前期准备:环境与工具
本次使用的是开源轻量组合,无需云服务器,本地Windows/Mac/Linux通用,完全零成本落地基础功能。
1. 核心工具安装
- Python 3.10.x(3.9-3.12均可,避免3.8以下):https://www.python.org/downloads/release/python-31011/,安装时勾选Add Python 3.10 to PATH
- Django 4.2.x LTS(长期支持版,稳定可靠):终端/命令提示符(CMD)执行:
pip install django==4.2.16 django-filter==23.5 django-import-export==3.3.7
2. 项目初始化
找一个无中文路径的文件夹(如D:\zhaosheng_archives),打开CMD进入该路径,依次执行:
django-admin startproject zhaosheng_archives
cd zhaosheng_archives
python manage.py startapp admissions
二、系统核心功能开发
本次系统含3个核心模块:考生档案录入/导入、档案多条件查询、档案导出/打印。
1. 配置项目
打开zhaosheng_archives/settings.py,找到INSTALLED_APPS,修改为:
INSTALLED_APPS = [
'django.contrib.admin',
'django.contrib.auth',
'django.contrib.contenttypes',
'django.contrib.sessions',
'django.contrib.messages',
'django.contrib.staticfiles',
新增第三方和自定义应用
'django_filters',
'import_export',
'admissions',
]
在文件末尾添加中文语言和时区配置:
LANGUAGE_CODE = 'zh-hans'
TIME_ZONE = 'Asia/Shanghai'
USE_I18N = True
USE_TZ = True
2. 设计考生档案模型
打开admissions/models.py,复制以下完整代码:
from django.db import models
定义专业、学院枚举(避免输入错误)
class College(models.TextChoices):
COMPUTER = 'CS', '计算机学院'
MATH = 'MA', '数学学院'
ENGLISH = 'EN', '外国语学院'
class Major(models.TextChoices):
CS_SOFT = 'CS01', '软件工程'
CS_AI = 'CS02', '人工智能'
MA_STAT = 'MA01', '统计学'
EN_TRANS = 'EN01', '翻译'
class AdmissionFile(models.Model):
必填字段
exam_number = models.CharField(max_length=15, unique=True, verbose_name='考生号')
name = models.CharField(max_length=10, verbose_name='姓名')
id_card = models.CharField(max_length=18, unique=True, verbose_name='身份证号')
gender = models.CharField(max_length=2, choices=(('男','男'),('女','女')), verbose_name='性别')
college = models.CharField(max_length=2, choices=College.choices, verbose_name='录取学院')
major = models.CharField(max_length=4, choices=Major.choices, verbose_name='录取专业')
score = models.DecimalField(max_digits=5, decimal_places=2, verbose_name='高考总分')
admission_date = models.DateField(verbose_name='录取日期')
非必填字段
address = models.CharField(max_length=100, blank=True, null=True, verbose_name='家庭住址')
phone = models.CharField(max_length=11, blank=True, null=True, verbose_name='联系电话')
系统字段
create_time = models.DateTimeField(auto_now_add=True, verbose_name='录入时间')
update_time = models.DateTimeField(auto_now=True, verbose_name='更新时间')
class Meta:
verbose_name = '考生档案'
verbose_name_plural = '考生档案'
ordering = ['-admission_date', 'exam_number']
def __str__(self):
return f'{self.exam_number}-{self.name}'
3. 配置后台录入、查询、导入导出功能
打开admissions/admin.py,复制以下完整代码:

from django.contrib import admin
from import_export.admin import ImportExportModelAdmin
from django_filters.rest_framework import DjangoFilterBackend
from django.contrib.admin.filters import DateRangeFilter
from .models import AdmissionFile, College, Major
class AdmissionFileFilter(admin.SimpleListFilter):
title = '录取年份'
parameter_name = 'year'
def lookups(self, request, model_admin):
自动获取系统中已有录取年份
years = AdmissionFile.objects.dates('admission_date', 'year', order='DESC')
return [(year.year, year.year) for year in years]
def queryset(self, request, queryset):
if self.value():
return queryset.filter(admission_date__year=self.value())
return queryset
@admin.register(AdmissionFile)
class AdmissionFileAdmin(ImportExportModelAdmin):
显示字段
list_display = ['exam_number', 'name', 'gender', 'college', 'major', 'score', 'admission_date', 'create_time']
可点击进入详情的字段
list_display_links = ['exam_number', 'name']
右侧筛选栏
list_filter = ['gender', 'college', 'major', AdmissionFileFilter, ('admission_date', DateRangeFilter)]
顶部搜索栏
search_fields = ['exam_number', 'name', 'id_card', 'phone']
每页显示条数
list_per_page = 20
可编辑字段(不用进详情页)
list_editable = ['score']
字段分组(详情页更清晰)
fieldsets = (
('核心身份信息', {'fields': ('exam_number', 'name', 'id_card', 'gender')}),
('录取信息', {'fields': ('college', 'major', 'score', 'admission_date')}),
('补充信息', {'fields': ('address', 'phone'), 'classes': ('collapse',)}),
)
4. 生成并执行数据库迁移
CMD回到zhaosheng_archives根目录,依次执行:
python manage.py makemigrations
python manage.py migrate
5. 创建超级管理员
继续执行:python manage.py createsuperuser,按提示输入:
- 用户名(如admin)
- 邮箱(可跳过,直接回车)
- 密码(两次输入,至少8位,不能太简单)
三、系统启动与基础操作
1. 启动本地服务器
CMD执行:python manage.py runserver,看到提示Starting development server at http://127.0.0.1:8000/后,浏览器打开该地址。
2. 后台操作:录入/导入档案
浏览器访问http://127.0.0.1:8000/admin,输入超级管理员账号密码登录:
- 单条录入:点击「考生档案」→「增加考生档案」→ 填写所有必填/非必填字段 → 点击「保存」
- 批量导入:点击「考生档案」→ 右上角「Import」→ 选择Excel/CSV文件(需提前准备模板)→ 点击「Submit」→ 预览无误后点击「Confirm import」
3. 下载批量导入模板
点击「考生档案」→ 右上角「Export」→ 格式选「xlsx」→ 勾选所有字段 → 点击「Submit」即可下载空白或已有数据的模板,编辑后重新导入。
4. 多条件查询与导出/打印
在「考生档案」列表页:
- 多条件筛选:右侧筛选栏选择性别、学院、录取年份,顶部搜索栏输入考生号/姓名等,组合查询
- 导出筛选结果:点击右上角「Export」→ 格式选「xlsx」→ 勾选「Only export selected rows」(需先勾选需要的档案行)或直接导出当前筛选结果 → 点击「Submit」
- 打印筛选结果:浏览器按「Ctrl+P」(Mac按「Cmd+P」),调整纸张方向为横向,点击打印
四、系统安全与轻量优化
1. 关闭调试模式(正式使用前必须做)
打开zhaosheng_archives/settings.py,找到DEBUG = True,修改为DEBUG = False,并添加允许访问的IP(本地测试可保留ALLOWED_HOSTS = ['127.0.0.1', 'localhost'],局域网使用需添加本机IP,如ALLOWED_HOSTS = ['127.0.0.1', 'localhost', '192.168.1.100'])。
2. 数据库备份
每次批量导入/修改后,在根目录执行:python manage.py dumpdata admissions.AdmissionFile --output backup_YYYYMMDD.json(将YYYYMMDD替换为当天日期),恢复时执行:python manage.py loaddata backup_YYYYMMDD.json。
3. 局域网共享(可选)
启动服务器时绑定本机IP(需先查本机局域网IP,Windows在CMD执行ipconfig,Mac/Linux执行ifconfig),命令改为:python manage.py runserver 192.168.1.100:8000,局域网内其他设备访问该地址即可。