博主介绍:✌全网粉丝50W+,前互联网大厂软件研发、集结硕博英豪成立工作室。专注于计算机相关专业项目实战8年之久,选择我们就是选择放心、选择安心毕业✌
> 🍅想要获取完整文章或者源码,或者代做,拉到文章底部即可与我联系了。🍅

点击查看作者主页,了解更多项目!

🍅感兴趣的可以先收藏起来,点赞、关注不迷路,大家在毕设选题,项目以及论文编写等相关问题都可以给我留言咨询,希望帮助同学们顺利毕业 。🍅

1、毕业设计:2026年计算机专业毕业设计选题汇总(建议收藏)✅

2、大数据毕业设计:2026年选题大全 深度学习 python语言 JAVA语言 hadoop和spark(建议收藏)✅

1、项目介绍

技术栈:
Python语言、Django框架、Echarts可视化、数据分析、数据库、基于用户协同过滤推荐算法、HTML

汽车租赁推荐平台项目介绍

本项目是一款基于Python+Django框架开发的汽车租赁推荐平台,融合Echarts可视化、数据分析及用户协同过滤推荐算法,实现汽车展示、租赁、个性化推荐及后台管理全流程功能。

平台前端以HTML构建友好交互界面,核心模块涵盖热门汽车首页、详情页(含评分、点赞、收藏、评论功能)、浏览量排行榜可视化、个人收藏与租赁订单管理、汽车推荐、充值中心及注册登录系统。后端依托Django实现数据交互与业务逻辑处理,通过数据库存储汽车信息、用户数据、订单记录等核心数据,借助数据分析模块更新热门榜单,利用协同过滤算法根据用户行为生成个性化汽车推荐。

此外,平台配备完善后台管理系统,支持管理员对汽车信息、用户数据、订单及用户评分进行全面管控。项目兼顾用户租赁需求与个性化体验,通过可视化图表直观呈现热门趋势,为用户决策提供支撑,同时以高效的后台管理保障平台稳定运行。

2、项目界面

(1)首页----热门汽车

在这里插入图片描述

(2)汽车详情页—详情信息、评分、点赞、收藏、评论

在这里插入图片描述

(3)浏览量排行榜可视化

在这里插入图片描述

(4)我的收藏

在这里插入图片描述

(5)我的租赁订单
在这里插入图片描述

(6)汽车推荐—协同过滤算法

在这里插入图片描述

(7)充值中心—租赁汽车
在这里插入图片描述
(8)注册登录
在这里插入图片描述
(9)后台数据管理

在这里插入图片描述

(10)用户评分管理

在这里插入图片描述

3、项目说明

项目功能模块介绍

1. 首页——热门汽车
  • 功能:展示当前热门的汽车信息,吸引用户关注。
  • 实现方式
    • 后端使用 Django 框架从数据库中获取热门汽车数据。
    • 前端使用 HTML 和 CSS 设计页面布局,展示汽车图片、名称、简介等信息。
    • 可以通过数据分析模块定期更新热门汽车列表。
2. 汽车详情页——详情信息、评分、点赞、收藏、评论
  • 功能:展示单个汽车的详细信息,包括配置、评分、用户评论等,并提供点赞、收藏等功能。
  • 实现方式
    • 后端通过 Django 提供 API 接口,从数据库中获取汽车的详细信息。
    • 前端使用 HTML 和 CSS 设计页面布局,展示丰富的汽车详情内容。
    • 用户可以对汽车进行评分、点赞、收藏和评论,这些操作通过前端发送请求到后端,后端更新数据库并返回结果。
3. 浏览量排行榜可视化
  • 功能:通过图表展示汽车的浏览量排行榜,帮助用户了解热门车型。
  • 实现方式
    • 使用 Django 后端从数据库中获取浏览量数据。
    • 前端使用 Echarts 可视化库生成柱状图或折线图,展示浏览量排行榜。
    • 数据通过 Django 的视图传递到前端模板。
4. 我的收藏
  • 功能:用户可以查看自己收藏的汽车列表。
  • 实现方式
    • 后端通过 Django 提供用户收藏数据的接口。
    • 前端使用 HTML 和 CSS 展示收藏列表,用户可以对收藏的汽车进行管理(如取消收藏)。
5. 我的租赁订单
  • 功能:用户可以查看自己的租赁订单历史和当前订单状态。
  • 实现方式
    • 后端通过 Django 提供订单数据的接口。
    • 前端使用 HTML 和 CSS 展示订单列表,用户可以查看详情或取消订单。
