PAYATHON 2026

如何使用 Django REST Framework 和 Next.js 开发服务销售与顾问预约平台?

数据小陈

可以沿用现有技术栈,先完成发布服务、浏览顾问、选择时段、创建预约和查看预约结果的最小可用流程。现有描述没有指出必须更换框架的问题,接下来应先明确业务规则,再设计数据模型和接口。

先确定预约规则

设计页面前,需要明确几项直接影响实现的规则:

  • 谁可以发布服务?服务提供者与顾问是否属于同一种角色?
  • 一项服务是否可以由多位顾问提供?
  • 预约时段是固定长度,还是由服务时长决定?
  • 同一时段允许几人预约?是否需要顾问确认?
  • 用户何时可以取消或改约?

这些信息目前尚未提供。初期可以选择固定时段、每个时段只接受一笔有效预约等较简单的方案,但这些设计仍需确认。

按业务对象拆分后端

可以从以下数据对象入手,具体字段根据业务规则调整:

对象主要用途
用户登录身份、角色与账户信息
顾问资料专长、介绍及展示信息
服务服务内容、提供者、时长与上架状态
可预约时段顾问可提供服务的时间及容量
预约关联用户、服务、顾问、时段和预约状态

Django REST Framework 负责数据校验、身份认证、对象权限和预约规则;Next.js 负责浏览、表单与状态展示;AWS S3 保存图片等文件。数据库中保存文件标识及其所属对象,便于控制访问权限。

优先实现预约接口和冲突处理

下面是拟定的接口示例,不代表现有项目已经具备该 API。假设一个时段已明确对应顾问和服务,可以用以下请求创建预约:

POST /api/bookings/
Content-Type: application/json
Authorization: Bearer <access_token>

{
  "slot_id": 123
}

其中 Bearer 只是认证方式的示例,具体应与项目实际采用的认证方案一致。预约用户应从已认证身份中获取,避免客户端指定任意用户。

后端收到请求后,需要重新检查服务是否可预约、时段是否有效、是否还有容量。多个用户可能同时提交请求,因此不能只依靠前端禁用按钮。

如果采用固定时段、容量为 1 的设计,应在数据库事务中完成容量检查和预约创建,并使用合适的锁定策略和数据库约束防止重复占用。事务本身不能自动消除并发冲突。如果允许任意起止时间,还需要检查时间区间是否重叠,只限制相同的开始时间并不够。

对于用户重复点击或网络重试,也应避免同一次操作生成多笔预约。取消预约和释放容量应作为一致的状态变更处理。

用 Next.js 模板接通完整流程

先完成服务列表、顾问详情、时段选择和“我的预约”页面,接入真实接口数据。预约提交后,页面应以服务端返回的结果为准,并能展示时段已被占用、登录失效和提交失败等情况。

建议将时间统一保存为明确的时间点,并在界面显示对应时区。用户与顾问可能处于不同时区时,预约确认信息必须能消除时间歧义。

为 S3 文件明确访问权限

顾问头像、服务展示图和用户私密附件需要分别设置访问规则。对于私密文件,可以由后端校验权限后提供临时访问地址。前端不要持有长期 AWS 访问密钥。

无论采用后端上传还是授权直传,都应限制文件大小、允许的文件类型和存储路径,并校验上传者是否有权将文件关联到对应资料或服务。

按顺序验证,再扩展功能

建议先完成单个顾问发布服务、用户预约和取消预约的流程,再验证越权访问、重复提交以及多人争抢同一时段的情况。

如果平台需要在线收款,应先明确付款与预约的关系:付款期间是否占用时段、超时后如何释放、取消后是否退款。原始需求尚未说明支付方式,不宜提前绑定具体支付产品。

健康领域的平台还应尽早明确需要收集哪些用户信息。如果涉及健康资料,应根据实际业务和适用地区进一步确定访问、保存与删除要求。

备注:内容仅供参考。