基于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
学习成果总结
技术技能提升
- 全栈开发能力:掌握了Django+Vue.js前后端分离开发模式
- 数据库设计:学会了关系型数据库与图数据库的混合使用
- API设计:掌握了RESTful API的设计原则和最佳实践
- 安全编程:理解了Web应用安全机制和加密算法应用
- 性能优化:学会了数据库查询优化和缓存机制设计
系统设计亮点
- 模块化架构:采用服务层模式,代码结构清晰,易于维护
- 智能推荐:集成图数据库和AI服务,实现智能化用户匹配
- 安全可靠:完善的认证授权机制和数据加密保护
- 扩展性强:模块化设计支持功能快速扩展
- 用户体验:响应式前端设计,提供良好的交互体验
项目价值
本系统不仅是一个技术实践项目,更是一个完整的企业级应用解决方案。通过这个项目,深入理解了现代Web应用的架构设计、数据库优化、安全机制等核心技术,为后续的大型项目开发奠定了坚实基础。
系统采用的技术栈和架构模式都是当前业界的主流选择,具有很强的实用性和学习价值。特别是图数据库和AI服务的集成应用,体现了现代Web应用向智能化方向发展的趋势。
基于Django+Vue的智能婚恋系统架构设计与技术实现