基于Python+Django快速构建企业级档案统计系统实战指南

一、系统核心需求与技术选型

档案统计系统需要实现档案录入、分类统计、多维查询和报表导出四大核心功能。我们选择Python 3.8+Django 3.2作为开发框架,数据库使用MySQL 8.0,前端采用Bootstrap 5实现响应式界面。

1.1 开发环境准备

安装Python和必要依赖包:

``` 创建虚拟环境 python -m venv venv source venv/bin/activate Linux/Mac venv\Scripts\activate Windows 安装核心依赖 pip install django==3.2.16 pip install mysqlclient==2.1.1 pip install pandas==1.5.3 pip install openpyxl==3.1.2 ```

二、项目初始化与数据库配置

2.1 创建Django项目和应用

执行以下命令创建项目结构:

``` django-admin startproject archive_system cd archive_system python manage.py startapp archive ```

2.2 配置MySQL数据库连接

修改archive_system/settings.py文件:

``` DATABASES = { 'default': { 'ENGINE': 'django.db.backends.mysql', 'NAME': 'archive_db', 'USER': 'archive_user', 'PASSWORD': 'Archive@2024', 'HOST': 'localhost', 'PORT': '3306', 'OPTIONS': { 'charset': 'utf8mb4', } } } ```

创建数据库和用户:

``` 登录MySQL mysql -u root -p 执行SQL命令 CREATE DATABASE archive_db CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci; CREATE USER 'archive_user'@'localhost' IDENTIFIED BY 'Archive@2024'; GRANT ALL PRIVILEGES ON archive_db. TO 'archive_user'@'localhost'; FLUSH PRIVILEGES; ```

三、数据模型设计与实现

3.1 设计核心数据表

编辑archive/models.py文件,定义档案数据模型:

``` from django.db import models class ArchiveCategory(models.Model): """档案分类表""" code = models.CharField(max_length=20, unique=True, verbose_name="分类编码") name = models.CharField(max_length=100, verbose_name="分类名称") parent = models.ForeignKey('self', on_delete=models.CASCADE, null=True, blank=True, verbose_name="上级分类") class Meta: db_table = 'archive_category' verbose_name = '档案分类' verbose_name_plural = '档案分类' class Archive(models.Model): """档案主表""" STATUS_CHOICES = ( ('active', '在用'), ('archived', '已归档'), ('destroyed', '已销毁'), ) archive_id = models.CharField(max_length=50, unique=True, verbose_name="档案编号") title = models.CharField(max_length=200, verbose_name="档案标题") category = models.ForeignKey(ArchiveCategory, on_delete=models.PROTECT, verbose_name="所属分类") department = models.CharField(max_length=100, verbose_name="所属部门") create_date = models.DateField(verbose_name="创建日期") expire_date = models.DateField(null=True, blank=True, verbose_name="失效日期") status = models.CharField(max_length=20, choices=STATUS_CHOICES, default='active', verbose_name="状态") storage_location = models.CharField(max_length=200, verbose_name="存放位置") digital_file = models.FileField(upload_to='archives/%Y/%m/', null=True, blank=True, verbose_name="电子文件") remarks = models.TextField(blank=True, verbose_name="备注") class Meta: db_table = 'archive' verbose_name = '档案信息' verbose_name_plural = '档案信息' indexes = [ models.Index(fields=['archive_id']), models.Index(fields=['category', 'status']), ] ```

3.2 生成数据库迁移文件并应用

执行数据库迁移命令:

``` python manage.py makemigrations archive python manage.py migrate ```

四、后台管理功能开发

4.1 配置Django Admin后台

编辑archive/admin.py文件:

``` from django.contrib import admin from .models import ArchiveCategory, Archive @admin.register(ArchiveCategory) class ArchiveCategoryAdmin(admin.ModelAdmin): list_display = ['code', 'name', 'parent'] list_filter = ['parent'] search_fields = ['code', 'name'] ordering = ['code'] @admin.register(Archive) class ArchiveAdmin(admin.ModelAdmin): list_display = ['archive_id', 'title', 'category', 'department', 'create_date', 'status'] list_filter = ['category', 'department', 'status', 'create_date'] search_fields = ['archive_id', 'title', 'department'] date_hierarchy = 'create_date' list_per_page = 50 fieldsets = ( ('基本信息', { 'fields': ('archive_id', 'title', 'category', 'department') }), ('时间信息', { 'fields': ('create_date', 'expire_date') }), ('状态信息', { 'fields': ('status', 'storage_location', 'digital_file', 'remarks') }), ) ```

4.2 创建超级管理员账户

执行以下命令创建管理员:

``` python manage.py createsuperuser 按提示输入用户名、邮箱和密码 ```

五、统计功能核心实现

5.1 实现多维度统计接口

基于Python+Django快速构建企业级档案统计系统实战指南

创建archive/views.py文件:

