1980python个性化电影推荐管理系统mysql数据库Django结构layUI布局elasticsearch存储计算机软件工程网页


一、源码特点
    python Django个性化电影推荐管理系统是一套完善的web设计系统mysql数据库 利用elasticsearch存储浏览数据 ,对理解python编程开发语言有帮助,系统具有完整的源代码和数据库,系统主要采用B/S模式开发。
    开发环境pycharm
    mysql 5.0 到5.5
    elasticsearch
    依赖包 Django 2.2.16
        pymysql 0.8.0
    知识点是 python 爬取豆瓣   elasticsearch存储,协同过滤推荐


二、功能介绍
前台功能
1)首页浏览
2)top10电影信息展现
3)电影访问、评价。系统通过协同过滤算法,结合用户浏览记录,访问A电影的时,系统根据计算矩阵算法最有可能访问的电影,推荐给用户,增加用户访问的粘性,以达到个性化推荐的目的
4)电影评价,查看公告等
后台功能:
(1)管理员管理:对管理员信息进行添加、删除、修改和查看
(2)用户管理:对用户信息进行添加、删除、修改和查看
(3)公告管理:对公告信息进行添加、删除、修改和查看
(4)电影类型管理:对电影类型信息进行添加、删除、修改和查看
(5)电影管理:对电影信息进行添加、删除、修改和查看、一次性爬取豆瓣电影信息,通过python爬取豆瓣电影信息,存储到数据库中,图片文件存在服务器中,当用户访问浏览电影信息时,
(6)电影浏览管理:对电影浏览信息进行删除、修改和查看
(7)电影评价管理:对电影评价信息进行删除、修改和查看
(8)图形化信息统计
(9)用户登录、退出、个人信息修改

models设计

#管理员表
class gly(models.Model):yhm=models.CharField(max_length=40)#用户名mm=models.CharField(max_length=40)#密码xm=models.CharField(max_length=40)#姓名#用户表
class yonghu(models.Model):yhm=models.CharField(max_length=40)#用户名mm=models.CharField(max_length=40)#密码nc=models.CharField(max_length=40)#昵称nl=models.CharField(max_length=40)#年龄xb=models.CharField(max_length=40)#性别dz=models.CharField(max_length=40)#地址yx=models.CharField(max_length=40)#邮箱#公告表
class gonggao(models.Model):bt=models.CharField(max_length=40)#标题nr=models.CharField(max_length=4000)#内容fbsj=models.CharField(max_length=40)#发布时间#电影类型表
class dylx(models.Model):lx=models.CharField(max_length=40)#类型#电影表
class dianying(models.Model):dymc=models.CharField(max_length=40)#电影名称lx=models.CharField(max_length=400)#类型jj=models.CharField(max_length=4000)#简介tp=models.CharField(max_length=400)#图片dy=models.CharField(max_length=400)#导演zy=models.CharField(max_length=400)#主演nf=models.CharField(max_length=40)#年份gj=models.CharField(max_length=400)#国家pf=models.CharField(max_length=40)#评分ll = models.IntegerField(default=0) #浏览量tj = models.CharField(max_length=40, default='否')#电影浏览表
class dyll(models.Model):dy=models.CharField(max_length=40)#电影yh=models.CharField(max_length=40)#用户sj=models.CharField(max_length=40)#时间#电影评价表
class dypj(models.Model):dy=models.CharField(max_length=40)#电影pj=models.CharField(max_length=4000)#评价yh=models.CharField(max_length=40)#用户pjsj=models.CharField(max_length=40)#评价时间

代码实现

