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.id

            if qx == "管理员":
                obj = models.gly.objects.filter(yhm=yhm, mm=mm).first()
                request.session['id'] = obj.id
            request.session['yhm'] = yhm
            request.session['mm'] = mm
            request.session['qx'] = qx


        return 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 list
    if 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):
    # 获取要修改的数据的id
    if 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):
    # 获取要修改的数据的id
    if 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):
    # 获取要修改的数据的id
    id = request.GET.get('id')
    obj = models.gly.objects.get(id=id)
    return render(request, 'gly/glydetail.html', {'obj': obj})

#管理员删除
def glydelete(request):
    # 获取要删除数据的id
    id = 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 list
    if 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):
    # 获取要修改的数据的id
    if 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):
    # 获取要修改的数据的id
    if 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):
    # 获取要修改的数据的id
    id = 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

四系统实现

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

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

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

3dmax怎么渲染又快又清晰?

在3ds Max中,追求快速且清晰的渲染效果是每个设计师的目标。云渲染技术的出现,为这一目标提供了强大的支持。通过云渲染,设计师能够利用远程服务器的强大计算能力,实现快速渲染,同时保持图像的高清晰度。 一、3dmax怎么…

Jackson的使用

一引入依赖 <!--Jackson是spring-boot-starter-json的一个依赖&#xff08;spring-boot-starter-web中包含spring-boot-starter-json&#xff09;。也就是说&#xff0c;当项目中引入spring-boot-starter-web后会自动引入spring-boot-starter-json --> <dependency&g…

Flutter 项目设置 Flutter 版本

即便使用了 fvm 设置了版本&#xff0c;AdroidStudio Setting 中如果不修改路径&#xff0c;Editor 依然会编译错误。目前还没看懂如何通过命令、文件来记录AdroidStudio Setting中的设置。 fvm list 来查看 flutter 路径&#xff1a;

无问芯穹Qllm-Eval:制作多模型、多参数、多维度的量化方案

前言 近年来&#xff0c;大语言模型&#xff08;Large Models, LLMs&#xff09;受到学术界和工业界的广泛关注&#xff0c;得益于其在各种语言生成任务上的出色表现&#xff0c;大语言模型推动了各种人工智能应用&#xff08;例如ChatGPT、Copilot等&#xff09;的发展。然而…

【Java面试】二十二、JVM篇(下):JVM参数调优与排查

文章目录 1、JVM的参数在哪里设置2、常见的JVM调优参数有哪些3、常见的JVM调优工具有哪些4、Java内存泄漏的排查思路5、CPU飙高的排查思路 1、JVM的参数在哪里设置 war包部署&#xff0c;在tomcat中设置&#xff0c;修改TOMCAT_HOME/bin/catalina.sh 文件 jar包启动&#xff0…

模型算法—线性回归

线性回归是统计学中最常见的一种回归分析方法&#xff0c;用于建立自变量&#xff08;解释变量&#xff09;和因变量&#xff08;响应变量&#xff09;之间的线性关系。线性回归模型可以用来预测一个或多个自变量对应的因变量的值。 线性回归的基本形式如下&#xff1a; &…

指标管理与精益生产:制造业的双翼齐飞

在竞争激烈的制造业环境中&#xff0c;企业要想保持持续的竞争优势&#xff0c;不仅需要拥有高效的生产流程&#xff0c;更需要有科学的管理方法。指标管理系统和精益生产正是这其中的两大关键要素。本文将探讨制造业缺乏指标管理系统的弊端&#xff0c;以及指标管理和精益生产…

美业人专用宝藏系统、Java收银系统源码分享-美业SAAS系统的应用价值分析

美业SAAS系统&#xff08;Software as a Service&#xff09;在美容、美发、美甲等行业中具有重要的应用价值。这种系统为美业提供了一种数字化解决方案&#xff0c;帮助企业更高效地管理业务和客户关系。 以下是博弈美业SAAS系统的应用价值分析&#xff1a; 1.经营管理&#…

文件加密软件排行榜|常用三款文件加密软件推荐

Top 1: 安秉网盾文件加密软件 加密模式多样&#xff1a;采用多种加密模式&#xff0c;对企业重要的文档、图纸进行全方位360度保护。可根据企业不同工作场景设置不同的加密模式。 全透明加密&#xff1a;通过全透明加密模式&#xff0c;对企业重要的图纸文件类型进行全盘透明…

