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

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

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

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

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

1、项目介绍

技术栈
Python语言、Django框架、协同过滤推荐算法、Echarts可视化工具、MySQL数据库、数据分析技术

功能模块
· 注册登录
· 系统首页
· 新闻详情页
· 猜你喜欢与新闻评论
· 个人中心
· 后台可视化分析
· 后台新闻数据管理
· 用户偏好管理

项目介绍
该新闻推荐系统是基于Python与Django框架构建的个性化新闻分发平台。系统整合协同过滤推荐算法实现精准内容推送,针对游客提供热门推荐,已登录用户则通过协同过滤算法获取契合偏好的新闻,冷启动或数据稀疏时自动切换热门推荐策略。前台功能涵盖用户注册登录、新闻搜索分类浏览、详情查看以及评分收藏点赞评论等完整互动链路,个人中心集中管理用户行为数据。后台采用Echarts可视化工具呈现用户偏好新闻Top20与新闻类型偏好分布,管理员可全面管控新闻类型与内容、用户账户权限及评分收藏评论等互动数据,同时支持用户偏好管理为算法优化提供支撑,实现从数据采集分析到个性化分发的运营闭环。

2、项目界面

(1)系统首页-----新闻分类、新闻预览、新闻推荐
该页面为个性化新闻推荐系统的新闻中心模块,提供新闻名称搜索功能,展示个性化推荐新闻与全部新闻内容,支持按新闻类型筛选,同时设有用户登录、注册及后台管理入口,实现新闻的推荐、浏览、筛选与系统访问管理功能。

在这里插入图片描述

(2)后台可视化分析----用户偏好新闻Top20、用户偏好新闻类型
该页面为个性化新闻推荐系统后台的可视化分析模块,通过饼图展示用户偏好新闻Top20,借助柱状图呈现用户偏好新闻类型分布,同时提供新闻类型管理、用户管理等多项后台管理入口,实现系统数据的可视化展示与综合管理功能。

在这里插入图片描述

(3)新闻详情页--------新闻详细内容、点赞、收藏、评分
该页面为个性化新闻推荐系统的新闻详情模块,展示新闻标题、类型、来源、发布时间等信息,呈现新闻正文及配图、视频内容,提供点赞、收藏、评分等互动功能,同时设有个人中心与后台管理入口,实现新闻完整信息展示与用户互动操作。

在这里插入图片描述

(4)新闻详情页--------新闻详细内容、点赞、收藏、评分
该页面为个性化新闻推荐系统的新闻详情模块,展示新闻标题、类型、来源、发布时间等信息,呈现新闻正文及配图内容,提供点赞、取消点赞、收藏、评分等互动操作,同时设有个人中心与后台管理入口,实现新闻信息展示与用户互动功能。

在这里插入图片描述

(5)猜你喜欢新闻、新闻评论
该页面展示了包含新闻资讯展示、新闻图片浏览、相关新闻推荐、评论互动输入及提交功能的模块,同时具备新闻内容详情呈现、新闻图片查看、相似新闻推荐、用户评论提交与交互的功能,实现了新闻内容的全方位展示与用户互动。

在这里插入图片描述

(6)个人中心—个人信息、我的评分、点赞、收藏、浏览历史
该页面为个性化新闻推荐系统的个人中心模块,展示用户的评分记录列表,包含新闻标题、评分、评分时间等信息,支持删除评分操作,同时设有我的收藏、我的点赞、我的评论、浏览历史等功能入口,实现用户互动数据的管理与查询。
在这里插入图片描述

(7)后台数据管理—新闻数据管理
该页面是个性化新闻推荐系统的后台管理模块,具备新闻信息的增删改查、搜索筛选功能,支持新闻类型分类管理,实现新闻数据的批量操作、分页展示及管理员对新闻资讯的统一管控管理。

在这里插入图片描述

(8)用户偏好管理
该页面为个性化新闻推荐系统后台的偏好管理模块,展示用户名、新闻名称及偏好值等信息,提供搜索筛选与删除操作功能,同时集成可视化分析、新闻管理、用户管理等多项后台管理入口,实现用户偏好数据的查询、管理与系统综合管控。
在这里插入图片描述

(9)注册登录
该页面为个性化新闻推荐系统的用户登录模块,提供用户名与密码输入框及登录按钮,同时设有前台首页跳转、用户注册入口与忘记密码功能,实现用户身份验证、账号注册引导及密码找回的系统访问管理功能。
在这里插入图片描述

3、项目说明

一、技术栈简要说明
本系统采用Python语言与Django框架构建后端服务体系,提供稳定高效的业务逻辑处理能力。前端页面融合Django模板引擎与Echarts可视化组件,实现动态数据渲染与交互式图表展示。核心推荐引擎基于协同过滤算法构建,针对不同用户状态实施差异化推荐策略。数据存储采用MySQL数据库,统一管理用户信息、新闻内容、用户行为及偏好数据。系统还整合数据分析技术,对用户评分、收藏、点赞等行为数据进行挖掘,为推荐算法优化与可视化展示提供数据支撑。