#登录首页
def login(request):if request.method == 'GET':return render(request, "login.html")if request.method == 'POST':yhm = request.POST.get('yhm')  # 用户名mm = request.POST.get('mm')  # 密码qx = request.POST.get('qx')  # 密码if qx == "用户":res = models.yonghu.objects.filter(yhm=yhm, mm=mm).count()if qx == "管理员":res = models.gly.objects.filter(yhm=yhm, mm=mm).count()if res == 0:messages.success(request, "操作失败、用户名和密码不匹配")return redirect('/login')elif res > 0:if qx == "用户":obj = models.yonghu.objects.filter(yhm=yhm, mm=mm).first()request.session['id'] = obj.idif qx == "管理员":obj = models.gly.objects.filter(yhm=yhm, mm=mm).first()request.session['id'] = obj.idrequest.session['yhm'] = yhmrequest.session['mm'] = mmrequest.session['qx'] = qxreturn redirect('/main')#系统首页
def main(request):return render(request, "main.html")#添加管理员
def glyadd(request):if request.method == 'GET':return render(request, "gly/glyadd.html")if request.method == 'POST':yhm = request.POST.get('yhm') #用户名mm = request.POST.get('mm') #密码xm = request.POST.get('xm') #姓名res = models.gly.objects.filter(yhm=yhm).count();if res > 0:messages.success(request, "操作失败、用户名重复")elif res == 0:messages.success(request, "操作成功")models.gly.objects.create(yhm=yhm,mm=mm,xm=xm, )#return render(request, "gly/glyadd.html")return redirect('/gly/glyadd')#管理员列表
def glylist(request):print(request.method)global listif request.method == 'GET':yhm= request.GET.get('yhm')#用户名if not yhm:yhm = ""print(yhm)list = models.gly.objects.filter(yhm__icontains=yhm).all()  # 获取gly表所有的数据return render(request, "gly/glylist.html", {'list': list})
#修改管理员
def glymodify(request):# 获取要修改的数据的idif request.method == 'GET':id = request.GET.get('id')obj = models.gly.objects.get(id=id)return render(request, 'gly/glymodify.html', {'obj': obj})id = request.POST.get('id')yhm = request.POST.get('yhm') #用户名mm = request.POST.get('mm') #密码xm = request.POST.get('xm') #姓名messages.success(request, "操作成功")ret = models.gly.objects.filter(id=id).update(yhm=yhm,mm=mm,xm=xm, )return redirect('/gly/glylist')def glymod(request):# 获取要修改的数据的idif request.method == 'GET':id = request.session.get('id')obj = models.gly.objects.get(id=id)return render(request, 'gly/modify.html', {'obj': obj})id = request.POST.get('id')yhm = request.POST.get('yhm') #用户名mm = request.POST.get('mm') #密码xm = request.POST.get('xm') #姓名messages.success(request, "操作成功")ret = models.gly.objects.filter(id=id).update(yhm=yhm,mm=mm,xm=xm, )return redirect('/gly/glymod')# 管理员详情
def glydetail(request):# 获取要修改的数据的idid = request.GET.get('id')obj = models.gly.objects.get(id=id)return render(request, 'gly/glydetail.html', {'obj': obj})#管理员删除
def glydelete(request):# 获取要删除数据的idid = request.GET.get('id')# 查询数据库是否存在obj = models.gly.objects.get(id=id)if obj:# 在数据库中删除obj.delete()messages.success(request, "操作成功")return redirect('/gly/glylist')return HttpResponse("删除失败")#添加用户
def yonghuadd(request):if request.method == 'GET':return render(request, "yonghu/yonghuadd.html")if request.method == 'POST':yhm = request.POST.get('yhm') #用户名mm = request.POST.get('mm') #密码nc = request.POST.get('nc') #昵称nl = request.POST.get('nl') #年龄xb = request.POST.get('xb') #性别dz = request.POST.get('dz') #地址yx = request.POST.get('yx') #邮箱res = models.yonghu.objects.filter(yhm=yhm).count();if res > 0:messages.success(request, "操作失败、用户名重复")elif res == 0:messages.success(request, "操作成功")models.yonghu.objects.create(yhm=yhm,mm=mm,nc=nc,nl=nl,xb=xb,dz=dz,yx=yx, )#return render(request, "yonghu/yonghuadd.html")return redirect('/yonghu/yonghuadd')#用户列表
def yonghulist(request):print(request.method)global listif request.method == 'GET':yhm= request.GET.get('yhm')#用户名if not yhm:yhm = ""print(yhm)list = models.yonghu.objects.filter(yhm__icontains=yhm).all()  # 获取yonghu表所有的数据return render(request, "yonghu/yonghulist.html", {'list': list})
#修改用户
def yonghumodify(request):# 获取要修改的数据的idif request.method == 'GET':id = request.GET.get('id')obj = models.yonghu.objects.get(id=id)return render(request, 'yonghu/yonghumodify.html', {'obj': obj})id = request.POST.get('id')yhm = request.POST.get('yhm') #用户名mm = request.POST.get('mm') #密码nc = request.POST.get('nc') #昵称nl = request.POST.get('nl') #年龄xb = request.POST.get('xb') #性别dz = request.POST.get('dz') #地址yx = request.POST.get('yx') #邮箱messages.success(request, "操作成功")ret = models.yonghu.objects.filter(id=id).update(yhm=yhm,mm=mm,nc=nc,nl=nl,xb=xb,dz=dz,yx=yx, )return redirect('/yonghu/yonghulist')
#修改用户
#修改用户
def yhmodify(request):# 获取要修改的数据的idif request.method == 'GET':id = request.session.get('id')obj = models.yonghu.objects.get(id=id)return render(request, 'qt/yonghumodify.html', {'obj': obj})id = request.POST.get('id')yhm = request.POST.get('yhm') #用户名mm = request.POST.get('mm') #密码nc = request.POST.get('nc') #昵称nl = request.POST.get('nl') #年龄xb = request.POST.get('xb') #性别dz = request.POST.get('dz') #地址yx = request.POST.get('yx') #邮箱messages.success(request, "操作成功")ret = models.yonghu.objects.filter(id=id).update(yhm=yhm,mm=mm,nc=nc,nl=nl,xb=xb,dz=dz,yx=yx, )return redirect('/yonghu/yhmodify')
# 用户详情
def yonghudetail(request):# 获取要修改的数据的idid = request.GET.get('id')obj = models.yonghu.objects.get(id=id)return render(request, 'yonghu/yonghudetail.html', {'obj': obj})