Python 基础:文件

目录 一、从文件中读取数据1.1 读取整个文件1.2 逐行读取 二、写入文件2.1 写入空文件2.2 写入多行2.3 附加到文件 遇到看不明白的地方&#xff0c;欢迎在评论中留言呐&#xff0c;一起讨论&#xff0c;一起进步&#xff01; 本文参考&#xff1a;《Python编程&#xff1a;从入…

从穷举法到插板法:Python解决求和为12的正整数组合20240619

从穷举法到插板法&#xff1a;Python解决求和为12的正整数数学问题 在这篇博客中&#xff0c;我们将使用Python来解决一个有趣的小学数学问题&#xff1a;求出所有正整数组合&#xff0c;使得这些数的和为12。我们将演示如何找到这些组合&#xff0c;并计算每个组合的排列数&a…

【UIDynamic-动力学-UICollisionBehavior-碰撞行为-4个代理方法 Objective-C语言】

一、接下来,我们来说这个碰撞的代理方法, 1.我们把之前的代码再来复制一份儿,改个名字:07-碰撞行为-代理, 首先,在这个Collision里边,它有一个代理,我们找到这个行为,UICollisionBehavior,点进来看一下, 点进来, 在最下边,有一个delegate, 这个delegate,叫做UIC…

数据结构之探索“队列”的奥秘

找往期文章包括但不限于本期文章中不懂的知识点&#xff1a; 个人主页&#xff1a;我要学编程(ಥ_ಥ)-CSDN博客 所属专栏&#xff1a;数据结构&#xff08;Java版&#xff09; 目录 队列有关概念 队列的使用 队列模拟实现 循环队列的模拟实现 622. 设计循环队列 双端队…

仓库管理系统的设计

管理员账户功能包括&#xff1a;系统首页&#xff0c;个人中心&#xff0c;管理员管理&#xff0c;公告管理&#xff0c;物资管理&#xff0c;基础数据管理&#xff0c;用户管理 用户账户功能包括&#xff1a;系统首页&#xff0c;个人中心&#xff0c;公告管理&#xff0c;物…

【python】PyCharm如何设置字体大小和背景

目录 效果展示 字体大小 背景设置 效果展示 字体大小 再左上角找到四条杠的图标 找到File 一般字体大小为22最合适&#xff0c;行间距为默认 背景设置 还是再字体设置的页面搜索 background 小编的其他文章详见&#xff0c;欢迎来支持 东洛的克莱斯韦克-CSDN博客 【机器…

failed to create network xxxx: Error response from daemon

问题描述&#xff1a; 启动项目时&#xff0c;docker内部网络冲突。 解决方案&#xff1a; 1.删除所有docker容器&#xff08;强制删除一个或多个容器&#xff0c;即使它们正在运行&#xff09; docker rm -f $(docker ps -aq) 2.验证docker容器是否删除成功 docker ps --…

“论数据访问层设计技术及其应用”写作框架,系统架构设计师

论文真题 在信息系统的开发与建设中&#xff0c;分层设计是一种常见的架构设计方法&#xff0c;区分层次的目的是为了实现“高内聚低耦合”的思想。分层设计能有效简化系统复杂性&#xff0c;使设计结构清晰&#xff0c;便于提高复用能力和产品维护能力。一种常见的层次划分模…

Google Adsense----Wordpress插入谷歌广告

1.搭建个人博客,绑定谷歌search consol,注册adsense 详细可以参考这个视频b站视频 2.将个人博客网站关联到Adsense 在adsense里新加网站,输入你的博客网址,双击网站 将这段代码复制到header.php的里面 在wordpress仪表盘的外观-主题文件编辑器,找到header.php将代码复制,…

C++跨平台socket编程

C跨平台socket编程 一、概述1.1 TCP协议1.1 TCP 的主要特性1.2 TCP报文格式 UDP报文格式IP协议使用windows编辑工具直接编辑Linux上代码 二、系统socket库1.windows上加载socket库2.创建socket2.1 windows下2.2 linux下 3.网络字节序4.bind端口5.listen监听并设置最大连接数6.a…