避暑山庄旅游路径规划项目 代码设计
- 数据库设计
在数据库中,我们将需要以下表格:
- 用户表(user)
- 景点表(scenery)
- 路径表(path)
用户表(user):
| 字段名 | 类型 | 说明 | | --------- | --------- | -------------- | | id | int | 用户ID | | username | varchar | 用户名 | | password | varchar | 密码 | | email | varchar | 邮箱 | | phone | varchar | 手机号码 | | avatar | varchar | 用户头像 | | created_at| timestamp | 创建时间 | | updated_at| timestamp | 更新时间 |
景点表(scenery):
| 字段名 | 类型 | 说明 | | --------- | --------- | -------------- | | id | int | 景点ID | | name | varchar | 景点名称 | | intro | text | 景点简介 | | location | varchar | 景点位置 | | image | varchar | 景点图片 | | created_at| timestamp | 创建时间 | | updated_at| timestamp | 更新时间 |
路径表(path):
| 字段名 | 类型 | 说明 | | --------- | --------- | -------------- | | id | int | 路径ID | | user_id | int | 用户ID | | start | varchar | 起点 | | end | varchar | 终点 | | distance | float | 路径长度 | | time | float | 预计用时 | | created_at| timestamp | 创建时间 | | updated_at| timestamp | 更新时间 |
- 接口设计
接口设计包括用户登录、注册、查看景点信息、查询路径信息、添加路径信息、删除路径信息等功能。
- 用户登录
URL: /api/login
Method: POST
Request:
{
"username": "xxx",
"password": "xxx"
}
Response:
{
"code": 200,
"message": "登录成功",
"data": {
"token": "xxx",
"user": {
"id": 1,
"username": "xxx",
"email": "xxx",
"phone": "xxx",
"avatar": "xxx",
"created_at": "xxx",
"updated_at": "xxx"
}
}
}
- 用户注册
URL: /api/register
Method: POST
Request:
{
"username": "xxx",
"password": "xxx",
"email": "xxx",
"phone": "xxx",
"avatar": "xxx"
}
Response:
{
"code": 200,
"message": "注册成功",
"data": {
"user": {
"id": 1,
"username": "xxx",
"email": "xxx",
"phone": "xxx",
"avatar": "xxx",
"created_at": "xxx",
"updated_at": "xxx"
}
}
}
- 查看景点信息
URL: /api/scenary
Method: GET
Response:
{
"code": 200,
"message": "获取景点列表成功",
"data": [
{
"id": 1,
"name": "xxx",
"intro": "xxx",
"location": "xxx",
"image": "xxx",
"created_at": "xxx",
"updated_at": "xxx"
},
{
"id": 2,
"name": "xxx",
"intro": "xxx",
"location": "xxx",
"image": "xxx",
"created_at": "xxx",
"updated_at": "xxx"
}
]
}
- 查询路径信息
URL: /api/path
Method: GET
Request:
{
"start": "xxx",
"end": "xxx"
}
Response:
{
"code": 200,
"message": "获取路径信息成功",
"data": {
"start": "xxx",
"end": "xxx",
"distance": "xxx",
"time": "xxx"
}
}
- 添加路径信息
URL: /api/path
Method: POST
Request:
{
"start": "xxx",
"end": "xxx",
"distance": "xxx",
"time": "xxx"
}
Response:
{
"code": 200,
"message": "添加路径信息成功",
"data": {
"start": "xxx",
"end": "xxx",
"distance": "xxx",
"time": "xxx"
}
}
- 删除路径信息
URL: /api/path
Method: DELETE
Request:
{
"start": "xxx",
"end": "xxx"
}
Response:
{
"code": 200,
"message": "删除路径信息成功",
"data": null
}
- 程序实现
我们使用 Python Flask 框架实现该项目。具体实现过程可参考以下代码:
# 导入 Flask 框架
from flask import Flask, request, jsonify
# 导入数据库 ORM 工具
from flask_sqlalchemy import SQLAlchemy
# 初始化 Flask 应用
app = Flask(__name__)
# 配置数据库
app.config['SQLALCHEMY_DATABASE_URI'] = 'mysql://root:password@localhost/summer_resort'
app.config['SQLALCHEMY_TRACK_MODIFICATIONS'] = True
# 初始化数据库 ORM 工具
db = SQLAlchemy(app)
# 定义用户表
class User(db.Model):
id = db.Column(db.Integer, primary_key=True)
username = db.Column(db.String(64), unique=True, nullable=False)
password = db.Column(db.String(128), nullable=False)
email = db.Column(db.String(64), unique=True, nullable=False)
phone = db.Column(db.String(20), unique=True, nullable=False)
avatar = db.Column(db.String(128))
created_at = db.Column(db.DateTime, server_default=db.func.now())
updated_at = db.Column(db.DateTime, server_default=db.func.now(), onupdate=db.func.now())
def __repr__(self):
return '<User %r>' % self.username
# 定义景点表
class Scenery(db.Model):
id = db.Column(db.Integer, primary_key=True)
name = db.Column(db.String(64), nullable=False)
intro = db.Column(db.Text)
location = db.Column(db.String(128), nullable=False)
image = db.Column(db.String(128))
created_at = db.Column(db.DateTime, server_default=db.func.now())
updated_at = db.Column(db.DateTime, server_default=db.func.now(), onupdate=db.func.now())
def __repr__(self):
return '<Scenery %r>' % self.name
# 定义路径表
class Path(db.Model):
id = db.Column(db.Integer, primary_key=True)
user_id = db.Column(db.Integer, db.ForeignKey('user.id'), nullable=False)
start = db.Column(db.String(128), nullable=False)
end = db.Column(db.String(128), nullable=False)
distance = db.Column(db.Float, nullable=False)
time = db.Column(db.Float, nullable=False)
created_at = db.Column(db.DateTime, server_default=db.func.now())
updated_at = db.Column(db.DateTime, server_default=db.func.now(), onupdate=db.func.now())
def __repr__(self):
return '<Path %r>' % self.id
# 用户登录接口
@app.route('/api/login', methods=['POST'])
def login():
username = request.json.get('username')
password = request.json.get('password')
user = User.query.filter_by(username=username, password=password).first()
if user:
token = 'xxx'
return jsonify({
'code': 200,
'message': '登录成功',
'data': {
'token': token,
'user': {
'id': user.id,
'username': user.username,
'email': user.email,
'phone': user.phone,
'avatar': user.avatar,
'created_at': user.created_at,
'updated_at': user.updated_at,
}
}
})
else:
return jsonify({
'code': 401,
'message': '用户名或密码错误',
'data': None
})
# 用户注册接口
@app.route('/api/register', methods=['POST'])
def register():
username = request.json.get('username')
password = request.json.get('password')
email = request.json.get('email')
phone = request.json.get('phone')
avatar = request.json.get('avatar')
user = User(username=username, password=password, email=email, phone=phone, avatar=avatar)
db.session.add(user)
db.session.commit()
return jsonify({
'code': 200,
'message': '注册成功',
'data': {
'user': {
'id': user.id,
'username': user.username,
'email': user.email,
'phone': user.phone,
'avatar': user.avatar,
'created_at': user.created_at,
'updated_at': user.updated_at,
}
}
})
# 查看景点信息接口
@app.route('/api/scenery', methods=['GET'])
def scenery():
scenery_list = Scenery.query.all()
scenery_data = []
for scenery in scenery_list:
scenery_data.append({
'id': scenery.id,
'name': scenery.name,
'intro': scenery.intro,
'location': scenery.location,
'image': scenery.image,
'created_at': scenery.created_at,
'updated_at': scenery.updated_at,
})
return jsonify({
'code': 200,
'message': '获取景点列表成功',
'data': scenery_data
})
# 查询路径信息接口
@app.route('/api/path', methods=['GET'])
def path():
start = request.args.get('start')
end = request.args.get('end')
path = Path.query.filter_by(start=start, end=end).first()
if path:
return jsonify({
'code': 200,
'message': '获取路径信息成功',
'data': {
'start': path.start,
'end': path.end,
'distance': path.distance,
'time': path.time,
}
})
else:
return jsonify({
'code': 404,
'message': '路径信息不存在',
'data': None
})
# 添加路径信息接口
@app.route('/api/path', methods=['POST'])
def add_path():
user_id = request.json.get('user_id')
start = request.json.get('start')
end = request.json.get('end')
distance = request.json.get('distance')
time = request.json.get('time')
path = Path(user_id=user_id, start=start, end=end, distance=distance, time=time)
db.session.add(path)
db.session.commit()
return jsonify({
'code': 200,
'message': '添加路径信息成功',
'data': {
'start': path.start,
'end': path.end,
'distance': path.distance,
'time': path.time,
}
})
# 删除路径信息接口
@app.route('/api/path', methods=['DELETE'])
def delete_path():
start = request.json.get('start')
end = request.json.get('end')
path = Path.query.filter_by(start=start, end=end).first()
if path:
db.session.delete(path)
db.session.commit()
return jsonify({
'code': 200,
'message': '删除路径信息成功',
'data': None
})
else:
return jsonify({
'code': 404,
'message': '路径信息不存在',
'data': None
})
# 启动 Flask 应用
if __name__ == '__main__':
app.run()
``
原文地址: http://www.cveoy.top/t/topic/hmhs 著作权归作者所有。请勿转载和采集!