6. 汽车推荐——协同过滤算法
  • 功能:根据用户的浏览历史和评分行为,推荐相关的汽车。
  • 实现方式
    • 后端使用 Python 实现基于用户协同过滤的推荐算法。
    • 用户的行为数据(如浏览、评分)被记录在数据库中,算法根据这些数据生成推荐列表。
    • 前端通过 Django 模板展示推荐结果。
7. 充值中心——租赁汽车
  • 功能:用户可以在此模块进行充值,以便租赁汽车。
  • 实现方式
    • 后端通过 Django 提供充值接口,支持多种支付方式。
    • 前端使用 HTML 和 CSS 设计充值页面,用户可以选择充值金额并完成支付。
8. 注册登录
  • 功能:用户可以通过此模块注册新账号或登录已有账号。
  • 实现方式
    • 后端通过 Django 提供用户注册和登录的接口,支持邮箱或手机号注册。
    • 前端使用 HTML 和 CSS 设计注册登录页面,用户输入信息后通过表单提交到后端进行验证。
9. 后台数据管理
  • 功能:管理员可以在此模块管理网站的数据,包括汽车信息、用户数据、订单数据等。
  • 实现方式
    • 后端通过 Django 提供管理接口,管理员可以通过网页操作数据库。
    • 前端使用 HTML 和 CSS 设计管理界面,方便管理员进行数据操作。
10. 用户评分管理
  • 功能:管理员可以在此模块管理用户的评分数据,包括查看评分、删除不合理评分等。
  • 实现方式
    • 后端通过 Django 提供评分管理接口。
    • 前端使用 HTML 和 CSS 设计评分管理界面,管理员可以对评分数据进行操作。

4、核心代码



def add_order(request):
    # 用户预定车辆
    user_id = request.session.get('user_id')
    car_id = request.POST.get('car_id')
    car = CarModel.objects.get(id=car_id)
    user = UserInfoModel.objects.get(id=user_id)
    if user.money < car.price:
        return JsonResponse({'code': 400, 'message': '您的账户余额不足,请充值'})
    if car.number == 0:
        return JsonResponse({'code': 400, 'message': '该车辆暂无库存'})
    OrderModel.objects.create(
        user_id=user_id,
        car_id=car_id,
        price=car.price
    )
    user.money -= car.price
    user.save()
    car.number -= 1
    car.save()
    return JsonResponse({'code': 200})


def add_collect(request):
    # 添加收藏
    user_id = request.session.get('user_id')
    car_id = request.POST.get('car_id')
    flag = CollectModel.objects.filter(user_id=user_id, item_id=car_id).first()
    if flag:
        return JsonResponse({'code': 400, 'message': '该车辆已收藏,请勿重复添加'})
    CollectModel.objects.create(
        user_id=user_id,
        item_id=car_id
    )
    return JsonResponse({'code': 200})


def input_score(request):
    # 用户对汽车进行评分
    user_id = request.session.get('user_id')
    if not user_id:
        return JsonResponse({'code': 400, 'message': '请先登录'})
    score = int(request.POST.get('score'))
    car_id = request.POST.get('car_id')
    MarkModel.objects.create(
        item_id=car_id,
        score=score,
        user_id=user_id
    )
    return JsonResponse({'code': 200})


def add_comment(request):
    # 添加评论
    user_id = request.session.get('user_id')
    if not user_id:
        return JsonResponse({'code': 400, 'message': '请先登录'})
    content = request.POST.get('content')
    car_id = request.POST.get('car_id')
    if not content:
        return JsonResponse({'code': 400, 'message': '内容不能为空'})

    CommentModel.objects.create(
        user_id=user_id,
        content=content,
        car_id=car_id
    )
    return JsonResponse({'code': 200})


def my_info(request):
    user_id = request.session.get('user_id')
    if request.method == 'GET':
        # 个人信息界面
        info = UserInfoModel.objects.filter(
            id=user_id
        ).first()
        context = {
            'info': info
        }
        return render(request, 'my_info.html', context=context)
    else:
        # 更新个人信息
        username = request.POST.get('username')
        password = request.POST.get('password')
        phone = request.POST.get('phone')
        if not (username or password or phone):
            return JsonResponse({'code': 400, 'message': '参数不能为空'})

        UserInfoModel.objects.filter(
            id=user_id
        ).update(
            username=username,
            password=password,
            phone=phone,
        )
        return JsonResponse({'code': 200})


