一、个人简介
💖💖作者:计算机编程果茶熊 💙💙个人简介:曾长期从事计算机专业培训教学,担任过编程老师,同时本人也热爱上课教学,擅长Java、微信小程序、Python、Golang、安卓Android等多个IT方向。会做一些项目定制化开发、代码讲解、答辩教学、文档编写、也懂一些降重方面的技巧。平常喜欢分享一些自己开发中遇到的问题的解决办法,也喜欢交流技术,大家有技术代码这一块的问题可以问我! 💛💛想说的话:感谢大家的关注与支持! 💜💜 网站实战项目 安卓/小程序实战项目 大数据实战项目 计算机毕业设计选题 💕💕文末获取源码联系计算机编程果茶熊
二、系统介绍
开发语言:Java+Python 数据库:MySQL 系统架构:B/S 后端框架:SpringBoot(Spring+SpringMVC+Mybatis)+Django 前端:Vue+HTML+CSS+JavaScript+jQuery
Django餐厅推荐系统是一个基于Python Django框架开发的现代化餐饮服务平台,采用前后端分离的B/S架构设计,前端运用Vue.js配合ElementUI组件库构建用户界面,后端基于Django框架提供RESTful API服务,数据存储采用MySQL关系型数据库。该系统整合了用户管理、餐厅信息管理、菜品分类管理、订单处理等核心业务模块,为用户提供便捷的餐厅查找和菜品推荐服务。系统支持用户注册登录、个人信息维护、餐厅详情浏览、菜品信息查询、在线下单等完整的餐饮服务流程,同时为管理员提供后台管理功能,包括餐厅信息录入、菜品类型分类、订单状态跟踪等运营管理工具。通过Django的ORM机制实现数据持久化,Vue的响应式设计保证良好的用户体验,ElementUI组件确保界面的美观性和一致性,整体架构清晰,功能模块划分合理,具备良好的可扩展性和维护性。
三、Django餐厅推荐系统-视频解说
四、Django餐厅推荐系统-功能展示
五、Django餐厅推荐系统-代码展示
from pyspark.sql import SparkSession
from django.http import JsonResponse
from django.views.decorators.csrf import csrf_exempt
from django.contrib.auth.decorators import login_required
from .models import Restaurant, MenuItem, Order, User
import json
from datetime import datetime
from django.db import transaction
@csrf_exempt
@login_required
def restaurant_recommendation(request):
spark = SparkSession.builder.appName("RestaurantRecommendation").getOrCreate()
if request.method == 'POST':
data = json.loads(request.body)
user_id = data.get('user_id')
cuisine_preference = data.get('cuisine_type', '')
price_range = data.get('price_range', 'medium')
location = data.get('location', '')
user_orders = Order.objects.filter(user_id=user_id).select_related('restaurant')
visited_restaurants = [order.restaurant.id for order in user_orders]
base_query = Restaurant.objects.filter(is_active=True)
if cuisine_preference:
base_query = base_query.filter(cuisine_type__icontains=cuisine_preference)
if location:
base_query = base_query.filter(address__icontains=location)
if price_range == 'low':
base_query = base_query.filter(average_price__lte=50)
elif price_range == 'medium':
base_query = base_query.filter(average_price__gt=50, average_price__lte=100)
else:
base_query = base_query.filter(average_price__gt=100)
candidate_restaurants = base_query.exclude(id__in=visited_restaurants)
recommendation_scores = {}
for restaurant in candidate_restaurants:
score = 0
if restaurant.cuisine_type and cuisine_preference:
if cuisine_preference.lower() in restaurant.cuisine_type.lower():
score += 30
score += min(restaurant.rating * 10, 25)
recent_orders = Order.objects.filter(restaurant=restaurant, created_at__gte=datetime.now().replace(day=1)).count()
score += min(recent_orders * 2, 20)
menu_variety = MenuItem.objects.filter(restaurant=restaurant).count()
score += min(menu_variety, 15)
if restaurant.average_price:
if price_range == 'low' and restaurant.average_price <= 50:
score += 10
elif price_range == 'medium' and 50 < restaurant.average_price <= 100:
score += 10
elif price_range == 'high' and restaurant.average_price > 100:
score += 10
recommendation_scores[restaurant.id] = score
sorted_restaurants = sorted(recommendation_scores.items(), key=lambda x: x[1], reverse=True)
recommended_restaurant_ids = [item[0] for item in sorted_restaurants[:10]]
recommended_restaurants = Restaurant.objects.filter(id__in=recommended_restaurant_ids)
restaurant_data = []
for restaurant in recommended_restaurants:
restaurant_data.append({
'id': restaurant.id,
'name': restaurant.name,
'cuisine_type': restaurant.cuisine_type,
'address': restaurant.address,
'rating': restaurant.rating,
'average_price': restaurant.average_price,
'image_url': restaurant.image.url if restaurant.image else None,
'recommendation_score': recommendation_scores.get(restaurant.id, 0)
})
return JsonResponse({'success': True, 'restaurants': restaurant_data})
return JsonResponse({'success': False, 'message': 'Invalid request method'})
@csrf_exempt
@login_required
@transaction.atomic
def create_order(request):
spark = SparkSession.builder.appName("OrderProcessing").getOrCreate()
if request.method == 'POST':
data = json.loads(request.body)
user_id = request.user.id
restaurant_id = data.get('restaurant_id')
menu_items = data.get('menu_items', [])
delivery_address = data.get('delivery_address', '')
special_instructions = data.get('special_instructions', '')
if not restaurant_id or not menu_items:
return JsonResponse({'success': False, 'message': 'Restaurant and menu items are required'})
try:
restaurant = Restaurant.objects.get(id=restaurant_id, is_active=True)
except Restaurant.DoesNotExist:
return JsonResponse({'success': False, 'message': 'Restaurant not found'})
total_amount = 0
order_items = []
for item_data in menu_items:
menu_item_id = item_data.get('menu_item_id')
quantity = int(item_data.get('quantity', 1))
try:
menu_item = MenuItem.objects.get(id=menu_item_id, restaurant=restaurant, is_available=True)
except MenuItem.DoesNotExist:
return JsonResponse({'success': False, 'message': f'Menu item {menu_item_id} not found or unavailable'})
item_total = menu_item.price * quantity
total_amount += item_total
order_items.append({
'menu_item': menu_item,
'quantity': quantity,
'unit_price': menu_item.price,
'total_price': item_total
})
delivery_fee = 5.00 if total_amount < 30 else 0
final_amount = total_amount + delivery_fee
order = Order.objects.create(
user_id=user_id,
restaurant=restaurant,
total_amount=final_amount,
delivery_address=delivery_address,
special_instructions=special_instructions,
status='pending',
created_at=datetime.now()
)
for item in order_items:
from .models import OrderItem
OrderItem.objects.create(
order=order,
menu_item=item['menu_item'],
quantity=item['quantity'],
unit_price=item['unit_price'],
total_price=item['total_price']
)
restaurant.total_orders = Restaurant.objects.filter(id=restaurant_id).first().total_orders + 1
restaurant.save()
for item in order_items:
menu_item = item['menu_item']
menu_item.order_count = menu_item.order_count + item['quantity']
menu_item.save()
return JsonResponse({
'success': True,
'order_id': order.id,
'total_amount': float(final_amount),
'delivery_fee': float(delivery_fee),
'estimated_delivery_time': '30-45 minutes',
'message': 'Order created successfully'
})
return JsonResponse({'success': False, 'message': 'Invalid request method'})
@csrf_exempt
@login_required
def menu_management(request):
spark = SparkSession.builder.appName("MenuManagement").getOrCreate()
if request.method == 'GET':
restaurant_id = request.GET.get('restaurant_id')
category_filter = request.GET.get('category', '')
price_filter = request.GET.get('price_range', '')
availability_filter = request.GET.get('available_only', 'false').lower() == 'true'
if not restaurant_id:
return JsonResponse({'success': False, 'message': 'Restaurant ID is required'})
try:
restaurant = Restaurant.objects.get(id=restaurant_id)
except Restaurant.DoesNotExist:
return JsonResponse({'success': False, 'message': 'Restaurant not found'})
menu_query = MenuItem.objects.filter(restaurant=restaurant)
if availability_filter:
menu_query = menu_query.filter(is_available=True)
if category_filter:
menu_query = menu_query.filter(category__name__icontains=category_filter)
if price_filter:
if price_filter == 'low':
menu_query = menu_query.filter(price__lte=20)
elif price_filter == 'medium':
menu_query = menu_query.filter(price__gt=20, price__lte=50)
elif price_filter == 'high':
menu_query = menu_query.filter(price__gt=50)
menu_items = menu_query.order_by('category__name', 'name')
categories = {}
for item in menu_items:
category_name = item.category.name if item.category else 'Other'
if category_name not in categories:
categories[category_name] = []
item_data = {
'id': item.id,
'name': item.name,
'description': item.description,
'price': float(item.price),
'is_available': item.is_available,
'image_url': item.image.url if item.image else None,
'ingredients': item.ingredients.split(',') if item.ingredients else [],
'preparation_time': item.preparation_time,
'order_count': item.order_count
}
categories[category_name].append(item_data)
popular_items = MenuItem.objects.filter(restaurant=restaurant).order_by('-order_count')[:5]
popular_items_data = []
for item in popular_items:
popular_items_data.append({
'id': item.id,
'name': item.name,
'price': float(item.price),
'order_count': item.order_count
})
return JsonResponse({
'success': True,
'restaurant_name': restaurant.name,
'categories': categories,
'popular_items': popular_items_data,
'total_items': menu_items.count()
})
elif request.method == 'POST':
data = json.loads(request.body)
restaurant_id = data.get('restaurant_id')
item_name = data.get('name', '').strip()
item_description = data.get('description', '').strip()
item_price = data.get('price')
category_id = data.get('category_id')
ingredients = data.get('ingredients', '').strip()
preparation_time = data.get('preparation_time', 15)
if not all([restaurant_id, item_name, item_price, category_id]):
return JsonResponse({'success': False, 'message': 'Required fields are missing'})
try:
restaurant = Restaurant.objects.get(id=restaurant_id)
from .models import MenuCategory
category = MenuCategory.objects.get(id=category_id)
price_decimal = float(item_price)
except (Restaurant.DoesNotExist, MenuCategory.DoesNotExist, ValueError):
return JsonResponse({'success': False, 'message': 'Invalid restaurant, category, or price'})
if MenuItem.objects.filter(restaurant=restaurant, name=item_name).exists():
return JsonResponse({'success': False, 'message': 'Menu item with this name already exists'})
menu_item = MenuItem.objects.create(
restaurant=restaurant,
category=category,
name=item_name,
description=item_description,
price=price_decimal,
ingredients=ingredients,
preparation_time=preparation_time,
is_available=True,
order_count=0,
created_at=datetime.now()
)
return JsonResponse({
'success': True,
'menu_item_id': menu_item.id,
'message': 'Menu item created successfully'
})
return JsonResponse({'success': False, 'message': 'Invalid request method'})
六、Django餐厅推荐系统-文档展示
七、END
💕💕文末获取源码联系计算机编程果茶熊