基于Django+Vue的智能婚恋系统架构设计与技术实现

本项目构建了一个集用户管理、内容发布、智能推荐、消息交互于一体的现代化婚恋平台。系统采用前后端分离架构,后端基于Django RESTful API,前端采用Vue.js+Element UI,并集成Neo4j图数据库和百度AI服务,实现了智能化的用户匹配和内容推荐功能。

技术架构设计

整体架构

系统采用经典的三层架构模式,结合微服务思想进行模块化设计:

  • 表现层:Vue.js + Element UI 响应式前端界面
  • 业务逻辑层:Django RESTful API 服务层
  • 数据持久层:MySQL + Neo4j 混合数据库架构

核心技术栈

后端技术栈:

  • Django 2.2.8 - Web框架
  • MySQL - 关系型数据库
  • Neo4j - 图数据库
  • JWT - 身份认证
  • 百度AI API - 智能问答

前端技术栈:

  • Vue.js 2.6.11 - 前端框架
  • Element UI 2.15.6 - UI组件库
  • Vue Router 3.5.2 - 路由管理
  • Axios 0.21.1 - HTTP客户端
  • ECharts 4.8.0 - 数据可视化

核心功能模块

1. 用户管理系统

数据模型设计

class User(models.Model):
    uid = models.CharField(max_length=64, default=uuid.uuid4())  # 用户唯一标识
    name = models.CharField(max_length=64)                      # 用户姓名
    username = models.CharField(max_length=64)                   # 用户名
    password = models.CharField(max_length=64)                   # 加密密码
    gender = models.CharField(max_length=64)                      # 性别
    role = models.CharField(max_length=64)                       # 用户角色
    image = models.CharField(max_length=1024)                    # 头像URL
    age = models.IntegerField()                                  # 年龄
    mobile = models.CharField(max_length=64)                     # 手机号
    email = models.CharField(max_length=64)                      # 邮箱
    description = models.CharField(max_length=1024)              # 个人描述
    deleted = models.IntegerField(default=0)                     # 软删除标记
    createDate = models.DateField(auto_now_add=True)             # 创建时间
    updateDate = models.DateField(auto_now_add=True)             # 更新时间
    operator = models.CharField(max_length=64)                   # 操作员

    class Meta:
        ordering = ['createDate']
        db_table = 'python_marry_user'

安全认证机制

def validate_service(request):
    """用户登录验证服务"""
    data = json.load(request)
    username = data['username']
    password = data['password']
    
    # MD5加盐加密
    md5 = hashlib.md5(password.encode())
    salt = "$1$asd"  # 盐值
    md5.update(salt.encode())
    encrypted_data = md5.hexdigest()
    
    # 用户验证
    _user = User.objects.filter(username=username, password=encrypted_data, deleted=0).first()
    
    if _user is not None:
        # JWT Token生成
        payload = {"username": username}
        _token = jwt.encode(payload=payload, key="tk123")
        
        return JsonResponse({
            "success": "true",
            "message": "请求成功",
            "returnCode": "200",
            "returnData": {
                "logintoken": _token,
                "user": {
                    "id": _user.id,
                    "uid": _user.uid,
                    "name": _user.name,
                    "username": _user.username,
                    "gender": _user.gender,
                    "age": _user.age,
                    "role": _user.role,
                    "mobile": _user.mobile,
                    "email": _user.email,
                    "image": _user.image
                }
            }
        })

2. 内容管理系统

内容模型设计

class Content(models.Model):
    uid = models.CharField(max_length=64, default=uuid.uuid4())
    name = models.CharField(max_length=64)                       # 内容标题
    classification = models.CharField(max_length=64)              # 分类ID
    image = models.CharField(max_length=1024)                     # 封面图片
    description = models.CharField(max_length=1024)               # 内容描述
    content = models.CharField(max_length=1024)                   # 正文内容
    deleted = models.IntegerField(default=0)                      # 软删除标记
    createDate = models.DateField(auto_now_add=True)             # 创建时间
    updateDate = models.DateField(auto_now_add=True)             # 更新时间
    operator = models.CharField(max_length=64)                   # 操作员

    class Meta:
        ordering = ['createDate']
        db_table = 'python_marry_content'

分页查询优化