def top_up(request):
    user_id = request.session.get('user_id')
    user = UserInfoModel.objects.get(id=user_id)
    if request.method == 'GET':
        # 显示充值界面
        context = {
            'user': user
        }
        return render(request, 'top_up.html', context=context)
    else:
        money = request.POST.get('money')
        if not money:
            return JsonResponse({'code': 400, 'message': '充值金额不能为空'})
        user.money = user.money + int(money)
        user.save()
        return JsonResponse({'code': 200})


def calculate_cosine_similarity(user_ratings1, user_ratings2):
    # 将用户1的车辆评分存入字典,键为车辆ID,值为评分
    item_ratings1 = {rating.item_id: rating.score for rating in user_ratings1}
    # 将用户2的车辆评分存入字典,键为车辆ID,值为评分
    item_ratings2 = {rating.item_id: rating.score for rating in user_ratings2}

    # 找出两个用户共同评价过的车辆
    common_items = set(item_ratings1.keys()) & set(item_ratings2.keys())

    if len(common_items) == 0:
        return 0.0  # 无共同评价的车辆,相似度为0

    # 提取共同评价车辆的评分,存入NumPy数组
    user1_scores = np.array([item_ratings1[item_id] for item_id in common_items])
    user2_scores = np.array([item_ratings2[item_id] for item_id in common_items])

    # 计算余弦相似度
    cosine_similarity = np.dot(user1_scores, user2_scores) / (
            np.linalg.norm(user1_scores) * np.linalg.norm(user2_scores))
    return cosine_similarity


def user_based_recommendation(request, user_id):
    try:
        # 获取目标用户对象
        target_user = UserInfoModel.objects.get(id=user_id)
    except UserInfoModel.DoesNotExist:
        return JsonResponse({'code': 400, 'message': '该用户不存在'})

    # 获取目标用户的车辆评分记录
    target_user_ratings = MarkModel.objects.filter(user=target_user)

    # 用于存储推荐车辆的字典
    recommended_items = {}

    # 遍历除目标用户外的所有其他用户
    for other_user in UserInfoModel.objects.exclude(pk=user_id):
        # 获取其他用户的车辆评分记录
        other_user_ratings = MarkModel.objects.filter(user=other_user)

        # 计算目标用户与其他用户的相似度
        similarity = calculate_cosine_similarity(target_user_ratings, other_user_ratings)

        if similarity > 0:
            # 遍历其他用户评价的车辆
            for item_rating in other_user_ratings:
                # 仅考虑目标用户未评价过的车辆
                if item_rating.item not in target_user_ratings.values_list('item', flat=True):
                    if item_rating.item.id in recommended_items:
                        # 累积相似度加权的评分和相似度
                        recommended_items[item_rating.item.id]['score'] += similarity * item_rating.score
                        recommended_items[item_rating.item.id]['similarity'] += similarity
                    else:
                        # 创建推荐车辆的记录
                        recommended_items[item_rating.item.id] = {'score': similarity * item_rating.score,
                                                                  'similarity': similarity}

    # 将推荐车辆按照加权评分排序
    sorted_recommended_items = sorted(recommended_items.items(), key=lambda x: x[1]['score'], reverse=True)

    # 获取排名靠前的推荐车辆的ID
    top_recommended_items = [item_id for item_id, _ in sorted_recommended_items[:5]]

    # 构建响应数据
    response_data = []
    for item_id in top_recommended_items:
        item = CarModel.objects.get(pk=item_id)
        similarity = recommended_items[item_id]['similarity']
        response_data.append({
            'name': item.name,
            'id': item.id,
            'image': item.image,
            'similarity': similarity,
        })
    context = {
        'response_data': response_data
    }
    return render(request, 'item_recommend.html', context=context)


def view_count(request):
    # 浏览量
    if request.method == 'GET':
        return render(request, 'view_count.html')
    else:
        cars = CarModel.objects.all().order_by('-view_number')[:10]
        name_list = []
        count_list = []
        for car in cars:
            name_list.append(car.name)
            count_list.append(car.view_number)
        return JsonResponse({'code': 200, 'name_list': name_list, 'count_list': count_list})

5、源码获取方式

biyesheji0005  或  biyesheji0001   绿泡泡

🍅由于篇幅限制,获取完整文章或源码、代做项目的,查看我的【用户名】、【专栏名称】、【顶部选题链接】就可以找到我啦🍅

感兴趣的可以先收藏起来,点赞、关注不迷路,下方查看👇🏻获取联系方式👇🏻

Logo

有“AI”的1024 = 2048,欢迎大家加入2048 AI社区

更多推荐