番剧更新表及番剧详情数据库
目录
番剧更新表及番剧详情数据库 1
一、实验题目 1
二、开发环境 1
三、数据库设计 1
3.1 需求分析 2
3.2 数据库概念设计 2
3.3 数据库结构 3
3.4 数据库实现 5
四、系统设计 7
4.1 系统后端 7
4.2 Web服务 17
4.3 系统前端 17
4.4 程序模拟图 25
五、特色和创新点 26
六、实验分工 26
七、提交文件说明 26
八、实验总结 28

一、实验题目
实验背景:
该项目立足于目前各大平台网站的番剧信息较为分散,用户需要辗转多个平台才能获取较为完整的番剧信息的背景下,实现了各大平台网站番剧信息的整合。将各大平台网站的番剧更新信息及番剧详情信息整合制表,展现在我们的网页上。
二、开发环境
系统:Ubuntu 20.08
数据库:mysql 8.0.23
编程语言: 【后端】 python, mysql 【前端】 html+css+js
三、数据库设计
3.1 需求分析
3.1.1 番剧更新表
系统维护在播新番的当前更新集数,播放地址链接,宣传图等内容。
番剧更新主要来源于bilibiliACfun两个个网站。
所有信息均通过爬虫以及python脚本进行动态维护。
3.1.2 番剧详情表
针对每个番剧,提供该番剧的详情信息,包括制作公司,监督,声优等内容。
番剧详情主要来自于萌娘百科。
信息通过爬虫python脚本动态维护
3.1.1 用户管理
系统用户分为超级管理员用户和普通用户。
普通用户
可查看数据库中的内容,可被授予删除、修改、添加番剧信息等权力。
超级管理员
拥有数据库的完全控制权,包括查看所有用户资料,创建新用户,用户授权等操作。

