从零搭建可检索古代档案管理系统:从环境配置到上线实操全指南
一、环境准备
本系统为轻量可定制方案,适合博物馆、地方文史机构使用,不需要额外独立部署数据库,全流程命令可直接复制执行,支持Windows、Mac、Linux全平台。
1.1 安装核心依赖
打开终端(Windows用PowerShell、Mac/Linux用自带终端),执行对应命令安装Python环境:
``` Windows系统 winget install Python.Python.3.10 Mac系统 brew install python@3.10 Debian/Ubuntu系统 sudo apt update && sudo apt install python3.10 python3-pip -y ```安装完成后执行以下命令安装开发依赖,若下载慢可在末尾加参数 `-i https://pypi.tuna.tsinghua.edu.cn/simple`:
``` pip install django==4.2 django-filter django-ckeditor ```二、项目初始化与核心配置
2.1 创建项目与核心模型
终端依次执行以下命令创建项目结构:
``` django-admin startproject ancient_archive && cd ancient_archive && python manage.py startapp archive ```打开 `ancient_archive/settings.py`,找到 `INSTALLED_APPS` 配置项,替换为以下完整内容,底部新增媒体配置:
``` INSTALLED_APPS = [ 'django.contrib.admin', 'django.contrib.auth', 'django.contrib.contenttypes', 'django.contrib.sessions', 'django.contrib.messages', 'django.contrib.staticfiles', 新增以下两行 'ckeditor', 'archive', ] 底部新增媒体配置,用于存储档案扫描件 MEDIA_URL = '/media/' MEDIA_ROOT = BASE_DIR / 'media' ```打开 `archive/models.py`,删除原有内容,粘贴以下完整的古代档案模型代码:
``` from django.db import models from ckeditor.fields import RichTextField class AncientArchive(models.Model): archive_no = models.CharField(max_length=50, verbose_name='档案编号', unique=True) name = models.CharField(max_length=200, verbose_name='档案名称') dynasty = models.CharField(max_length=50, verbose_name='所属朝代') year = models.IntegerField(verbose_name='具体年份', blank=True, null=True) material = models.CharField(max_length=50, verbose_name='制作材质') collection_location = models.CharField(max_length=100, verbose_name='收藏地点') summary = RichTextField(verbose_name='内容提要') scan_file = models.FileField(upload_to='scans/', verbose_name='扫描件', blank=True, null=True) 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 = verbose_name def __str__(self): return self.archive_no + " " + self.name ```2.2 初始化数据库与后台账号
终端依次执行以下命令,生成数据库表并创建管理员账号:
``` python manage.py makemigrations python manage.py migrate python manage.py createsuperuser ```执行 `createsuperuser` 后,按提示依次输入用户名、邮箱、密码(密码要求8位以上),请记住账号密码,后续登录后台使用。
打开 `archive/admin.py`,替换为以下代码,将档案模型注册到后台管理系统:
``` from django.contrib import admin from .models import AncientArchive @admin.register(AncientArchive) class AncientArchiveAdmin(admin.ModelAdmin): list_display = ('archive_no', 'name', 'dynasty', 'collection_location', 'update_time') search_fields = ('archive_no', 'name', 'dynasty', 'collection_location') list_filter = ('dynasty', 'material', 'collection_location') ```打开 `ancient_archive/urls.py`,替换为以下完整的路由配置:
``` 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), ] + static(settings.MEDIA_URL, document_root=settings.MEDIA_ROOT) ```三、添加公开检索页面(可选)
如果需要对外提供公开检索服务(不需要登录后台),按以下步骤操作:

打开 `archive/views.py`,粘贴以下代码:
``` from django_filters.views import SearchFilterView from .models import AncientArchive class ArchiveSearchView(SearchFilterView): model = AncientArchive template_name = 'search.html' context_object_name = 'archives' search_fields = ['name', 'archive_no', 'dynasty'] ```在 `archive` 目录下新建 `templates` 文件夹,在文件夹内新建 `search.html`,粘贴以下代码:
```{{ archive.name }}({{ archive.dynasty }})
档案编号:{{ archive.archive_no }} | 收藏地点:{{ archive.collection_location }} | 材质:{{ archive.material }}
{{ archive.summary|safe }}
{% if archive.scan_file %} {% endif %}未找到符合条件的档案
{% endfor %}最后在 `ancient_archive/urls.py` 的 `urlpatterns` 中添加两行代码,最终的urlpatterns变为:
``` from archive.views import ArchiveSearchView urlpatterns = [ path('admin/', admin.site.urls), path('', ArchiveSearchView.as_view(), name='search'), ] + static(settings.MEDIA_URL, document_root=settings.MEDIA_ROOT) ```四、启动使用与常见问题解决
终端执行启动命令:
``` python manage.py runserver 0.0.0.0:8000 ```启动后即可访问:
- 后台录入管理:访问 `http://你的IP:8000/admin/`,输入管理员账号登录,即可新增、编辑、删除档案,后台自带筛选、检索功能。
- 公开检索:配置了公开页面的话,直接访问 `http://你的IP:8000/` 即可使用。
常见卡壳问题解决:
- pip安装依赖慢:所有pip命令后加 `-i https://pypi.tuna.tsinghua.edu.cn/simple` 即可加速。
- 访问扫描件显示404:检查settings.py的MEDIA配置是否正确,公网部署时检查nginx的media路径配置是否和项目实际路径一致。
- 公网无法访问:检查服务器防火墙、云服务器安全组是否放行8000端口,部署后需要放行对应端口。
五、公网部署(可选)
需要长期运行的话,安装gunicorn后台启动,执行以下命令:
``` pip install gunicorn gunicorn ancient_archive.wsgi:application -b 0.0.0.0:8000 -D ```如果绑定域名,添加以下nginx配置即可:
``` server { listen 80; server_name 你的绑定域名; location / { proxy_pass http://127.0.0.1:8000; } location /media/ { alias /项目绝对路径/ancient_archive/media/; } location /static/ { alias /项目绝对路径/ancient_archive/static/; } } ```