基于Python构建泉州档案软件全栈实操指南

一、环境准备与依赖安装

在开始构建泉州档案软件之前,需要确保本地开发环境已经配置好Python运行环境。本指南基于Python 3.9版本进行开发,数据库使用轻量级的SQLite,无需额外安装数据库服务,适合快速落地。

1. 安装Python环境

如果尚未安装Python,请直接访问Python官网下载对应操作系统的安装包。对于Linux用户,可以使用以下命令进行安装:

```bash sudo apt update sudo apt install python3.9 python3-pip -y ```

2. 创建项目目录

在终端中执行以下命令,创建项目文件夹并进入:

```bash mkdir quanzhou_archive cd quanzhou_archive ```

3. 创建虚拟环境并安装依赖

为了保证项目依赖隔离,建议创建虚拟环境。创建完成后,激活虚拟环境并安装Flask框架及其依赖库:

```bash python3 -m venv venv source venv/bin/activate pip install flask flask-sqlalchemy flask-wtf ```

4. 生成依赖文件

为了方便后续部署,将当前环境的依赖包导出到requirements.txt文件中:

```bash pip freeze > requirements.txt ```

二、项目目录结构初始化

一个规范的Web项目需要清晰的目录结构。请在quanzhou_archive目录下按照以下结构创建文件和文件夹:

  • app.py:主程序入口,包含路由配置和业务逻辑。
  • models.py:数据库模型定义文件,用于存储档案数据。
  • templates/:存放HTML模板文件的文件夹。
  • static/:存放CSS、JS等静态资源的文件夹。
  • uploads/:存放用户上传的档案文件的文件夹。

执行以下命令自动生成文件夹:

```bash mkdir templates static uploads touch app.py models.py templates/base.html templates/index.html templates/upload.html ```

三、数据库模型设计

针对泉州档案管理的需求,我们需要设计一个包含档案标题、所属区域(如鲤城、丰泽等)、档案分类以及文件路径的数据模型。打开models.py文件,输入以下完整代码:

```python from flask_sqlalchemy import SQLAlchemy from datetime import datetime db = SQLAlchemy() class Archive(db.Model): __tablename__ = 'archives' id = db.Column(db.Integer, primary_key=True) title = db.Column(db.String(100), nullable=False) district = db.Column(db.String(50), nullable=False) 对应泉州各区县 category = db.Column(db.String(50), nullable=False) 档案分类 filename = db.Column(db.String(255), nullable=False) 存储的文件名 upload_time = db.Column(db.DateTime, default=datetime.now) def __repr__(self): return f'' ```

此模型定义了档案的基本属性。其中district字段专门用于区分泉州不同行政区的档案,便于后续按区域筛选。

四、核心业务逻辑实现

app.py中编写核心逻辑,包括数据库连接配置、文件上传处理、档案列表展示以及搜索功能。请复制以下完整代码到app.py