# 该模块是用户管理模块
# 主要提供数据库中的用户管理功能
# 实现在数据库中进行用户创建、授权、修改、删除等具体操作
# 该模块实现的功能供user模块封装调用import pymysql
import traceback
from pymysql import cursors
from werkzeug.security import check_password_hash, generate_password_hash
from itertools import chain#默认创建普通用户,授权select
def createUser(name,password):returnStatus=1db = pymysql.connect(host="localhost", port=3306, db="mysql", user="root", password="123456",charset='utf8')cursor = db.cursor()host = '%'sql1 = "create user '%s'@'%s' identified by '%s';"%\(name,host,password)sql11="grant select on yukiyu.* to '%s'@'%s';"%\(name, host)cursor.execute("select user from db")elems = cursor.fetchall()res = list(chain.from_iterable(elems))print('现有用户:')print(res)if name in res:print("用户%s已存在"/(name))return -5try:print('start to execute:')print(sql1)print(sql11)cursor.execute(sql1)cursor.execute(sql11)db.commit()print('create success !')except:returnStatus=0print('create user error!')db.rollback()traceback.print_exc()db.close()#在yukiyu库中的user插入同样db = pymysql.connect(host="localhost", port=3306, db="yukiyu", user="root", password="123456",charset='utf8')cursor=db.cursor()# data = privilegeOfUser(name)priv = 'YNNN'sql2 = """insert into user_list(name,password,privilege) values('%s','%s','%s');"""%\(name,generate_password_hash(password),priv)try:print('start to execute:')print(sql2)cursor.execute(sql2)db.commit()print('insert success !')except:print('insert error!')db.rollback()traceback.print_exc()returnStatus=0cursor.close()db.close()return returnStatus#删除用户
def dropUser(name):returnStatus=1db = pymysql.connect(host="localhost", port=3306, db="mysql", user="root", password="123456",charset='utf8')cursor = db.cursor()host = '%'sql="drop user '%s'@'%s';"%\(name,host)try:print('start to execute:')print(sql)cursor.execute(sql)db.commit()print('drop success !')returnStatus=1except:print('drop user error!')db.rollback()traceback.print_exc()returnStatus =0sql2 = """delete from yukiyu.user_listwhere name = '%s';"""%\(name)try:print('start to execute:')print(sql2)cursor.execute(sql2)db.commit()print('delete user success !')except:print('delete user error!')db.rollback()traceback.print_exc()returnStatus=0cursor.close()db.close()return returnStatusdef ifManage(name):db = pymysql.connect(host="localhost", port=3306, db="yukiyu",user="root", password="123456", charset="utf8")sql = """select if_manager from user_listwhere name = '%s';"""%\(name)cursor=db.cursor(pymysql.cursors.DictCursor)try:print('start to execute:')print(sql)cursor.execute(sql)data = cursor.fetchall()print('success !')print(data)except:print('error!')traceback.print_exc()return data[0]['if_manager']#授权为管理员用户,实现所有权限
def grantSuperUser(name):if ifManage(name)=='Y':print("success")return 1host='%'db = pymysql.connect(host="localhost", port=3306, db="mysql",user="root", password="123456", charset="utf8")cursor = db.cursor()sql="""grant all privileges on yukiyu.* to '%s'@'%s';"""%\(name,host)sql2="""grant all privileges on *.* to '%s'@'%s';"""%\(name,host)try:print('start to execute:')print(sql)cursor.execute(sql2)db.commit()cursor.execute(sql)db.commit()print('grant success !')except:print('grant error!')db.rollback()traceback.print_exc()return 0data = privilegeOfUser(name)priv = data['privilege']sql2 = """update yukiyu.user_listset privilege = '%s'where name = '%s';"""%\(priv,name)try:print('start to execute:')print(sql2)cursor.execute(sql2)db.commit()print('update success !')except:print('update error!')db.rollback()traceback.print_exc()return 0sql3 = """update yukiyu.user_listset if_manager = 'Y'where name = '%s';"""%\(name)try:print('start to execute:')print(sql3)cursor.execute(sql3)db.commit()print('update success !')except:print('update error!')db.rollback()traceback.print_exc()return 0cursor.close()db.close()return 1#授权为普通用户,select权限
def grantOrdinartUser(name):returnStatus=1if(ifManage(name)=='N'):print("grant success")return 1host = '%'db = pymysql.connect(host="localhost", port=3306, db="mysql",user="root", password="123456", charset="utf8")cursor = db.cursor()sql1="revoke all privileges on yukiyu.* from '%s'@'%s';"%\(name,host)sql11="grant select on yukiyu.* to '%s'@'%s';"%\(name,host)try:print('start to execute:')print(sql1)print(sql11)cursor.execute(sql1)cursor.execute(sql11)db.commit()print('revoke success !')except:print('revoke error!')db.rollback()traceback.print_exc()return 0sql2 = """update yukiyu.user_listset privilege = 'YNNN'where name = '%s';"""%\(name)try:print('start to execute:')print(sql2)cursor.execute(sql2)db.commit()print('update success !')except:print('update error!')db.rollback()traceback.print_exc()return 0sql3 = """update yukiyu.user_listset if_manager = 'N'where name = '%s';"""%\(name)try:print('start to execute:')print(sql3)cursor.execute(sql3)db.commit()print('update success !')except:print('update error!')db.rollback()traceback.print_exc()return 0changePrivilege(name, 'YYYY')cursor.close()db.close()return returnStatus# 查看指定权限
def checkOnePriv(name, privilege):s = privilege+'_priv'db = pymysql.connect(host="localhost", port=3306, db="mysql",user="root", password="123456", charset="utf8")cursor=db.cursor(pymysql.cursors.DictCursor)sql = """select %s_privfrom dbwhere Db = 'yukiyu' and User = '%s';"""%\(privilege,name)try:print('start to execute:')print(sql)cursor.execute(sql)data = cursor.fetchall()print('success !')except:print('error!')db.rollback()traceback.print_exc()return data[0][s]#为指定用户增加指定权限
def addPrivForUser(name,privilege):if checkOnePriv(name,privilege)=='Y':print("succsee")return 1host='%'db = pymysql.connect(host="localhost", port=3306, db="mysql",user="root", password="123456", charset="utf8")cursor = db.cursor()sql1 = "grant %s on yukiyu.* to '%s'@'%s';"%\(privilege,name,host)try:print('start to execute:')print(sql1)cursor.execute(sql1)db.commit()print('grant success !')except:print('grant error!')traceback.print_exc()data = privilegeOfUser(name)priv = data['privilege']sql2 = """update yukiyu.user_listset privilege = '%s'where name = '%s';"""%\(priv,name)try:print('start to execute:')print(sql2)cursor.execute(sql2)db.commit()print('update success !')except:print('update error!')traceback.print_exc()cursor.close()db.close()return 1#删除指定用户的某权限
def delPrivForUser(name,privilege):if(checkOnePriv(name , privilege)=='N'):print("success")return 1host='%'db = pymysql.connect(host="localhost", port=3306, db="mysql",user="root", password="123456", charset="utf8")cursor = db.cursor()sql1 = "revoke %s on yukiyu.* from '%s'@'%s';"%\(privilege,name,host)try:print('start to execute:')print(sql1)cursor.execute(sql1)db.commit()print('grant success !')except:print('grant error!')traceback.print_exc()data = privilegeOfUser(name)priv = data['privilege']sql2 = """update yukiyu.user_listset privilege = '%s'where name = '%s';"""%\(priv,name)try:print('start to execute:')print(sql2)cursor.execute(sql2)db.commit()print('update success !')except:print('update error!')traceback.print_exc()cursor.close()db.close()#查询指定用户权限
def privilegeOfUser(name):db = pymysql.connect(host="localhost", port=3306, db="mysql",user="root", password="123456", charset="utf8")cursor=db.cursor(pymysql.cursors.DictCursor)sql = """select User, select_priv, insert_priv, update_priv, delete_priv, create_priv, drop_privfrom dbwhere Db = 'yukiyu' and User = '%s';"""%\(name)try:print('start to execute:')print(sql)cursor.execute(sql)print('success !')except:print('error!')traceback.print_exc()data = cursor.fetchall()a=data[0]["select_priv"]b=data[0]["insert_priv"]c=data[0]["update_priv"]d=data[0]["delete_priv"]s=a+b+c+ddict = {'name': data[0]['User'],'privilege':s}print(dict)return dict#查看所有用户及权限
def privilegeOfAllUser():db = pymysql.connect(host="localhost", port=3306, db="mysql",user="root", password="123456", charset="utf8")cursor=db.cursor(pymysql.cursors.DictCursor)sql = """select User, select_priv, insert_priv, update_priv, delete_priv, create_priv, drop_privfrom dbwhere Db = 'yukiyu';"""try:print('start to execute:')print(sql)cursor.execute(sql)print('success !')except:print('error!')traceback.print_exc()data = cursor.fetchall()cursor.close()db.close()list = []for item in data:a=item['select_priv']b=item['insert_priv']c=item['update_priv']d=item['delete_priv']s=a+b+c+dlist.append({'name': item['User'],'privilege':s})print(list)return listdef printAllUser():db = pymysql.connect(host="localhost", port=3306, db="mysql",user="root", password="123456", charset="utf8")cursor=db.cursor(pymysql.cursors.DictCursor)sql = "select if_manager, user_id, name, privilege  from yukiyu.user_list;"try:print('start to execute:')print(sql)cursor.execute(sql)print('success !')except:print('error!')traceback.print_exc()data = cursor.fetchall()print(data)#返回用户密码hash值
def getPassword(name):db = pymysql.connect(host="localhost", port=3306, db="yukiyu",user="root", password="123456", charset="utf8")cursor=db.cursor(pymysql.cursors.DictCursor)sql = "select password from yukiyu.user_list where name = '%s'"%\(name)try:print('start to execute:')print(sql)cursor.execute(sql)print('success !')except:print('error!')traceback.print_exc()data = cursor.fetchall()password_hash = data[0]['password']print(password_hash)return password_hashdef changePrivilege(name,priv):if priv[0]=='Y':addPrivForUser(name,'select')else:delPrivForUser(name,'select')if priv[1]=='Y':addPrivForUser(name,'insert')else:delPrivForUser(name,'insert')if priv[2]=='Y':addPrivForUser(name,'update')else:delPrivForUser(name,'update')if priv[3]=='Y':addPrivForUser(name,'delete')else:delPrivForUser(name,'delete')return 1#包装函数
# info中的password为明文密码
# info = ['Y',id,'name','password','priv']
def commmitChangeToUserlist(oldInfo, newInfo):db = pymysql.connect(host="localhost", port=3306, db="yukiyu", user="root", password="123456",charset='utf8')if oldInfo != None and newInfo != None:if oldInfo[0]=='N' and newInfo[0]=='Y':newInfo[4]='YYYY'if oldInfo[0]=='Y'and newInfo[0]=='Y' and newInfo[4]!='YYYY':print('privilege error')return -4sql1 = "savepoint x;"cursor=db.cursor()cursor.execute(sql1)print(sql1)if oldInfo == None:print('insert')returnStatus = insertItem(newInfo)elif newInfo==None:print('delete')returnStatus = deleteItem(oldInfo)else:print('update')returnStatus = updateItem(newInfo, oldInfo)if(returnStatus!=1):print('error')sql2 = "rollback to x;"cursor.execute(sql2)db.commit()print(sql2)sql3="release savepoint x;"cursor.execute(sql3)db.commit()print(sql3)return returnStatus#插入新用户
def insertItem(newInfo):status=1ifManage = newInfo[0]name = newInfo[2]password = newInfo[3]privilege = newInfo[4]status = createUser(name,password)if(status!=1):return statusif(ifManage=='Y'):status= grantSuperUser(name)else:status = grantOrdinartUser(name)if status!=1:return statusstatus = changePrivilege(name,privilege)if status!=1:return statusprint('insert item success')return 1# 删除某用户
def deleteItem(oldInfo):status=1name = oldInfo[2]status = dropUser(name)if status==0:print('delete item error')return 0print('delete item success')return status#更新信息def updateItem(newInfo, oldInfo):returnStatus = 1nifManage=newInfo[0]nname=newInfo[2]npassword=newInfo[3]npriv=newInfo[4]oifManage=oldInfo[0]oname=oldInfo[2]opassword=oldInfo[3]opriv=oldInfo[4]if(npriv != opriv):returnStatus = changePrivilege(oname,npriv)if returnStatus != 1:print('change privilege error')return returnStatusprint('change privilege success')if(nifManage!=oifManage):returnStatus = changeIfManage(oname,nifManage)if returnStatus != 1:print('change ifManager error')return returnStatusprint('change ifManager success')if(npassword!=opassword):returnStatus = changePassword(oname,npassword)if returnStatus != 1:print('change password error')return returnStatusprint('change password success')if(oname != nname):returnStatus = changeName(oname,nname)if returnStatus != 1:print('change name error')return returnStatusprint('change name success')print('update item success')return returnStatus#用户改姓名
def changeName(oname,nname):returnStatus = 1db = pymysql.connect(host="localhost", port=3306, db="mysql", user="root", password="123456",charset='utf8')cursor=db.cursor()cursor.execute("select user from db")elems = cursor.fetchall()res = list(chain.from_iterable(elems))print('现有用户:')print(res)if nname in res:print("用户%s已存在"/(nname))return -5sql1 = """update db set user='%s' where user = '%s';"""%\(nname, oname)sql11 = """update user set user='%s' where user = '%s';"""%\(nname, oname)try:print('start to execute:')print(sql1)print(sql11)cursor.execute(sql1)cursor.execute(sql11)db.commit()print('success !')returnStatus = 1except:print('updata user error !')db.rollback()traceback.print_exception()returnStatus = 0return returnStatussql2="""update yukiyu.user_list set name = '%s'where name = '%s';"""%\(nname,oname)try:print('start to execute:')print(sql2)cursor.execute(sql2)db.commit()print('success !')returnStatus = 1except:print('updata user error !')db.rollback()traceback.print_exception()returnStatus = 0return returnStatusreturn 1# 用户改管理权限
def changeIfManage(name,nIfMnage):db = pymysql.connect(host="localhost", port=3306, db="mysql", user="root", password="123456",charset='utf8')cursor=db.cursor()if(nIfMnage=='Y'):returnStatus = grantSuperUser(name)else:returnStatus = grantOrdinartUser(name)return returnStatus#用户改密码
def changePassword(name,password):db = pymysql.connect(host="localhost", port=3306, db="mysql", user="root", password="123456",charset='utf8')cursor = db.cursor()sql = "ALTER USER '%s'@'%s' IDENTIFIED WITH mysql_native_password BY '%s';"%\(name,'%',password)try:print('start to execute:')print(sql)cursor.execute(sql)db.commit()print('success !')returnStatus = 1except:print('updata error !')db.rollback()traceback.print_exc()returnStatus = 0if(returnStatus==0):return returnStatuspassword_hash = generate_password_hash(password)sql2 = """update yukiyu.user_listset password = '%s'where name = '%s';"""%\(password_hash,name)try:print('start to execute:')print(sql2)cursor.execute(sql2)db.commit()print('success !')returnStatus = 1except:print('updata error !')db.rollback()traceback.print_exception()returnStatus = 0db.close()return returnStatusdef test1():newInfo = ['N',2,'ddd','123456','YNNN']commmitChangeToUserlist(None,newInfo)print('success')returndef test2():oldInfo = ['N',2,'ddd','123456','YNNN']newInfo = ['Y',2,'ddd','123456','YNNN']commmitChangeToUserlist(oldInfo,newInfo)def test3():oldInfo = ['Y',2,'ddd','123456','YYYY']newInfo = ['Y',2,'xx','123456','YYYY']commmitChangeToUserlist(oldInfo,newInfo)def test4():oldInfo = ['N',2,'xx','123456','YNNN']commmitChangeToUserlist(oldInfo,None)def test5():oldInfo = ['N',2,'xx','123456789','YNNN']newInfo = ['Y',2,'xxyy','123456789','YYYY']commmitChangeToUserlist(oldInfo,newInfo)if __name__ == '__main__':#dropUser('xxy')#test1()#test2()test3()#test4()#test5()db = pymysql.connect(host="localhost", port=3306, db="yukiyu", user="root", password="123456",charset='utf8')#dropUser('xxx')#createUser('xxx','123456')#grantSuperUser('cy')#grantOrdinartUser('cyy')#addPrivForUser('cyy','delete')#delPrivForUser('cyy','delete')#privilegeOfAllUser()#privilegeOfUser('cyy')# printAllUser()# getPassword('xxx')db.close()



















