计算机毕业设计:Python个性化新闻阅读与推荐平台 Django框架 协同过滤推荐算法 可视化 数据分析 大数据 大模型(建议收藏)✅
博主介绍:✌全网粉丝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、源码获取方式
🍅由于篇幅限制,获取完整文章或源码、代做项目的,查看我的【用户名】、【专栏名称】、【顶部选题链接】就可以找到我啦🍅
感兴趣的可以先收藏起来,点赞、关注不迷路,下方查看👇🏻获取联系方式👇🏻
AtomGit 是由开放原子开源基金会联合 CSDN 等生态伙伴共同推出的新一代开源与人工智能协作平台。平台坚持“开放、中立、公益”的理念,把代码托管、模型共享、数据集托管、智能体开发体验和算力服务整合在一起,为开发者提供从开发、训练到部署的一站式体验。
更多推荐


所有评论(0)