Files
vehicle-management-system-2…/app.py
T

79 lines
2.2 KiB
Python

# -*- coding: utf-8 -*-
"""车辆管理系统 - Flask 应用入口"""
from flask import Flask, render_template, request, jsonify, redirect, url_for
import models
app = Flask(__name__)
@app.route('/')
def index():
"""首页:展示车辆列表,支持搜索"""
keyword = request.args.get('q', '').strip()
vehicles = models.list_vehicles(keyword or None)
stat = models.stats()
return render_template('index.html', vehicles=vehicles, keyword=keyword, stats=stat)
@app.route('/edit/<int:vid>')
def edit_page(vid):
"""编辑页面"""
vehicle = models.get_vehicle(vid)
if not vehicle:
return redirect(url_for('index'))
return render_template('edit.html', vehicle=vehicle)
# ------------------ REST API ------------------
@app.route('/api/vehicles', methods=['GET'])
def api_list():
keyword = request.args.get('q', '').strip()
return jsonify(models.list_vehicles(keyword or None))
@app.route('/api/vehicles', methods=['POST'])
def api_add():
data = request.get_json(force=True, silent=True) or {}
if not data.get('plate') or not data.get('brand') or not data.get('model'):
return jsonify({'error': 'plate, brand, model 为必填项'}), 400
try:
vid = models.add_vehicle(data)
except Exception as e:
return jsonify({'error': str(e)}), 400
return jsonify({'id': vid, 'message': '添加成功'}), 201
@app.route('/api/vehicles/<int:vid>', methods=['GET'])
def api_get(vid):
v = models.get_vehicle(vid)
if not v:
return jsonify({'error': '未找到'}), 404
return jsonify(v)
@app.route('/api/vehicles/<int:vid>', methods=['PUT'])
def api_update(vid):
if not models.get_vehicle(vid):
return jsonify({'error': '未找到'}), 404
data = request.get_json(force=True, silent=True) or {}
models.update_vehicle(vid, data)
return jsonify({'message': '更新成功'})
@app.route('/api/vehicles/<int:vid>', methods=['DELETE'])
def api_delete(vid):
models.delete_vehicle(vid)
return jsonify({'message': '删除成功'})
@app.route('/api/stats', methods=['GET'])
def api_stats():
return jsonify(models.stats())
if __name__ == '__main__':
models.init_db()
app.run(host='0.0.0.0', port=5000, debug=True)