二、功能模块详细介绍

· 注册登录
该页面为系统的用户身份管理入口,提供完整的账户操作功能。界面包含用户名与密码输入框及登录按钮,同时设有前台首页跳转链接、用户注册入口与忘记密码功能。用户可通过注册创建新账号,登录后享受个性化推荐服务,忘记密码时可通过验证流程找回账户,实现安全便捷的访问控制。

· 系统首页
该页面为新闻推荐系统的核心浏览与推荐中枢,采用多区域布局设计。顶部提供新闻名称搜索框,方便用户快速定位目标内容。主体区域划分个性化推荐新闻版块与全部新闻列表,支持按新闻类型标签进行筛选过滤。页面侧边或顶部设有用户登录、注册及后台管理入口,实现新闻推荐、分类浏览、检索筛选与系统导航的集成管理。

· 新闻详情页
该页面为新闻内容的完整展示与用户互动核心区域。页面顶部展示新闻标题、类型、来源媒体及发布时间等元信息,主体区域呈现新闻正文及配图、视频内容。页面底部或侧边设置点赞、收藏、评分等互动功能按钮,用户可对新闻表达喜好程度并记录兴趣。页面同时设有个人中心与后台管理跳转入口,方便用户快速访问个人数据或管理员进入管控后台。

· 猜你喜欢与新闻评论
该页面为新闻详情页的延伸模块,聚焦相关内容推荐与社交互动。页面在新闻正文下方设置猜你喜欢版块,根据当前新闻类型推荐偏好值较高且用户未浏览过的新闻,实现上下文感知的个性化推荐。评论区域提供输入框与提交按钮,展示已有评论内容及发布信息,用户可发表观点并与其他读者互动,形成新闻阅读的社交闭环。

· 个人中心
该页面为用户行为数据的集中管理面板,默认展示用户的评分记录列表,包含新闻标题、评分分值、评分时间等信息,每条记录支持删除操作。页面侧边设有我的收藏、我的点赞、我的评论、浏览历史等功能入口,用户可分类查看并管理所有互动数据,实现对个人兴趣轨迹的回顾与维护。

· 后台可视化分析
该页面为管理员提供的数据洞察看板,采用Echarts图表组件实现运营数据可视化。页面通过饼图呈现用户偏好新闻Top20,展示偏好值最高的前二十条新闻及其占比;借助柱状图展示用户偏好新闻类型分布,分析不同类别新闻的平均偏好值差异。页面同时集成新闻管理、用户管理等后台入口,实现数据分析与业务管控的协同操作。

· 后台新闻数据管理
该页面为新闻内容的后台管控中心,提供完整的新闻信息维护功能。页面顶部设置搜索筛选框,支持按新闻标题或关键词快速检索。下方以表格形式展示新闻列表,包含标题、类型、发布时间、状态等字段,每条数据支持查看、编辑、删除操作。管理员可新增新闻、调整新闻类型、控制新闻展示状态,表格具备分页功能,实现对新闻资讯的统一管控。

· 用户偏好管理
该页面为推荐算法数据支撑模块,面向管理员展示用户偏好明细。页面以表格形式呈现用户名、新闻名称及偏好值等核心字段,提供搜索筛选与删除操作功能。管理员可查询特定用户的偏好记录,剔除异常或过时数据,确保偏好数据的准确性。页面同时集成可视化分析、新闻管理、用户管理等后台入口,实现偏好数据治理与系统综合管控的协同操作。

三、项目总结
本系统是基于Python与Django框架构建的个性化新闻推荐平台,以协同过滤算法为核心驱动用户兴趣分发。系统针对不同用户状态设计差异化推荐策略:游客获得热门新闻推荐,已登录用户享受基于协同过滤的个性化内容,冷启动或数据稀疏时自动切换热门推荐兜底。前台提供完整的用户账户管理、新闻浏览检索、详情查看以及评分收藏点赞评论互动链路,个人中心集中管理用户行为数据。后台通过Echarts可视化呈现用户偏好新闻Top20与新闻类型分布,管理员可全面管控新闻内容、用户权限及评分收藏评论等互动数据,并支持用户偏好管理为算法优化提供数据支撑。系统实现了从数据采集、行为分析到个性化分发的完整运营闭环,有效提升新闻阅读的用户体验与平台运营效率。

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、项目列表

在这里插入图片描述

在这里插入图片描述
在这里插入图片描述

在这里插入图片描述

在这里插入图片描述

6、源码获取方式

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

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

Logo

AtomGit 是由开放原子开源基金会联合 CSDN 等生态伙伴共同推出的新一代开源与人工智能协作平台。平台坚持“开放、中立、公益”的理念,把代码托管、模型共享、数据集托管、智能体开发体验和算力服务整合在一起,为开发者提供从开发、训练到部署的一站式体验。

更多推荐