def content_list_service(request):
    """内容列表查询服务 - 支持分页和关联查询"""
    data = json.load(request)
    _pageSize = data['pageSize']
    _currentPage = data['currentPage']
    
    # 基础查询
    list = Content.objects.filter(deleted=0)
    _list = []
    
    # 关联查询优化 - 批量获取分类和用户信息
    classificationList = Classification.objects.filter(deleted=0)
    userList = User.objects.filter(deleted=0, role=2)
    
    # 构建映射字典,避免N+1查询问题
    _classification_dict = {}
    _user_dict = {}
    
    for item in classificationList:
        _classification_dict[item.uid] = item.name
    
    for item in userList:
        _user_dict[item.uid] = item.name
    
    # 数据组装
    for item in list:
        rest = {
            'id': item.id,
            'uid': item.uid,
            'name': item.name,
            'content': item.content,
            'classification': item.classification,
            'classificationName': _classification_dict.get(item.classification, ''),
            'description': item.description,
            'image': item.image,
            'createDate': item.createDate.strftime('%Y-%m-%d') if item.createDate else ''
        }
        _list.append(rest)
    
    # 分页逻辑
    page = {
        "pageSize": _pageSize,
        "total": len(_list),
        "currentPage": _currentPage
    }
    
    if _pageSize < len(_list):
        _start = (_currentPage - 1) * _pageSize
        _end = _currentPage * _pageSize
        _list = _list[_start: _end]

3. 图数据库集成

Neo4j图数据库连接

class MedicalGraph:
    """Neo4j图数据库连接类"""
    def __init__(self):
        # 图数据库连接配置
        self.g = Graph("bolt://localhost:7687", auth=("neo4j", "7508929hzq"))
    
    def create_relationship(self, user1_id, user2_id, relationship_type):
        """创建用户关系"""
        query = """
        MATCH (u1:User {id: $user1_id})
        MATCH (u2:User {id: $user2_id})
        CREATE (u1)-[r:RELATIONSHIP_TYPE]->(u2)
        RETURN r
        """
        return self.g.run(query, user1_id=user1_id, user2_id=user2_id, 
                         RELATIONSHIP_TYPE=relationship_type)
    
    def find_recommendations(self, user_id, limit=10):
        """基于图算法的用户推荐"""
        query = """
        MATCH (u:User {id: $user_id})-[r1:INTEREST]->(i:Interest)
        MATCH (i)<-[r2:INTEREST]-(other:User)
        WHERE other.id <> $user_id
        RETURN other, count(*) as common_interests
        ORDER BY common_interests DESC
        LIMIT $limit
        """
        return self.g.run(query, user_id=user_id, limit=limit)

4. AI智能问答集成

百度AI API集成

def query(message):
    """百度AI智能问答接口"""
    url = "https://aip.baidubce.com/rpc/2.0/ai_custom/v1/wenxinworkshop/chat/completions_pro?access_token=" + get_access_token()
    
    payload = json.dumps({
        "messages": [
            {
                "role": "user",
                "content": message
            }
        ],
        "temperature": 0.95,        # 创造性参数
        "top_p": 0.8,              # 核采样参数
        "penalty_score": 1,         # 重复惩罚
        "enable_system_memory": False,
        "disable_search": False,
        "enable_citation": False
    })
    
    headers = {'Content-Type': 'application/json'}
    response = requests.post(url, headers=headers, data=payload)
    return response.json()

def get_access_token():
    """获取百度AI访问令牌"""
    url = "https://aip.baidubce.com/oauth/2.0/token"
    params = {
        "grant_type": "client_credentials", 
        "client_id": API_KEY, 
        "client_secret": SECRET_KEY
    }
    return str(requests.post(url, params=params).json().get("access_token"))

5. 前端架构设计

Vue组件化开发

<template>
  <div id="module">
    <el-container>
      <!-- 左侧导航组件 -->
      <Nav />
      <el-container>
        <!-- 顶部导航栏 -->
        <el-header style="text-align: right; font-size: 12px">
          <el-dropdown>
            <i class="el-icon-setting" style="margin-right: 15px;"></i>
            <el-dropdown-menu slot="dropdown">
              <el-dropdown-item @click.native="modifyPassword">修改密码</el-dropdown-item>
              <el-dropdown-item @click.native="logout">退出登录</el-dropdown-item>
            </el-dropdown-menu>
          </el-dropdown>
          <span>{{username}}  </span>
        </el-header>
        <!-- 主体内容区域 -->
        <el-main>
          <Breadcrumb />
          <br />
          <router-view />
        </el-main>
      </el-container>
    </el-container>
  </div>
</template>

<script>
import Nav from "./Nav";
import Breadcrumb from "./Breadcrumb";
import cryptoJs from "crypto-js";

export default {
  name: 'Home',
  components: { Nav, Breadcrumb },
  data() {
    return {
      key: "rest@126.com",           // 加密密钥
      dialogFormVisible: false,      // 对话框显示状态
      username: "",                  // 当前用户名
      form: {                        // 表单数据
        oldPassword: "",
        newPassword: "",
        confirmPassword: "",
      },
      formLabelWidth: "120px",
      user: {}
    };
  },
  created() {
    // 从sessionStorage获取用户信息
    this.username = sessionStorage.getItem("username");
    this.user = JSON.parse(sessionStorage.getItem("user"));
  },
  methods: {
    // 密码加密方法
    encryptDes(message) {
      const keyHex = cryptoJs.enc.Utf8.parse(this.key);
      const option = { 
        mode: cryptoJs.mode.ECB, 
        padding: cryptoJs.pad.Pkcs7 
      };
      const encrypted = cryptoJs.DES.encrypt(message, keyHex, option);
      return encrypted.toString();
    },
    
    // 用户登出
    logout() {
      sessionStorage.removeItem("username");
      sessionStorage.removeItem("loginToken");
      this.$router.push("/login");
    }
  }
};
</script>

