计算机毕设选题:基于Python+MySQL校园美食推荐系统【源码+文档+调试】

发布于:2025-09-11 ⋅ 阅读:(16) ⋅ 点赞:(0)

精彩专栏推荐订阅:在下方主页👇🏻👇🏻👇🏻👇🏻

💖🔥作者主页计算机毕设木哥🔥 💖

一、项目介绍

基于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开发的完整流程,掌握前后端分离开发模式的实际应用。该系统在一定程度上解决了校园美食信息获取不便的问题,具有实际的应用价值,同时也为计算机专业学生提供了一个可行的毕业设计选择方向。

大家可以帮忙点赞、收藏、关注、评论啦 👇🏻

💖🔥作者主页计算机毕设木哥🔥 💖


网站公告

今日签到

点亮在社区的每一天
去签到