基于Django+Vue的在线疫苗预约系统:计算机毕业设计实践指南

一、系统架构设计:Django与Vue的协同优势

在线疫苗预约系统需兼顾高并发处理与用户体验,采用Django(后端)+Vue(前端)的分离架构是理想选择。Django作为Python生态的成熟框架,提供ORM、Admin后台、安全认证等开箱即用功能,可快速构建RESTful API;Vue则以响应式数据绑定和组件化开发著称,能高效实现动态界面。两者通过Axios进行异步通信,形成“后端服务+前端渲染”的轻量级协作模式。

技术选型依据:

  1. 开发效率:Django的MTV模式(Model-Template-View)与Vue的单文件组件(.vue)结构,可并行开发前后端,缩短项目周期。
  2. 扩展性:Django的中间件机制支持添加权限控制、日志记录等横切关注点;Vue的插件系统(如Vuex状态管理)便于功能扩展。
  3. 安全性:Django内置CSRF防护、SQL注入拦截,Vue通过v-model双向绑定减少DOM操作漏洞,双重保障数据安全。

二、核心功能模块实现

1. 用户管理模块

  • 功能设计:支持普通用户(预约疫苗)、医疗机构(管理库存)、管理员(审核机构)三类角色。
  • Django实现
    1. # models.py
    2. from django.contrib.auth.models import AbstractUser
    3. class User(AbstractUser):
    4. USER_TYPE_CHOICES = (
    5. ('user', '普通用户'),
    6. ('hospital', '医疗机构'),
    7. ('admin', '管理员')
    8. )
    9. user_type = models.CharField(max_length=10, choices=USER_TYPE_CHOICES)
    10. phone = models.CharField(max_length=11, unique=True) # 疫苗预约需实名手机号
  • Vue交互:通过v-if动态渲染不同角色的导航菜单,例如医疗机构用户可见“库存管理”入口。

2. 疫苗预约流程

  • 流程设计:选择疫苗类型→查看可预约时段→填写接种人信息→支付定金(可选)→生成预约码。
  • 关键技术点
    • 时段冲突检测:后端通过F()表达式查询数据库,避免同一时段重复预约:
      1. # views.py
      2. from django.db.models import F
      3. def check_slot(request, hospital_id, slot_time):
      4. reserved = Reservation.objects.filter(
      5. hospital_id=hospital_id,
      6. slot_time=slot_time,
      7. status__in=['reserved', 'paid']
      8. ).count()
      9. return JsonResponse({'available': reserved == 0})
    • 预约码生成:使用Python的uuid模块生成唯一码,存储为加密字符串:
      1. import uuid
      2. reservation.code = uuid.uuid4().hex[:8].upper() # 取前8位大写

3. 医疗机构管理后台

  • 功能实现
    • 疫苗库存管理:通过Django Admin自定义表单,限制库存数量为正整数:
      1. # admin.py
      2. class VaccineAdmin(admin.ModelAdmin):
      3. list_display = ('name', 'type', 'stock')
      4. def get_form(self, request, obj=None, **kwargs):
      5. form = super().get_form(request, obj, **kwargs)
      6. form.base_fields['stock'].widget.attrs['min'] = 0 # HTML5原生验证
      7. return form
    • 预约记录导出:集成tablib库生成Excel报表,供医疗机构统计使用。

三、数据库设计与优化

1. 核心表结构

  • 疫苗表(Vaccine):字段包括名称、类型(如灭活疫苗、mRNA疫苗)、适用年龄、禁忌症等。
  • 预约记录表(Reservation):关联用户、医疗机构、疫苗、预约时段、状态(待支付/已取消/已完成)。
  • 医疗机构表(Hospital):存储机构名称、地址、联系方式、服务时间。

2. 性能优化策略

  • 索引优化:为高频查询字段(如user_idhospital_idslot_time)添加索引:
    1. # models.py
    2. class Reservation(models.Model):
    3. user = models.ForeignKey(User, on_delete=models.CASCADE)
    4. hospital = models.ForeignKey(Hospital, on_delete=models.CASCADE)
    5. slot_time = models.DateTimeField()
    6. # 添加复合索引
    7. class Meta:
    8. indexes = [
    9. models.Index(fields=['hospital', 'slot_time']),
    10. ]
  • 缓存机制:使用Django的cache_page装饰器缓存静态页面(如疫苗列表页),减少数据库查询。

四、前后端交互与安全实践

1. API设计规范

  • RESTful接口
    • GET /api/vaccines/:获取疫苗列表
    • POST /api/reservations/:提交预约请求
    • PUT /api/reservations/<id>/:修改预约状态
  • 请求验证:通过Django REST Framework的Serializer校验数据,例如确保手机号格式正确:
    1. # serializers.py
    2. from rest_framework import serializers
    3. class ReservationSerializer(serializers.ModelSerializer):
    4. phone = serializers.RegexField(regex=r'^1[3-9]\d{9}$', required=True)
    5. class Meta:
    6. model = Reservation
    7. fields = '__all__'

2. 安全防护措施

  • JWT认证:使用djangorestframework-simplejwt实现无状态认证,避免Session存储风险。
  • 敏感数据脱敏:前端展示手机号时隐藏中间4位,后端通过__contains查询替代完整匹配:
    1. // Vue中格式化手机号
    2. methods: {
    3. maskPhone(phone) {
    4. return phone.replace(/(\d{3})\d{4}(\d{4})/, '$1****$2');
    5. }
    6. }

五、部署与运维建议

  1. 容器化部署:使用Docker Compose编排Django(Gunicorn+Nginx)和Vue(Nginx静态文件)服务,简化环境配置。
  2. 日志监控:通过Django的logging模块记录预约异常,结合ELK(Elasticsearch+Logstash+Kibana)实现可视化分析。
  3. 压力测试:使用Locust模拟1000并发用户,验证系统在高负载下的响应时间(目标<2s)。

六、毕业设计亮点提炼

  • 技术深度:展示对Django中间件、Vue生命周期钩子的理解,例如在created阶段加载用户预约历史。
  • 业务价值:强调系统对公共卫生管理的提升,如减少现场排队、精准统计接种率。
  • 创新点:可加入AI推荐模块,根据用户年龄、病史推荐适合的疫苗类型。

通过以上设计,该系统不仅能满足毕业设计的技术要求,更具备实际落地价值。开发者可基于此框架进一步扩展功能,如添加短信通知、二维码核验等,打造更完善的医疗服务平台。