本系统基于轻量Python栈开发,本地就能运行,不需要额外服务器,仅需两步完成环境准备:
``` winget install Python.Python.3.11 ```
``` brew install python@3.11 ```
安装完成后,终端输入python --version,输出版本号≥3.8即为正常。接下来执行依赖安装命令,直接复制执行即可:
``` pip install flask==2.3.3 sqlalchemy==2.0.20 ```
在电脑任意位置新建文件夹,命名为estate-file-system,进入文件夹后新建3个空白文件,分别为:config.py(配置文件)、models.py(数据模型)、app.py(主程序入口),无需新建其他文件夹。
直接复制以下完整代码到文件,不需要修改任何内容:
``` import os basedir = os.path.abspath(os.path.dirname(__file__)) class Config: SECRET_KEY = 'estate-file-manage-secret-key-2024' SQLALCHEMY_DATABASE_URI = 'sqlite:///' + os.path.join(basedir, 'estate.db') SQLALCHEMY_TRACK_MODIFICATIONS = False ```
已经预设好不动产档案所有核心字段,直接复制完整内容即可:

``` from datetime import datetime from sqlalchemy import Column, Integer, String, Date, Float, Text from sqlalchemy.ext.declarative import declarative_base Base = declarative_base() class EstateFile(Base): __tablename__ = 'estate_files' id = Column(Integer, primary_key=True, autoincrement=True) address = Column(String(200), nullable=False, index=True) owner = Column(String(100), nullable=False, index=True) type = Column(String(50), nullable=False) area = Column(Float, nullable=False) cert_no = Column(String(50), unique=True, nullable=False, index=True) register_date = Column(Date, nullable=False) remark = Column(Text) create_time = Column(datetime, default=datetime.now) ```
已经实现增删改查、检索所有核心功能,直接复制完整代码即可:
``` from flask import Flask, render_template_string, request, redirect, url_for from sqlalchemy import create_engine from sqlalchemy.orm import sessionmaker from config import Config from models import Base, EstateFile app = Flask(__name__) app.config.from_object(Config) engine = create_engine(app.config['SQLALCHEMY_DATABASE_URI']) Base.metadata.create_all(engine) Session = sessionmaker(bind=engine) INDEX_HTML = '''不动产档案管理系统 不动产档案管理
''' ADD_EDIT_HTML = '''
{% for file in files %} 档案ID 坐落地址 权利人 不动产类型 面积(㎡) 产权证号 登记日期 操作 {% endfor %} {{ file.id }} {{ file.address }} {{ file.owner }} {{ file.type }} {{ file.area }} {{ file.cert_no }} {{ file.register_date }} 编辑 删除 {% if file %}编辑档案{% else %}新增档案{% endif %} {% if file %}编辑档案{% else %}新增档案{% endif %}''' @app.route('/') def index(): session = Session() files = session.query(EstateFile).order_by(EstateFile.create_time.desc()).all() session.close() return render_template_string(INDEX_HTML, files=files) @app.route('/search') def search(): keyword = request.args.get('keyword', '').strip() session = Session() files = session.query(EstateFile).filter( (EstateFile.address.contains(keyword)) | (EstateFile.owner.contains(keyword)) | (EstateFile.cert_no.contains(keyword)) ).all() session.close() return render_template_string(INDEX_HTML, files=files) @app.route('/add', methods=['GET', 'POST']) def add(): if request.method == 'GET': return render_template_string(ADD_EDIT_HTML) data = request.form new_file = EstateFile( address = data.get('address'), owner = data.get('owner'), type = data.get('type'), area = float(data.get('area')), cert_no = data.get('cert_no'), register_date = data.get('register_date'), remark = data.get('remark', '') ) session = Session() session.add(new_file) session.commit() session.close() return redirect(url_for('index')) @app.route('/edit', methods=['GET', 'POST']) def edit(): file_id = request.args.get('id') session = Session() file = session.query(EstateFile).filter_by(id=file_id).first() if request.method == 'POST': file.address = request.form.get('address') file.owner = request.form.get('owner') file.type = request.form.get('type') file.area = float(request.form.get('area')) file.cert_no = request.form.get('cert_no') file.register_date = request.form.get('register_date') file.remark = request.form.get('remark') session.commit() session.close() return redirect(url_for('index')) session.close() if file.register_date: file.register_date = file.register_date.strftime('%Y-%m-%d') return render_template_string(ADD_EDIT_HTML, file=file) @app.route('/delete') def delete(): file_id = request.args.get('id') session = Session() file = session.query(EstateFile).filter_by(id=file_id).first() if file: session.delete(file) session.commit() session.close() return redirect(url_for('index')) if __name__ == '__main__': app.run(debug=True, host='0.0.0.0', port=5000) ```
第一步:打开终端,进入项目文件夹,Windows示例:如果项目在D盘根目录,执行命令:d: && cd estate-file-system,Mac示例:cd ~/estate-file-system
第二步:执行启动命令:
``` python app.py ```
第三步:打开任意浏览器,地址栏输入 http://localhost:5000,即可进入系统使用。
estate.db文件中,仅需复制该文件即可完成完整备份或迁移到其他设备使用如果需要部署到服务器供多人使用,仅需将项目上传到服务器,开放服务器5000端口,用同样命令启动即可,通过服务器IP加端口即可访问。