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

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

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

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

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

1、项目介绍

技术栈:
Python语言、Django框架、协同过滤推荐算法、Echarts可视化、数据分析、排行榜、MySQL数据库
前台用户包含:登录、注册、忘记密码、退出登录、搜索新闻、浏览新闻、修改信息、密码修改、用户评分、用户收藏、用户评论、用户点赞、个性化推荐等功能;
后台管理员包含:可视化数据分析、新闻类型管理、新闻管理、用户管理、用户评分管理、用户收藏管理、用户评论管理、用户点赞管理、用户浏览管理、用户偏好管理、管理员管理等。
个性化推荐:
游客(用户未登录):热门推荐(推荐用户偏好较高的新闻);
用户(用户已登录):基于用户的协同过滤推荐算法,根据用户偏好数据;
如果基于用户的协同过滤推荐算法没有推荐结果(冷启动和数据稀疏性问题造成没有推荐结果),采用热门推荐(推荐用户偏好较高的新闻)。
猜你喜欢:查询当前新闻类型下,偏好值较高的新闻,同时排除登录用户已有偏好的新闻
使用echarts.js组件实现柱状图和饼状图可视化效果。
用户偏好新闻Top20:平均偏好值较高的前20个新闻。
用户偏好新闻类型:有用户偏好的新闻中,新闻类型的平均偏好值。

2、项目界面

(1)系统首页-----新闻分类、新闻预览、新闻推荐

在这里插入图片描述

(2)后台可视化分析----用户偏好新闻Top20、用户偏好新闻类型

在这里插入图片描述

(3)新闻详情页--------新闻详细内容、点赞、收藏、评分

在这里插入图片描述

(4)新闻详情页--------新闻详细内容、点赞、收藏、评分

在这里插入图片描述
(5)猜你喜欢新闻、新闻评论

在这里插入图片描述
(6)个人中心—个人信息、我的评分、点赞、收藏、浏览历史

在这里插入图片描述

(7)后台数据管理—新闻数据管理

在这里插入图片描述

(8)用户偏好管理

在这里插入图片描述

(9)注册登录
在这里插入图片描述

3、项目说明

系统功能模块介绍

1. 用户前台功能模块
  1. 用户账户管理

    • 登录/注册:用户可以通过注册账号或登录已有账号进入系统。
    • 忘记密码:提供找回密码功能,用户可通过绑定的邮箱或手机验证找回密码。
    • 退出登录:用户可安全退出登录状态。
    • 修改信息:用户可以修改个人信息,如头像、昵称、联系方式等。
    • 密码修改:用户可以修改登录密码,增强账户安全性。
  2. 新闻浏览与交互

    • 新闻分类浏览:用户可以根据新闻类型(如时政、娱乐、体育等)浏览新闻。
    • 新闻搜索:提供搜索功能,用户可以通过关键词搜索感兴趣的新闻。
    • 新闻详情页:展示新闻的详细内容,包括标题、正文、发布时间等,并提供点赞、收藏、评分和评论功能。
    • 用户评分:用户可以对新闻进行评分,系统会根据评分数据进行分析和推荐。
    • 用户收藏:用户可以收藏感兴趣的新闻,方便后续查看。
    • 用户评论:用户可以在新闻详情页发表评论,与其他用户互动。
    • 用户点赞:用户可以对新闻或评论进行点赞,表达自己的喜好。
  3. 个性化推荐

    • 热门推荐:针对未登录的游客,推荐热门新闻。
    • 协同过滤推荐:针对已登录用户,基于用户的历史行为和偏好数据,通过协同过滤算法进行个性化推荐。
    • 猜你喜欢:根据用户当前浏览的新闻类型,推荐偏好值较高的新闻,并排除用户已浏览或评分的新闻。
  4. 个人中心

    • 个人信息管理:展示和管理用户的基本信息。
    • 我的评分:查看用户对新闻的评分记录。
    • 我的点赞:查看用户点赞的新闻列表。
    • 我的收藏:查看用户收藏的新闻列表。
    • 浏览历史:记录用户浏览过的新闻,方便用户回顾。
2. 后台管理员功能模块
  1. 数据可视化分析

    • 用户偏好新闻Top20:通过柱状图或饼状图展示用户偏好值最高的前20条新闻。
    • 用户偏好新闻类型:分析用户偏好的新闻类型,展示各类型新闻的平均偏好值。
  2. 新闻管理

    • 新闻类型管理:管理员可以添加、修改或删除新闻类型。
    • 新闻数据管理:管理员可以发布、编辑、删除新闻,管理新闻的状态(如是否显示、是否置顶等)。
  3. 用户管理

    • 用户信息管理:管理员可以查看、编辑用户信息,包括用户的基本信息和权限设置。
    • 用户行为管理:管理员可以查看用户的浏览历史、评分记录、收藏记录、评论记录和点赞记录。
    • 用户偏好管理:分析和管理用户的偏好数据,为个性化推荐提供支持。
  4. 管理员管理

    • 管理员账号管理:添加、删除或修改管理员账号,设置管理员权限。
