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

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

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

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

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

1、项目介绍

技术栈:
Python语言、Spark技术、Django框架、vue框架、数据库、协同过滤推荐算法、HTML

2、项目界面

(1)系统首页

在这里插入图片描述

(2)图书详情页
在这里插入图片描述

(3)推荐页面
在这里插入图片描述

(4)图书列表

在这里插入图片描述

(5)图书分类
在这里插入图片描述

(6)后台管理
在这里插入图片描述

(7)注册登录

在这里插入图片描述

3、项目说明

前台用户通过登陆注册后进入系统
管理员可在后台管理所有抓取到的图书数据
首页分为左右两侧,右侧展示所有图书的分类,比如文学、流行、科技、经管、文化、生活等大类,大类下亦有许多小类;左侧展示基于用户的协同过滤推荐算法给用户推荐的10个图书数据,下方是根据图书评分推荐的高分书榜
图书查询模块,可以根据书名、书籍分类、作者和ISBN等信息筛选图书,底部带有一个分页器,以10本书籍信息为一页实现分页查询,降低后端数据库的压力
图书分类模块,展示了所有图书的大类小类,用户可以通过点击某一分类,实现快速查找合适自己口味的图书信息
当用户访问某一书籍详情时,页面展示了图书的封面、作者、译者、出版社、出品方、类型、出版年、页数、装帧类型、ISBN等基本信息,还展示了图书的内容简介以及大纲等;在此页面的底部最后部分,我们向用户推荐了5本基于物品的协同过滤算法推荐的图书结果

4、核心代码

from .models import *
from django.http.response import HttpResponse
from django.shortcuts import render
from django.http import JsonResponse
from datetime import datetime, time
from django.core.paginator import Paginator
from django.db.models import Q
from app.apps import AppConfig


def to_dict(l, exclude=tuple()):
    # 将数据库模型 变为 字典数据 的工具类函数
    def transform(v):
        if isinstance(v, datetime):
            return v.strftime("%Y-%m-%d %H:%M:%S")
        return v

    def _todict(obj):
        j = {
            k: transform(v)
            for k, v in obj.__dict__.items()
            if not k.startswith("_") and k not in exclude
        }
        return j

    return [_todict(i) for i in l]


def get_book_list(request):
    body = request.json
    pagesize = body.get("pagesize", 10)
    page = body.get("page", 1)
    exclude_fields = ["pagesize", "page", "total", "keyword"]
    query = {k: v for k, v in body.items() if k not in exclude_fields and v}
    q = Q(**query)
    if body.get("keyword"):
        q = q & (
            Q(title__icontains=body["keyword"])
            | Q(author__icontains=body["keyword"])
            | Q(isbn__icontains=body["keyword"])
        )
    objs = Book.objects.filter(q).order_by("id")
    paginator = Paginator(objs, pagesize)
    pg = paginator.page(page)
    result = list(pg.object_list)
    result = to_dict(result)
    return JsonResponse({"total": paginator.count, "records": result})


def get_content_recommend_books(request):
    # 基于物品推荐
    body = request.json
    id = body.get("id")
    o = Book.objects.get(pk=id)
    topK = 5
    try:
        ids = AppConfig.recommendProductsForProduct(o.id, topK)
        result = Book.objects.filter(id__in=ids).order_by("?")
    except:
        result = Book.objects.filter(cat2=o.cat2).order_by("?")[:topK]

    return JsonResponse(to_dict(result), safe=False)


def get_user_recommend_books(request):
    # 基于用户推荐
    topK = 10
    try:
        ids = AppConfig.recommendProductsForUser(request.user.id, topK)
        result = Book.objects.filter(id__in=ids).order_by("?")
    except:
        result = Book.objects.order_by("?")[:topK]
    return JsonResponse(to_dict(result), safe=False)


def get_high_score_books(request):
    # 高分榜
    result = Book.objects.filter(score__gt=8).order_by("?")[:10]
    return JsonResponse(to_dict(result), safe=False)


def get_book_detail(request):
    body = request.json
    id = body.get("id")
    o = Book.objects.get(pk=id)
    History.objects.create(user=request.user, book=o)
    return JsonResponse(to_dict([o])[0])


def get_book_category(request):
    result = []
    for (cat1,) in Book.objects.values_list("cat1").distinct():
        item = dict(value=cat1, label=cat1, children=[])
        result.append(item)
        for (cat2,) in Book.objects.filter(cat1=cat1).values_list("cat2").distinct():
            item2 = dict(value=cat2, label=cat2)
            item["children"].append(item2)
    return JsonResponse(result, safe=False)

5、源码获取方式

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

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

Logo

欢迎加入DeepSeek 技术社区。在这里,你可以找到志同道合的朋友,共同探索AI技术的奥秘。

更多推荐