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

news2024/9/20 13:16:10


一、源码特点
    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

四系统实现

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

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

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

相关文章

Java面试八股之myBatis中#{}和${}标识的区别是什么

myBatis中#{}和${}标识的区别是什么 MyBatis中的#{}和${}都是用来动态地向SQL语句中插入参数的,但它们之间存在几个关键的区别: 预编译与字符串替换: #{}是预编译处理的参数占位符。MyBatis会将#{}中的内容替换为一个预编译语句的参数标记…

全民拼购:引领商业新潮流,共创共赢新篇章

在当下的商业格局中,一种曾被忽视但实则具有颠覆性价值的商业理念正在逐步显露其锋芒。与传统的交易方式相悖,这一模式在我近期接触到的某个实例中,即便在用户基数尚未突破二十万之际,也能实现日均销售额逼近五千万的辉煌成绩&…

2024青海三支一扶招1910人7月6日笔试

📢2024年青海省三支一扶计划招募1910人公告已发布! 小🀄️帮大家整理好了考试关键时间点: ★ 报名时间:6月20日至6月25日 ★ 报名网站:青海省人事考试信息网(www.qhpta.com) ★ 网上…

停止 Windows 更新

首先按住 win r,输入 regedit: 点击确认,进入注册表页面: 依次点击右侧:HKEY_LOCAL_MACHINE -> SOFTWARE -> Microsoft -> WindowsUpdate -> UX -> Settings: 进入编辑器后,右键…

亲测:无影云电脑免费三个月已经缩短为1个月

亲测:无影云电脑免费三个月已经缩短为1个月,大家不要再找3个月的无影云电脑,已经没有了,目前最新消息是1个月。以前可以领3个月,现在只能领1个月,在阿里云免费中心 https://free.aliyun.com/ 大家自己看吧&…

实验室自用LabVIEW软件与商用软件价格差异分析

实验室自用LabVIEW软件与商用软件在价格上的差异源于功能与扩展包、技术支持与服务、使用场景与合规性、更新与维护、市场与定价策略、培训与教育资源及许可证管理与合规审计等方面的不同。商用软件提供更全面的功能和支持,确保高可靠性和合规性,因此价格…

Golang的Gin框架

目录 功能以及简单使用 gin.Engine数据结构 RouterGroup methodTrees gin.context 功能以及简单使用 功能: • 支持中间件操作( handlersChain 机制 ) • 更方便的使用( gin.Context ) • 更强大的路由解析能力&#xff08…

系统状态检测命令

1.ifconfig用于获取网卡配置与网络状态等信息 [rootlinuxprobe Desktop]# ifconfig eno16780032: flags4099<UP,BROADCAST,MULTICAST> mtu 1500 ether 00:0c:29:90:17:bb txqueuelen 1000 (Ethernet) RX packets 0 bytes 0 (0.0 B) RX errors 0 dropped 0 overruns 0 fra…

2024年了,C++还值得学吗?6个C++的就业方向打消你的疑虑

C语言是一种广泛应用于计算机编程的高级编程语言&#xff0c;自从其首次问世以来&#xff0c;就在软件开发领域取得了广泛的应用和成功。作为一种强大的编程语言&#xff0c;C语言不断发展和改进&#xff0c;也在不断地适应新的技术和需求。在未来几年&#xff0c;C语言将继续保…

移植案例与原理 - HDF驱动框架-驱动配置(1)

HCS(HDF Configuration Source)是HDF驱动框架的配置描述源码&#xff0c;内容以Key-Value为主要形式。它实现了配置代码与驱动代码解耦&#xff0c;便于开发者进行配置管理。应该&#xff0c;类似Linux DTS(Device Tree Source)设备树。 HC-GEN(HDF Configuration Generator)是…

网络中数据链路层详解

数据链路层其实我们这里了解即可&#xff0c;因为做交换机开发的是主要学习这方面的知识。 这里我们主要了解以太网协议。 以太网是物理学的概念。以太网横跨数据链路层和物理层&#xff0c;平时咱们使用有线网就是以太网络。 如图以太网协议的报文格式&#xff1a; 上述的目…

python 微信群发工具

效果如下 python 微信消息群发工具 1、环境安装依据python手机app自动化测试环境搭建-CSDN博客 2、元素获取 启动uiautomatorviewer.bat工具,如下图 点击获取手机界面,如下图 3、根据获取的界面元素id或class名称编写代码 python简易代码如下 from appium import webdrive…

LangChain入门学习笔记(五)—— Model I/O之Chat Models

在LangChain的组件当中&#xff0c;Chat Models可以说跟LLMs占据着相同的“生态位”&#xff0c;它也是根据用户输入的提示内容&#xff0c;调用底层的大模型产生内容。与LLMs不同的是&#xff0c;LangChain的Chat Models主要有如下一些不同&#xff1a; 输入输出格式不同&…

aminer挖矿木马活动分析

1. aminer挖矿木马概览 近期&#xff0c;安天CERT通过捕风蜜罐系统[1]捕获了一批活跃的挖矿木马样本&#xff0c;该挖矿木马主要利用SSH和Redis弱口令暴力破解对Linux平台进行攻击。由于其初始脚本中下载挖矿文件的名称为“aminer.gz”&#xff0c;因此安天CERT将该挖矿木马命…

leetcode刷题(46-50)

算法是码农的基本功&#xff0c;也是各个大厂必考察的重点&#xff0c;让我们一起坚持写题吧。 遇事不决&#xff0c;可问春风&#xff0c;春风不语&#xff0c;即是本心。 我们在我们能力范围内&#xff0c;做好我们该做的事&#xff0c;然后相信一切都事最好的安排就可以啦…

Vue发送http请求

1.创建项目 创建一个新的 Vue 2 项目非常简单。在终端中&#xff0c;进入您希望创建项目的目录(我的目录是D:\vue)&#xff0c;并运行以下命令&#xff1a; vue create vue_test 2.切换到项目目录&#xff0c;运行项目 运行成功后&#xff0c;你将会看到以下的编译成功的提示…

Oracle中递归查询(START WITH……CONNECT BY……)

一、基本语法 在Oracle中START WITH……CONNECT BY……一般用来查找存在父子关系的数据&#xff0c;也就是树形结构的数据。 SELECT * FROM TABLE WHERE 条件3 START WITH 条件1 CONNECT BY 条件2;start with [condition]&#xff1a;设置起点&#xff0c;用来限制第一层的数…

一文详解去噪扩散概率模型(DDPM)

节前&#xff0c;我们星球组织了一场算法岗技术&面试讨论会&#xff0c;邀请了一些互联网大厂朋友、参加社招和校招面试的同学。 针对算法岗技术趋势、大模型落地项目经验分享、新手如何入门算法岗、该如何准备、面试常考点分享等热门话题进行了深入的讨论。 合集&#x…

AI 克隆声音,只需 3 分钟(附最全教程)

作者&#xff1a;寒斜 继生成式文本大模型 Chatgpt&#xff0c;生成式图片 Stablediffusion 之后生成式语音 Text To Speech 在开源社区也出现了一匹黑马&#xff0c;就是 GPT-Sovits [ 1] 。 之所以说他是黑马&#xff0c;让人觉得惊艳&#xff0c;是因为在语音效果克隆上做…

Deformable-DETR

DETR表现出来的问题 训练周期很长&#xff0c;相比标准的one-stage/two-stage detection在COCO上 12 epochs就能出好的结果&#xff0c;DETR标配200 epochs.对小目标不友好 作者指出&#xff0c;DETR中Transformer的问题是&#xff0c;在初始化的时候&#xff0c;网络几乎是把…