三、注意事项
    1、管理员账号:admin密码:admin 数据库配置文件app/settings.py  更改数据库配置
    2、开发环境pycharm,数据库为mysql5.0~5.5,使用python语言开发。
    3、数据库文件名是pythonfilm.sql ,系统名称pythonfilm
    4、系统首页地址:http://127.0.0.1:8080/qt/index

四系统实现

需要源码 其他的定制服务  下方联系卡片↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓ 或者私信作者

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/pingmian/30568.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

27 map和set封装

map和set可以采用两套红黑树实现,也可以用同一个红黑树,就需要对前面的结构进行修改 迭代器的好处是可以方便遍历,是数据结构的底层实现与用户透明。如果想要给红黑树增加迭代器,需要考虑以前问题: begin()和end() s…

【PB案例学习笔记】-23创建一个窗口菜单

写在前面 这是PB案例学习笔记系列文章的第23篇,该系列文章适合具有一定PB基础的读者。 通过一个个由浅入深的编程实战案例学习,提高编程技巧,以保证小伙伴们能应付公司的各种开发需求。 文章中设计到的源码,小凡都上传到了gite…

前端根据环境变量配置网页的title和favicon

前端根据环境变量配置网页的title和favicon 前言流程步骤一、设置environment文件二、在入口文件中配置三、删除index.html中的title和 icon link四、使用对应的打包命令进行部署 注意事项一、angular中,需要在angular.json添加favicon.ico额外的构建 前言 有些项目…

[C++][数据结构][图][中][图的遍历][最小生成树]详细讲解

目录 1.图的遍历1.广度优先遍历2.深度优先遍历 2.最小生成树1.Kruskal算法2.Prim算法 1.图的遍历 给定一个图G和其中任意一个顶点 v 0 v_0 v0​,从 v 0 v_0 v0​出发,沿着图中各边访问图中的所有顶点,且每个顶 点仅被遍历一次 “遍历”&…

《Windows API每日一练》5.1 键盘基础

本节我们讲述关于键盘的一些基础知识。当我们按下一个键盘按键时,会产生一个键盘按键消息。这一点你能确定吗?假如是一个菜单快捷键消息,或者是一个子窗口控件消息呢?这就超出了本节讨论的范围,我们将在菜单和子窗口控…

Jenkins+K8s实现持续集成(二)

部署前呢,要先把jenkins搭建好。 同时呢已经有了k8s的环境。 基于以上两步已经有了的情况,继续要实现jenkinsk8s持续集成,需要先准备四个文件: Dockerfile首先要准备好一个Dockerfile文件,用于构建Docker镜像的文本…

安装cuda、cudnn、Pytorch(用cuda和cudnn加速计算)

写在前面 最近几个月都在忙着毕业的事,好一阵子没写代码了。今天准备跑个demo,发现报错 AssertionError: Torch not compiled with CUDA enabled 不知道啥情况,因为之前有cuda环境,能用gpu加速,看这个报错信息应该是P…

React常用方法汇总【更新中】

文章目录 前言创建项目启动命令列表渲染父子组件传值useEffect 异步函数使用方法useEffect 异步函数清除方法控制组件显示隐藏axios 安装使用 前言 运行 react 需要先安装 node.js,具体安装步骤可以参考这篇文章 https://blog.csdn.net/weixin_43721000/article/de…

