1. 数据库设计

在数据库中,我们将需要以下表格:

  • 用户表(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 | 更新时间 |

  1. 接口设计

接口设计包括用户登录、注册、查看景点信息、查询路径信息、添加路径信息、删除路径信息等功能。

  • 用户登录
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
    }
  1. 程序实现

我们使用 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 著作权归作者所有。请勿转载和采集!

免费AI点我,无需注册和登录