``` from django.db.models import Count, Q from django.http import JsonResponse from django.views import View from .models import Archive, ArchiveCategory import pandas as pd from datetime import datetime, timedelta class ArchiveStatisticsView(View): """档案统计视图""" def get(self, request): 按分类统计 category_stats = Archive.objects.values( 'category__name' ).annotate( total=Count('id'), active=Count('id', filter=Q(status='active')), archived=Count('id', filter=Q(status='archived')) ).order_by('-total') 按部门统计 department_stats = Archive.objects.values( 'department' ).annotate( count=Count('id') ).order_by('-count') 按时间趋势统计(近12个月) end_date = datetime.now() start_date = end_date - timedelta(days=365) monthly_stats = [] current = start_date while current <= end_date: month_start = current.replace(day=1) if current.month == 12: month_end = current.replace(year=current.year+1, month=1, day=1) else: month_end = current.replace(month=current.month+1, day=1) count = Archive.objects.filter( create_date__gte=month_start, create_date__lt=month_end ).count() monthly_stats.append({ 'month': month_start.strftime('%Y-%m'), 'count': count }) if current.month == 12: current = current.replace(year=current.year+1, month=1) else: current = current.replace(month=current.month+1) return JsonResponse({ 'category_stats': list(category_stats), 'department_stats': list(department_stats), 'monthly_stats': monthly_stats }) class ExportStatisticsView(View): """导出统计报表""" def get(self, request): 获取所有档案数据 archives = Archive.objects.all().values( 'archive_id', 'title', 'category__name', 'department', 'create_date', 'status' ) 转换为DataFrame df = pd.DataFrame(list(archives)) 生成Excel文件 from django.http import HttpResponse response = HttpResponse(content_type='application/vnd.openxmlformats-officedocument.spreadsheetml.sheet') response['Content-Disposition'] = 'attachment; filename="archive_statistics.xlsx"' with pd.ExcelWriter(response, engine='openpyxl') as writer: df.to_excel(writer, sheet_name='档案明细', index=False) 添加统计sheet summary_data = { '统计项': ['档案总数', '在用档案', '已归档档案', '涉及部门数'], '数量': [ len(df), len(df[df['status'] == 'active']), len(df[df['status'] == 'archived']), df['department'].nunique() ] } pd.DataFrame(summary_data).to_excel(writer, sheet_name='统计汇总', index=False) return response ```

5.2 配置URL路由

创建archive/urls.py文件:

``` from django.urls import path from .views import ArchiveStatisticsView, ExportStatisticsView urlpatterns = [ path('api/statistics/', ArchiveStatisticsView.as_view(), name='archive_statistics'), path('api/export/', ExportStatisticsView.as_view(), name='export_statistics'), ] ```

修改项目主urls.py:

``` from django.contrib import admin from django.urls import path, include urlpatterns = [ path('admin/', admin.site.urls), path('archive/', include('archive.urls')), ] ```

六、前端界面实现

6.1 创建统计展示页面

创建templates/archive/statistics.html文件:

``` 档案统计系统

档案统计概览

按分类统计
按部门统计
月度新增趋势
```

七、系统部署与优化

7.1 生产环境配置

创建生产环境配置文件production_settings.py:

``` from .settings import DEBUG = False ALLOWED_HOSTS = ['your-domain.com', 'localhost'] 静态文件配置 STATIC_ROOT = '/var/www/archive_system/static/' STATIC_URL = '/static/' 数据库连接池配置 DATABASES['default']['CONN_MAX_AGE'] = 600 缓存配置 CACHES = { 'default': { 'BACKEND': 'django.core.cache.backends.redis.RedisCache', 'LOCATION': 'redis://127.0.0.1:6379/1', } } 文件上传配置 MEDIA_ROOT = '/var/www/archive_system/media/' MEDIA_URL = '/media/' ```

7.2 使用Gunicorn部署

安装Gunicorn并配置:

``` pip install gunicorn==20.1.0 创建gunicorn配置文件gunicorn_config.py bind = "0.0.0.0:8000" workers = 4 worker_class = "sync" timeout = 120 accesslog = "/var/log/gunicorn/access.log" errorlog = "/var/log/gunicorn/error.log" ```

7.3 使用Nginx作为反向代理

创建Nginx配置文件/etc/nginx/sites-available/archive_system:

``` server { listen 80; server_name your-domain.com; location /static/ { alias /var/www/archive_system/static/; } location /media/ { alias /var/www/archive_system/media/; } location / { proxy_pass http://127.0.0.1:8000; proxy_set_header Host $host; proxy_set_header X-Real-IP $remote_addr; proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for; } } ```

八、系统扩展与维护

8.1 添加定期统计任务

使用Django-celery实现定时统计:

``` 安装celery pip install celery==5.2.7 redis==4.5.4 创建celery.py配置文件 配置定时任务发送统计邮件 ```

8.2 数据备份策略

创建备份脚本backup.sh:

``` !/bin/bash BACKUP_DIR="/backup/archives" DATE=$(date +%Y%m%d_%H%M%S) 备份数据库 mysqldump -u archive_user -pArchive@2024 archive_db > $BACKUP_DIR/archive_db_$DATE.sql 备份媒体文件 tar -czf $BACKUP_DIR/media_$DATE.tar.gz /var/www/archive_system/media/ 保留最近7天备份 find $BACKUP_DIR -type f -mtime +7 -delete ```

通过以上步骤,你已经完成了一个功能完整的档案统计系统。系统具备数据管理、多维度统计、报表导出等核心功能,可以直接部署到生产环境使用。

AI咨询
热线电话

028-85154420

15388110056

全国售前咨询电话

扫码咨询
安答联动微信公众号二维码

微信扫码关注安答联动

申请试用
热线电话
申请试用

安答联动档案管理系统