系统架构流程图

graph TB
    A[用户请求] --> B[Vue.js前端]
    B --> C[Axios HTTP请求]
    C --> D[Django RESTful API]
    D --> E[业务逻辑层]
    E --> F[数据访问层]
    F --> G[MySQL数据库]
    F --> H[Neo4j图数据库]
    E --> I[百度AI服务]
    E --> J[文件上传服务]
    D --> K[JWT认证]
    K --> L[响应数据]
    L --> B
    B --> M[Element UI渲染]

技术亮点与创新

1. 混合数据库架构

  • 关系型数据库:存储用户基础信息、内容数据等结构化数据
  • 图数据库:处理用户关系、兴趣匹配、推荐算法等复杂关系数据
  • 优势:充分发挥两种数据库的优势,实现数据的高效存储和查询

2. 智能推荐算法

def calculate_similarity_score(user1_interests, user2_interests):
    """计算用户兴趣相似度"""
    common_interests = set(user1_interests) & set(user2_interests)
    total_interests = set(user1_interests) | set(user2_interests)
    
    if len(total_interests) == 0:
        return 0
    
    # Jaccard相似度计算
    similarity = len(common_interests) / len(total_interests)
    return similarity * 100  # 转换为百分比

3. 安全机制设计

  • 密码加密:MD5加盐加密,防止彩虹表攻击
  • JWT认证:无状态身份验证,支持跨域访问
  • CORS配置:精确控制跨域请求来源
  • 软删除:数据安全删除,支持数据恢复

4. 性能优化策略

  • 分页查询:避免大数据量查询导致的性能问题
  • 关联查询优化:使用字典映射避免N+1查询问题
  • 缓存机制:对频繁查询的数据进行缓存
  • 异步处理:AI服务调用采用异步处理

系统优化建议

1. 数据库优化

# 添加数据库索引
class User(models.Model):
    # ... 其他字段
    class Meta:
        indexes = [
            models.Index(fields=['username']),
            models.Index(fields=['mobile']),
            models.Index(fields=['email']),
            models.Index(fields=['deleted', 'createDate']),
        ]

2. 缓存机制

from django.core.cache import cache

def get_user_by_id(user_id):
    """带缓存的用户查询"""
    cache_key = f"user_{user_id}"
    user = cache.get(cache_key)
    
    if user is None:
        user = User.objects.get(id=user_id)
        cache.set(cache_key, user, 300)  # 缓存5分钟
    
    return user

3. 异步任务处理

from celery import Celery

app = Celery('marry_system')

@app.task
def send_recommendation_email(user_id, recommendations):
    """异步发送推荐邮件"""
    # 邮件发送逻辑
    pass

@app.task
def update_user_recommendations(user_id):
    """异步更新用户推荐列表"""
    # 推荐算法计算
    pass

学习成果总结

技术技能提升

  1. 全栈开发能力:掌握了Django+Vue.js前后端分离开发模式
  2. 数据库设计:学会了关系型数据库与图数据库的混合使用
  3. API设计:掌握了RESTful API的设计原则和最佳实践
  4. 安全编程:理解了Web应用安全机制和加密算法应用
  5. 性能优化:学会了数据库查询优化和缓存机制设计

系统设计亮点

  1. 模块化架构:采用服务层模式,代码结构清晰,易于维护
  2. 智能推荐:集成图数据库和AI服务,实现智能化用户匹配
  3. 安全可靠:完善的认证授权机制和数据加密保护
  4. 扩展性强:模块化设计支持功能快速扩展
  5. 用户体验:响应式前端设计,提供良好的交互体验

项目价值

本系统不仅是一个技术实践项目,更是一个完整的企业级应用解决方案。通过这个项目,深入理解了现代Web应用的架构设计、数据库优化、安全机制等核心技术,为后续的大型项目开发奠定了坚实基础。

系统采用的技术栈和架构模式都是当前业界的主流选择,具有很强的实用性和学习价值。特别是图数据库和AI服务的集成应用,体现了现代Web应用向智能化方向发展的趋势。

基于Django+Vue的智能婚恋系统架构设计与技术实现

https://huangzhongqi978.top/2025/06/15/婚恋系统技术实现与架构设计/

作者

HuangZhongqi

发布于

2025-06-15

更新于

2025-10-03

许可协议

评论