Vue65-vue-resource:ajax请求

vue-resource是vue的插件库,用vue.use(xxxx)使用插件。 1、安装 2、引入和使用 这个库,维护的频率不高了。还是建议使用:axios,vue-resource只是了解即可。

MySQL8,Navicat能登陆成功,密码却忘记了

执行成功的图: 以下为步骤:本文一共8个简单步骤。 环境:mysql8、window10、navicat11 1、打开本地电脑window10的命令窗(俗称黑窗口),windowR 2、输入regegit,回车,打开注册表 3、…

技术差异,应用场景;虚拟机可以当作云服务器吗

虚拟机和云服务器是现在市面上常见的两种计算资源提供方式,很多人把这两者看成可以相互转换或者替代的物品,实则不然,这两种资源提供方式有许多相似之处,但是也有不少区别,一篇文章教你识别两者的技术差异,…

【全文档】软件项目经理需要掌握的文档有哪些?

软件项目经理在项目管理过程中需要编写多种文档,以下是常见的十五个文档: 项目计划: 详细描述了项目的范围、时间、成本、资源、沟通计划等关键信息,是项目管理的核心文档。 需求文档: 记录了项目的业务需求、功能需求…

深入理解预处理

1.预定义符号 C语言设置了⼀些预定义符号,可以直接使用,预定义符号也是在预处理期间处理的。 __FILE__ //进⾏编译的源⽂件 __LINE__ //⽂件当前的⾏号 __DATE__ //⽂件被编译的⽇期 __TIME__ //⽂件被编译的时间 __STDC__ //如果编译器遵循ANSI C&…

3. ceph-mimic版本部署

ceph-mimic版本部署 一、ceph-mimic版本部署1、环境规划2、系统基础环境准备2.1 关闭防火墙、SELinux2.2 确保所有主机时间同步2.3 所有主机ssh免密2.4 添加所有主机解析 3、配置ceph软件仓库4、安装ceph-deploy工具5、ceph集群初始化6、所有ceph集群节点安装相关软件7、客户端…

LeetCode322.零钱兑换(一)

LeetCode刷题记录 文章目录 📜题目描述💡解题思路⌨C代码 📜题目描述 给你一个整数数组 coins ,表示不同面额的硬币;以及一个整数 amount ,表示总金额。 计算并返回可以凑成总金额所需的 最少的硬币个数 。…

项目监督与控制

1.什么是项目过程度量?其方法有哪些? 项目过程度量是一种对项目执行过程中的活动和性能进行量化测量的方法。它涉及到收集、分析和解释项目数据,以便更好地理解项目的进度、质量和效率。过程度量的目的是提供关于项目健康状况的客观信息&…

代码随想录第28天|回溯算法

491. 非递减子序列 思路: 不可以排序, 否则会改变元素的顺序对收获的结果有要求, num.size() > 2, 且 num[i - 1] < num[i]需要进行去重, 不能使用排序后的方法去重每一层可用 unordered_set 去重组合问题, for 遍历需要标记起始位置 bug: 一定要先判断元素是否重复, …

使用CAPL创建系统变量之sysDefineNamespace

目录 0 前言 1 使用CAPL创建系统变量 0 前言 最近在项目中发现可以通过CAPL来创建系统变量&#xff0c;这样方法在一定程度上提高了代码的统一性和测试的便利性。想要加入HIL自动化测试群的小伙伴欢迎评论区留言或私信&#xff0c;让我们一起进步&#xff01; 1 使用CAPL创建…

染发膏粪大肠菌群检测 化妆品毒理学检测 功效测试

染发膏中粪大肠菌群的检测 染发膏中的粪大肠菌群检测是为了确保产品的卫生安全&#xff0c;因为粪大肠菌群通常存在于动物的肠道中&#xff0c;它们的存在可能表明产品受到了外部环境的污染。根据国家标准GB/T 7918.3-1987&#xff0c;对化妆品中粪大肠菌群的检测方法进行了规范…

【html】爱心跳动动画:CSS魔法背后的故事

效果展示&#xff1a; 代码介绍&#xff1a; 爱心跳动动画&#xff1a;CSS魔法背后的故事 在前端开发中&#xff0c;CSS不仅仅是一种用于控制网页样式的工具&#xff0c;它也是一种表达创意和想象力的艺术手段。今天&#xff0c;我要为大家介绍一段使用CSS实现的爱心跳动动画…