基于Python+Html的番剧更新表及番剧详情数据库相关推荐

  1. 番剧更新表及番剧详情数据库

    访问[WRITE-BUG数字空间]_[内附完整源码和文档] 该项目立足于目前各大平台网站的番剧信息较为分散,用户需要辗转多个平台才能获取较为完整的番剧信息的背景下,实现了各大平台网站番剧信息的整合.将 ...

  2. 基于python摄影作品展示网站django框架计算机毕业设计源码+系统+数据库+lw文档+调试部署

    基于python摄影作品展示网站django框架计算机毕业设计源码+系统+数据库+lw文档+调试部署 基于python摄影作品展示网站django框架计算机毕业设计源码+系统+数据库+lw文档+调试部 ...

  3. python动态更新窗口上的图片_基于Python实现matplotlib中动态更新图片(交互式绘图)...

    最近在研究动态障碍物避障算法,在Python语言进行算法仿真时需要实时显示障碍物和运动物的当前位置和轨迹,利用Anaconda的Python打包集合,在Spyder中使用Python3.5语言和mat ...

  4. python动态绘图并保留之前绘图_[转]基于Python实现matplotlib中动态更新图片(交互式绘图)...

    最近在研究动态障碍物避障算法,在Python语言进行算法仿真时需要实时显示障碍物和运动物的当前位置和轨迹,利用Anaconda的Python打包集合,在Spyder中使用Python3.5语言和mat ...

  5. 从表单中提交图片到mysql_如何在Python框架Flas中将图像文件从表单上传到数据库...

    我正在尝试从一个表单上传一个图片到我正在工作的一个实践电子商务网站的Flask数据库中.我使用flask上传来处理文件上传,因为它看起来比其他上传文件的方式容易.我收到以下错误"NameEr ...

  6. 基于python的在线音乐系统设计与实现

    摘 要 本音乐系统借助了当前互联网的发展趋势,近几年,随着网络的快速发展,网络已经融入人们的生活中.互联网给人们的生活带来了许多便利,基本上可以达到足不出户就能完成许多事情.互联网的使用基本实现全覆盖 ...

  7. 基于Python的超市管理系统毕业设计源码111042

    目  录 摘要 1 绪论 1.1研究背景 1.2研究现状 1.3系统开发技术的特色 1.4论文结构与章节安排 2基于Python的 超市管理系统 系统分析 2.1 可行性分析 2.2 系统流程分析 2 ...

  8. 基于Python医学院校二手书管理毕业设计-附源码201704

    目  录 摘要 1 绪论 1.1研究意义 1.2研究现状 1.3系统开发技术的特色 1.4论文结构与章节安排 2基于Python医学院校二手书管理系统分析 2.1 可行性分析 2.2 系统流程分析 2 ...

  9. 基于python的校园社团管理系统的设计与实现

    摘  要 随着信息技术和网络技术的飞速发展,人类已进入全新信息化时代,传统管理技术已无法高效,便捷地管理信息.为了迎合时代需求,优化管理效率,各种各样的管理系统应运而生,各行各业相继进入信息管理时代, ...