3. 技术实现
  • 技术栈
    • 后端:Python语言、Django框架、MySQL数据库。
    • 推荐算法:基于协同过滤的推荐算法。
    • 前端可视化:使用Echarts.js组件实现数据可视化(柱状图、饼状图等)。
    • 数据分析:对用户行为数据和新闻数据进行分析,支持个性化推荐和可视化展示。

4、核心代码

# 前台用户首页视图
from django.core.paginator import Paginator
from django.shortcuts import render
from app_news.models import News
from app_newstype.models import Newstype
from app_tools.rec.collaborative_filtering_based_user import cfRecommend
from app_tools.tools import ConstantTools
from app_userpreference.models import Userpreference


# 前台用户首页视图函数
def index(request):
    # 全部新闻,关联新闻类型分页查询所有新闻数据,新闻id降序(添加时间降序)
    newss = News.objects.values("id", "newsname", "imagepic", "sources", "newstypeid__newstypename").order_by("-id")
    # 分页查询
    paginator = Paginator(newss, ConstantTools.page_size_user)
    # 查询第一页
    pageBean = paginator.page(1)
    # 查询所有新闻类型:id降序排列
    newstypes = Newstype.objects.all().order_by("-id")
    print("***推荐新闻开始***")
    # 定义推荐的新闻列表变量
    recommendNewss = None
    # 判断用户是否登录
    if request.session.get(ConstantTools.session_user, None):
        # 获取登录用户id
        userid = request.session.get(ConstantTools.session_user).get("id")
        # 推荐新闻
        recommendNewss = doRecommend(userid)
    else:
        print("用户未登录,采用热门推荐!")
        recommendNewss = hotRecommend()
    print("***推荐新闻结束***")
    # 返回到页面的数据
    return_data = {
        "page": 1,
        "pageBean": pageBean,
        "newstypes": newstypes,
        "recommendNewss": recommendNewss,
    }
    return render(request, "index.html", context=return_data)


# 推荐新闻:游客(用户未登录):
# 热门推荐(推荐用户偏好较高的新闻);
# 用户(用户已登录):基于用户的协同过滤推荐算法,根据用户偏好数据,
# 如果基于用户的协同过滤推荐算法没有推荐结果(冷启动和数据稀疏性问题造成没有推荐结果),采用热门推荐(推荐用户偏好较高的新闻)。
def doRecommend(userid):
    # 查询所有用户偏好数据
    userpreferences = Userpreference.objects.all()
    # 调用基于用户的协同过滤推荐算法
    recommendNewsidList = cfRecommend(userid, userpreferences)
    # 判断是否有推荐结果
    if recommendNewsidList and len(recommendNewsidList) > 0:
        # 根据预测偏好值降序查询推荐的新闻
        # 将推荐的新闻id列表转新闻id字符串(以逗号分割),新闻id列表中的id是int类型,故需先使用内置函数map将int转str
        newsids = ",".join(map(str, recommendNewsidList))
        # 根据预测偏好值降序查询新闻列表sql,关联新闻类型
        sql = "select m.*, t.newstypename from table_news m " \
              "left join table_newstype t on t.id = m.newstypeid " \
              "where m.id in (%s) order by field(m.id, %s)" % (newsids, newsids)
        print(sql)
        # 返回查询的结果
        return News.objects.raw(sql)
    else:
        print("基于用户的协同过滤推荐算法没有推荐结果,采用热门推荐!")
        # 热门推荐(推荐用户偏好较高的新闻),同时排除当前登录用户已有偏好的新闻
        recommendNewss = hotRecommend(userid=userid)
    return recommendNewss


# 热门推荐:推荐用户偏好较高的新闻,同时排除当前登录用户已有偏好的新闻
# 参数userid:当前登录用户id,
# 如果参数为空,即查询所有用户偏好较高的新闻;
# 如果参数不为空,排除登录用户已有偏好的新闻。
def hotRecommend(userid=None):
    # sql语句
    sql = "select m.*, t.newstypename, " \
          "round(avg(w.preference), 1) as avgpreference, count(m.id) as preferencecount " \
          "from table_news m " \
          "left join table_newstype t on t.id = m.newstypeid " \
          "left join table_userpreference w on w.newsid = m.id " \
          "where 1 = 1 "
    # 判断用户是否登录
    if userid:  # 登录用户
        # 排除登录用户已有偏好的新闻
        sql += "and m.id not in ( select newsid from table_userpreference where userid = %s ) " % userid
    sql += "group by m.id order by avgpreference desc, preferencecount desc limit 0, 10 "
    print(sql)
    # 查询
    return News.objects.raw(sql)

5、源码获取方式

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

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

Logo

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

更多推荐