```python import os from flask import Flask, render_template, request, redirect, url_for, flash from models import db, Archive from werkzeug.utils import secure_filename app = Flask(__name__) app.config['SQLALCHEMY_DATABASE_URI'] = 'sqlite:///archive.db' app.config['SQLALCHEMY_TRACK_MODIFICATIONS'] = False app.config['SECRET_KEY'] = 'quanzhou_archive_secret_key_2024' app.config['UPLOAD_FOLDER'] = 'uploads' app.config['MAX_CONTENT_LENGTH'] = 16 1024 1024 限制上传大小为16MB 允许上传的文件扩展名 ALLOWED_EXTENSIONS = {'txt', 'pdf', 'png', 'jpg', 'jpeg', 'doc', 'docx'} def allowed_file(filename): return '.' in filename and \ filename.rsplit('.', 1)[1].lower() in ALLOWED_EXTENSIONS 初始化数据库 with app.app_context(): db.init_app(app) db.create_all() @app.route('/') def index(): query = request.args.get('q') district_filter = request.args.get('district') archives = Archive.query if query: archives = archives.filter(Archive.title.contains(query)) if district_filter: archives = archives.filter(Archive.district == district_filter) archives = archives.order_by(Archive.upload_time.desc()).all() 泉州主要区域列表,用于前端筛选 districts = ['鲤城区', '丰泽区', '洛江区', '泉港区', '惠安县', '安溪县', '永春县', '德化县', '石狮市', '晋江市', '南安市'] return render_template('index.html', archives=archives, districts=districts) @app.route('/upload', methods=['GET', 'POST']) def upload_file(): if request.method == 'POST': if 'file' not in request.files: flash('没有文件部分') return redirect(request.url) file = request.files['file'] title = request.form.get('title') district = request.form.get('district') category = request.form.get('category') if file.filename == '': flash('未选择文件') return redirect(request.url) if file and allowed_file(file.filename): filename = secure_filename(file.filename) 确保文件名唯一,添加时间戳前缀 from time import time filename = f"{int(time())}_{filename}" file.save(os.path.join(app.config['UPLOAD_FOLDER'], filename)) 保存到数据库 new_archive = Archive( title=title, district=district, category=category, filename=filename ) db.session.add(new_archive) db.session.commit() flash('档案上传成功!') return redirect(url_for('index')) else: flash('不支持的文件类型') districts = ['鲤城区', '丰泽区', '洛江区', '泉港区', '惠安县', '安溪县', '永春县', '德化县', '石狮市', '晋江市', '南安市'] return render_template('upload.html', districts=districts) if __name__ == '__main__': app.run(debug=True, host='0.0.0.0', port=5000) ```

基于Python构建泉州档案软件全栈实操指南

这段代码实现了文件的安全性检查、文件存储以及数据库的增删改查逻辑。特别注意districts列表,完整涵盖了泉州的所有下辖区县,确保软件的本地化适用性。

五、前端页面构建

为了实现用户交互,我们需要创建三个HTML模板文件:基础模板base.html、列表页index.html和上传页upload.html

1. 基础模板 (templates/base.html)

定义页面的整体布局和导航栏:

```html 泉州档案管理系统
泉州档案管理系统
{% with messages = get_flashed_messages() %} {% if messages %} {% for message in messages %}
{{ message }}
{% endfor %} {% endif %} {% endwith %} {% block content %}{% endblock %}
```

2. 档案列表页 (templates/index.html)

展示档案列表,并提供按区域和标题搜索的功能:

```html {% extends "base.html" %} {% block content %}

档案列表

{% for archive in archives %} {% else %} {% endfor %}
ID 档案标题 所属区域 分类 上传时间 操作
{{ archive.id }} {{ archive.title }} {{ archive.district }} {{ archive.category }} {{ archive.upload_time.strftime('%Y-%m-%d %H:%M') }} 下载
暂无档案数据
{% endblock %} ```

3. 档案上传页 (templates/upload.html)

提供文件上传表单和必填项填写:

```html {% extends "base.html" %} {% block content %}

上传新档案





{% endblock %} ```

六、运行与功能验证

所有代码和配置文件已准备就绪。现在启动服务进行测试。

1. 启动Flask应用

确保终端处于项目根目录且虚拟环境已激活,执行以下命令:

```bash python app.py ```

2. 访问系统

打开浏览器,在地址栏输入http://127.0.0.1:5000。你将看到泉州档案管理系统的主界面。

3. 验证上传功能

  1. 点击导航栏的“档案上传”。
  2. 在表单中输入档案标题,例如“2023年度鲤城区重点项目汇总”。
  3. 在“所属区域”下拉框中选择“鲤城区”。
  4. 输入分类“文书档案”。
  5. 点击“选择文件”,上传一个本地的PDF或图片文件。
  6. 点击“立即上传”。系统提示成功后自动跳转回列表页。

4. 验证筛选与搜索

  1. 在列表页的搜索框中输入“重点项目”,点击筛选,确认只显示匹配的记录。
  2. 在区域下拉框中选择“丰泽区”,点击筛选,确认列表能正确过滤出该区域的档案。
  3. 点击表格右侧的“下载”按钮,确认能成功下载刚才上传的文件。
AI咨询
热线电话

028-85154420

15388110056

全国售前咨询电话

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

微信扫码关注安答联动

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

安答联动档案管理系统