最新文章

  1. 一个技术转销售人员的感悟--深刻(转)
  2. webpack来打包你的vue项目,如发现你的vendor.js过大
  3. DataUml Design 介绍8-DataUML 1.2版本正式发布
  4. plt.subplots中的ax = ax.flatten()
  5. pydicom 显示jpeg压缩图像_解读常见图像格式
  6. 译文:如何使用SocketAsyncEventArgs类(How to use the SocketAsyncEventArgs class)
  7. openwrt添加自己的iptables的targe编译报错
  8. utilities(matlab)—— 多元函数的数值梯度
  9. [AHK]二维数组总结
  10. WHOIS查询检索,域名信息查询工具软件
  11. 治军首在选将,余承东挂帅华为云
  12. ASP一个小型搜索引擎的设计与实现
  13. 微商卖货怎么引流?微商怎么找客源?
  14. sftp常用命令介绍
  15. 证券公司信息化5-我国证券公司交易系统的演化过程和主要阶段是怎样的?什么是卫星报盘系统?
  16. 华为国产系统Android,国产手机系统即将出现!华为将抛弃安卓:成功研发自有手机系统...
  17. 春运首日 贵铁警方爱心送“福”情暖归途
  18. LayUI动态选项卡iframe使用
  19. iTunes备份文件路径正确修改方法(亲测可用,2018.10.19更新)
  20. 里约奥运会火的不是巴西而是中国互联网,自己看

热门文章

  1. Excel 2010迷你图,单元格中的图表
  2. 编译原理:词法分析概述
  3. 要怎样才能撤销公司网站备案
  4. windows配置NGINX、NGINX配置SSL证书通过HTTPS访问、使用HTTPS通过NGINX代理访问服务器端项目
  5. a76比a73强多少_Arm Cortex-A76的微架构改进了什么?
  6. CSDN中草稿箱怎么找到?——灵魂拷问
  7. 【题解】【CF1041A】Heist
  8. 创业指导 创业搭档的性格配方案
  9. vue 一维 数组 转换成三维 数组
  10. Android 适配魅族去掉smartbar