79 lines
2.2 KiB
Python
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)
|