精彩专栏推荐订阅:在下方主页👇🏻👇🏻👇🏻👇🏻
💖🔥作者主页:计算机毕设木哥🔥 💖
一、项目介绍
基于Python+MySQL校园美食推荐系统是一个面向校园用户的智能化美食推荐平台,采用B/S架构设计,通过Django后端框架与Vue+ElementUI前端技术栈构建。系统主要包含管理员和用户两种角色,管理员负责用户管理、美食信息管理以及预测数据管理等核心功能,用户可以进行注册登录并浏览校园内各类美食信息。系统运用Python强大的数据处理能力,结合MySQL数据库的稳定存储特性,为校园师生提供个性化的美食推荐服务。通过Django框架的MVC架构模式,系统实现了前后端分离的开发模式,Vue.js配合ElementUI组件库打造了友好的用户交互界面,使得用户能够便捷地获取校园美食资讯,提升了校园生活的便利性和用户体验。
选题背景
随着高等教育规模的不断扩大和校园生活品质要求的提升,校园餐饮服务已经成为影响学生日常学习生活的重要因素。现代大学校园普遍规模较大,食堂分布广泛,美食种类繁多,学生在选择用餐时经常面临信息不对称的问题。传统的美食信息获取方式主要依赖口碑传播或实地探索,效率低下且容易错过优质美食。同时,不同学生的口味偏好、消费水平、饮食习惯存在显著差异,单一的推荐方式难以满足个性化需求。校园美食推荐系统的出现正是为了解决这一现实问题,通过技术手段整合校园美食资源,为师生提供便捷的信息服务平台,让大家能够快速找到符合自己需求的美食选择。
选题意义
本课题的研究具有一定的实际应用价值和技术实践意义。从实用角度来看,系统能够为校园师生提供相对便利的美食信息查询服务,帮助用户节约寻找美食的时间成本,在一定程度上改善校园用餐体验。从技术层面来说,项目综合运用了Python、Django、Vue、MySQL等主流技术栈,为计算机专业学生提供了较为完整的全栈开发实践机会,有助于加深对Web开发流程的理解和掌握。该系统的设计与实现过程涵盖了需求分析、数据库设计、后端开发、前端界面设计等多个环节,能够锻炼学生的系统性思维和实际动手能力。虽然作为毕业设计项目,其功能相对简单,但通过这个项目可以初步体验软件开发的完整流程,为今后从事相关工作积累基础经验,同时也为校园信息化建设提供了一个可参考的解决思路。
二、视频展示
计算机毕设选题:基于Python+MySQL校园美食推荐系统【源码+文档+调试】
三、开发环境
开发语言:Python
数据库:MySQL
系统架构:B/S
后端框架:Django
前端:Vue+ElementUI
开发工具:PyCharm
四、系统展示
登录模块:
首页模块:
管理模块展示:
五、代码展示
from pyspark.sql import SparkSession
from django.shortcuts import render
from django.http import JsonResponse
from django.contrib.auth import authenticate, login
from django.contrib.auth.models import User
from django.views.decorators.csrf import csrf_exempt
from .models import Food, UserProfile, PredictionData
import json
import hashlib
from datetime import datetime
spark = SparkSession.builder.appName("CampusFoodRecommendation").getOrCreate()
@csrf_exempt
def user_register(request):
if request.method == 'POST':
data = json.loads(request.body)
username = data.get('username')
password = data.get('password')
email = data.get('email')
if User.objects.filter(username=username).exists():
return JsonResponse({'status': 'error', 'message': '用户名已存在'})
if User.objects.filter(email=email).exists():
return JsonResponse({'status': 'error', 'message': '邮箱已被注册'})
password_hash = hashlib.md5(password.encode()).hexdigest()
user = User.objects.create_user(username=username, password=password, email=email)
user_profile = UserProfile.objects.create(
user=user,
nickname=username,
phone='',
preference_taste='',
created_time=datetime.now()
)
user_profile.save()
return JsonResponse({'status': 'success', 'message': '注册成功'})
return JsonResponse({'status': 'error', 'message': '请求方法错误'})
@csrf_exempt
def user_login(request):
if request.method == 'POST':
data = json.loads(request.body)
username = data.get('username')
password = data.get('password')
user = authenticate(request, username=username, password=password)
if user is not None:
login(request, user)
user_profile = UserProfile.objects.get(user=user)
user_info = {
'id': user.id,
'username': user.username,
'email': user.email,
'nickname': user_profile.nickname,
'phone': user_profile.phone,
'preference_taste': user_profile.preference_taste
}
request.session['user_id'] = user.id
request.session['username'] = user.username
return JsonResponse({'status': 'success', 'message': '登录成功', 'user': user_info})
else:
return JsonResponse({'status': 'error', 'message': '用户名或密码错误'})
return JsonResponse({'status': 'error', 'message': '请求方法错误'})
@csrf_exempt
def manage_food_info(request):
if request.method == 'GET':
foods = Food.objects.all().values(
'id', 'name', 'category', 'price', 'description',
'location', 'rating', 'image_url', 'created_time'
)
food_list = []
for food in foods:
food_dict = {
'id': food['id'],
'name': food['name'],
'category': food['category'],
'price': float(food['price']),
'description': food['description'],
'location': food['location'],
'rating': float(food['rating']),
'image_url': food['image_url'],
'created_time': food['created_time'].strftime('%Y-%m-%d %H:%M:%S')
}
food_list.append(food_dict)
return JsonResponse({'status': 'success', 'data': food_list})
elif request.method == 'POST':
data = json.loads(request.body)
food = Food.objects.create(
name=data.get('name'),
category=data.get('category'),
price=data.get('price'),
description=data.get('description'),
location=data.get('location'),
rating=data.get('rating', 0),
image_url=data.get('image_url', ''),
created_time=datetime.now()
)
return JsonResponse({'status': 'success', 'message': '美食信息添加成功', 'food_id': food.id})
elif request.method == 'PUT':
data = json.loads(request.body)
food_id = data.get('id')
try:
food = Food.objects.get(id=food_id)
food.name = data.get('name', food.name)
food.category = data.get('category', food.category)
food.price = data.get('price', food.price)
food.description = data.get('description', food.description)
food.location = data.get('location', food.location)
food.rating = data.get('rating', food.rating)
food.image_url = data.get('image_url', food.image_url)
food.save()
return JsonResponse({'status': 'success', 'message': '美食信息更新成功'})
except Food.DoesNotExist:
return JsonResponse({'status': 'error', 'message': '美食信息不存在'})
elif request.method == 'DELETE':
data = json.loads(request.body)
food_id = data.get('id')
try:
food = Food.objects.get(id=food_id)
food.delete()
return JsonResponse({'status': 'success', 'message': '美食信息删除成功'})
except Food.DoesNotExist:
return JsonResponse({'status': 'error', 'message': '美食信息不存在'})
@csrf_exempt
def get_food_recommendations(request):
if request.method == 'GET':
user_id = request.session.get('user_id')
category = request.GET.get('category', '')
price_range = request.GET.get('price_range', '')
location = request.GET.get('location', '')
query = Food.objects.all()
if category:
query = query.filter(category__icontains=category)
if location:
query = query.filter(location__icontains=location)
if price_range:
if price_range == 'low':
query = query.filter(price__lte=15)
elif price_range == 'medium':
query = query.filter(price__gt=15, price__lte=30)
elif price_range == 'high':
query = query.filter(price__gt=30)
if user_id:
try:
user_profile = UserProfile.objects.get(user_id=user_id)
preference = user_profile.preference_taste
if preference:
query = query.filter(category__icontains=preference)
except UserProfile.DoesNotExist:
pass
foods = query.order_by('-rating')[:20].values(
'id', 'name', 'category', 'price', 'description',
'location', 'rating', 'image_url'
)
recommendation_list = []
for food in foods:
recommendation_score = float(food['rating']) * 0.7
if user_id and preference and preference.lower() in food['category'].lower():
recommendation_score += 0.3
food_dict = {
'id': food['id'],
'name': food['name'],
'category': food['category'],
'price': float(food['price']),
'description': food['description'],
'location': food['location'],
'rating': float(food['rating']),
'image_url': food['image_url'],
'recommendation_score': round(recommendation_score, 2)
}
recommendation_list.append(food_dict)
recommendation_list.sort(key=lambda x: x['recommendation_score'], reverse=True)
return JsonResponse({'status': 'success', 'data': recommendation_list})
六、项目文档展示
七、项目总结
基于Python+MySQL校园美食推荐系统作为计算机专业毕业设计项目,通过综合运用现代Web开发技术栈,实现了一个相对完整的校园美食信息服务平台。系统采用Django后端框架处理业务逻辑,结合Vue.js前端框架构建用户界面,MySQL数据库负责数据存储管理,整体架构清晰合理。项目开发过程中涉及了需求分析、系统设计、数据库建模、接口开发、前端交互等多个技术环节,为学生提供了较为全面的实践锻炼机会。虽然系统功能相对基础,主要包含用户管理、美食信息管理和基本推荐功能,但通过这个项目可以深入理解Web开发的完整流程,掌握前后端分离开发模式的实际应用。该系统在一定程度上解决了校园美食信息获取不便的问题,具有实际的应用价值,同时也为计算机专业学生提供了一个可行的毕业设计选择方向。
大家可以帮忙点赞、收藏、关注、评论啦 👇🏻
💖🔥作者主页:计算机毕设木哥🔥 💖