在开始编写代码之前,需要确保本地计算机已经安装了Python环境。本系统基于Python 3.8及以上版本开发,使用轻量级Web框架Flask作为后端,SQLite作为数据库,无需额外配置数据库服务器即可运行。
打开终端或命令提示符,执行以下命令安装核心依赖库:
pip install flask openpyxl
依赖说明:
为了保持代码逻辑清晰,请在本地创建一个名为property_training_sys的文件夹,并在内部按照以下结构创建文件和目录:
在终端中进入项目根目录,执行以下命令创建空文件夹:
mkdir templates static
我们将使用SQLite数据库存储报名信息。数据库文件名为training.db,其中包含一张名为registrations的表。该表设计包含以下字段:id(主键)、name(姓名)、company(物业公司名称)、department(部门)、position(职位)、phone(联系电话)、course_type(培训课程类型)、create_time(报名时间)。
在app.py中写入以下代码,用于自动检测并初始化数据库:
import sqlite3
from flask import g
DATABASE = 'training.db'
def get_db():
db = getattr(g, '_database', None)
if db is None:
db = g._database = sqlite3.connect(DATABASE)
db.row_factory = sqlite3.Row
return db
def init_db():
with app.app_context():
db = get_db()
db.execute('''
CREATE TABLE IF NOT EXISTS registrations (
id INTEGER PRIMARY KEY AUTOINCREMENT,
name TEXT NOT NULL,
company TEXT NOT NULL,
department TEXT,
position TEXT,
phone TEXT NOT NULL,
course_type TEXT NOT NULL,
create_time TIMESTAMP DEFAULT CURRENT_TIMESTAMP
)
''')
db.commit()
打开app.py,编写完整的后端逻辑。我们需要实现四个主要功能:显示报名页面、处理报名提交、显示后台管理列表、导出Excel数据。
以下是完整的app.py代码:
from flask import Flask, render_template, request, redirect, url_for, flash, send_file, make_response
import sqlite3
from openpyxl import Workbook
from datetime import datetime
import io
app = Flask(__name__)
app.secret_key = 'your_secret_key_here' 用于Flash消息
DATABASE = 'training.db'
def get_db():
db = getattr(g, '_database', None)
if db is None:
db = g._database = sqlite3.connect(DATABASE)
db.row_factory = sqlite3.Row
return db
@app.teardown_appcontext
def close_connection(exception):
db = getattr(g, '_database', None)
if db is not None:
db.close()
def init_db():
with app.app_context():
db = get_db()
db.execute('''
CREATE TABLE IF NOT EXISTS registrations (
id INTEGER PRIMARY KEY AUTOINCREMENT,
name TEXT NOT NULL,
company TEXT NOT NULL,
department TEXT,
position TEXT,
phone TEXT NOT NULL,
course_type TEXT NOT NULL,
create_time TIMESTAMP DEFAULT CURRENT_TIMESTAMP
)
''')
db.commit()
首页:报名表单
@app.route('/')
def index():
return render_template('index.html')
处理报名提交
@app.route('/submit', methods=['POST'])
def submit():
name = request.form.get('name')
company = request.form.get('company')
department = request.form.get('department')
position = request.form.get('position')
phone = request.form.get('phone')
course_type = request.form.get('course_type')
if not name or not company or not phone or not course_type:
flash('请填写所有必填项(姓名、公司、电话、课程类型)', 'error')
return redirect(url_for('index'))
db = get_db()
try:
db.execute('INSERT INTO registrations (name, company, department, position, phone, course_type) VALUES (?, ?, ?, ?, ?, ?)',
(name, company, department, position, phone, course_type))
db.commit()
flash('报名成功!请等待培训通知。', 'success')
except Exception as e:
flash('报名失败,请重试。', 'error')
return redirect(url_for('index'))
后台管理页面
@app.route('/admin')
def admin():
db = get_db()
cursor = db.execute('SELECT FROM registrations ORDER BY create_time DESC')
data = cursor.fetchall()
return render_template('admin.html', registrations=data)
导出Excel功能
@app.route('/export')
def export():
db = get_db()
cursor = db.execute('SELECT name, company, department, position, phone, course_type, create_time FROM registrations ORDER BY create_time DESC')
data = cursor.fetchall()
wb = Workbook()
ws = wb.active
ws.title = "培训报名表"
写入表头
headers = ['姓名', '物业公司', '部门', '职位', '联系电话', '课程类型', '报名时间']
ws.append(headers)
写入数据
for row in data:
ws.append([row['name'], row['company'], row['department'], row['position'], row['phone'], row['course_type'], row['create_time']])
保存到内存流
output = io.BytesIO()
wb.save(output)
output.seek(0)
response = make_response(send_file(output, mimetype='application/vnd.openxmlformats-officedocument.spreadsheetml.sheet'))
response.headers["Content-Disposition"] = "attachment; filename=training_export.xlsx"
return response
if __name__ == '__main__':
init_db()
app.run(debug=True, port=5000)
注意:请确保在代码顶部添加from flask import g,并在app.py开头引入所有必要的库。上述代码中包含了数据校验、数据库插入以及Excel文件流的生成逻辑,可以直接复制使用。

前端页面使用Bootstrap 5进行快速布局,确保界面美观且兼容移动端。我们需要创建两个HTML文件:index.html和admin.html。
此页面包含一个报名表单,用于收集员工信息。请将以下代码写入templates/index.html:
物业档案培训报名
物业管理行业档案培训报名
{% with messages = get_flashed_messages(with_categories=true) %}
{% if messages %}
{% for category, message in messages %}
{{ message }}
{% endfor %}
{% endif %}
{% endwith %}
此页面用于展示所有报名人员列表,并提供导出按钮。请将以下代码写入templates/admin.html:
报名管理后台
所有代码文件准备就绪后,即可启动系统进行测试。
1. 启动服务
在终端中确保位于项目根目录下,执行以下命令启动Flask开发服务器:
python app.py
终端将显示服务运行在 http://127.0.0.1:5000。
2. 访问报名页面
打开浏览器,访问 http://127.0.0.1:5000。你将看到物业档案培训报名表单。尝试填写信息,姓名、公司、电话和课程类型为必填项,若留空提交,页面会提示错误信息。填写完整后提交,页面应显示“报名成功”提示。
3. 管理数据与导出
提交数据后,在浏览器地址栏输入 http://127.0.0.1:5000/admin 访问后台管理页面。你将看到刚才提交的数据列表显示在表格中。点击右上角的绿色“导出Excel”按钮,浏览器将下载一个名为training_export.xlsx的文件。打开该文件,确认其中的数据格式正确,包含表头和所有提交的报名详情。
至此,一个完整的、包含数据录入、存储、展示和导出功能的物业管理行业档案培训报名系统已完全落地。该系统可以直接部署在内网服务器或通过公网映射供物业员工使用。
档案软件审计日志不完整?别慌,老司机带你填坑!