def upload_movie_interface(back_dic,conn): movie_name = back_dic.get('movie_name') movie_size = back_dic.get('movie_size') movie_md5 = back_dic.get('movie_md5') is_free = back_dic.get('is_free') movie_path = os.path.join(settings.MOVIE_FILE_PATH,movie_name) num = 0 with open(movie_path,'wb') as f: while num<movie_size: data = conn.recv(1024) f.write(data) num += len(data) movie_obj = models.Movie( movie_name=movie_name, movie_size=movie_size, movie_path=movie_path, is_free=is_free, u_id=back_dic.get('u_id'), file_md5=movie_md5, upload_time=datetime.datetime.now(), is_delete=0 ) movie_obj.orm_insert() send_dic = {'flag':True,'msg':'上传成功'} common.send_data(send_dic,conn)
def get_movie_list_interface(back_dic, conn): movie_obj_list = models.Movie.orm_select(is_delete=0) # print(movie_obj_list) movie_type = back_dic.get('movie_type') movie_list = [] if movie_obj_list: for movie_obj in movie_obj_list: if movie_type == 'all': movie_list.append([ movie_obj.movie_name, '免费' if movie_obj.is_free == 1 else '收费' ]) elif movie_type == 'free': if movie_obj.is_free: movie_list.append([movie_obj.movie_name, '免费']) else: if not movie_obj.is_free: movie_list.append([movie_obj.movie_name, '收费']) if not movie_list: send_dic = {'flag': False, 'msg': '暂无电影可以下载'} else: send_dic = {'flag': True, 'movie_list': movie_list} else: send_dic = {'flag': False, 'msg': '暂无电影'} common.send_data(send_dic, conn)
def download_movie_interface(client_back_dic, conn): movie_id = client_back_dic.get('movie_id') movie_name = client_back_dic.get('movie_name') movie_type = client_back_dic.get('movie_type') user_id = client_back_dic.get('user_id') # movie_obj = models.Movie.select(id=movie_id)[0] # movie_path = movie_obj.path movie_path = os.path.join(settings.DOWNLOAD_PATH, movie_name) movie_size = os.path.getsize(movie_path) send_dic = {'flag': True, 'msg': '准备下载', 'movie_size': movie_size} user_obj = models.User.select(id=user_id)[0] if movie_type == '免费': wait_time = 0 if not user_obj.is_vip: wait_time = 20 send_dic['wait_time'] = wait_time print(send_dic) common.send_data(send_dic, conn, movie_path) obj = models.DownloadRecord(user_id=user_id, movie_id=movie_id, download_time=common.get_time()) obj.save()
def upload_movie_interface(client_back_dic, conn): print('炮王来交货啦!') # 确保电影名称是唯一的 随机字符串 + 电影名称 movie_name = common.get_random_code() + client_back_dic.get('movie_name') # .mp4 movie_size = client_back_dic.get('file_size') movie_path = os.path.join( settings.DOWNLOAD_PATH, movie_name ) # 1.接受上传的电影 data_recv = 0 with open(movie_path, 'wb') as f: while data_recv < movie_size: data = conn.recv(1024) f.write(data) data_recv += len(data) # 2.把电影数据保存到mysql中 movie_obj = models.Movie( name=movie_name, file_md5=client_back_dic.get('file_md5'), is_free=client_back_dic.get('is_free'), is_delete=0, path=movie_path, user_id=client_back_dic.get('user_id'), upload_time=common.get_time() ) movie_obj.save() send_dic = { 'flag': True, 'msg': f'{client_back_dic.get("movie_name")}电影上传成功!' } common.send_data(send_dic, conn)
def register_interface(client_back_dic, conn): # 写业务逻辑 # 1.判断用户名是否存在 username = client_back_dic.get('username') # 通过用户名当作条件查询 user_obj_list = models.User.select(name=username) # 若存在,给客户端返回数据, 告诉用户,用户已存在! if user_obj_list: send_dic = {'flag': False, 'msg': '用户已存在!'} # 若不存在,保存数据到MySQL数据库中, 返回注册成功给客户端 else: password = client_back_dic.get('password') user_obj = models.User( name=username, # pwd, is_vip, is_locked, user_type, register_time pwd=common.get_md5_pwd(password), is_vip=0, # 0表示不是VIP, 1表示VIP is_locked=0, # 0表示不锁定, 1表示锁定 user_type=client_back_dic.get('user_type'), register_time=common.get_time()) user_obj.save() send_dic = {'flag': True, 'msg': '注册成功'} common.send_data(send_dic, conn)
def check_movie_interface(back_dic, conn): movie_md5 = back_dic.get('movie_md5') movie_obj_list = models.Movie.orm_select(file_md5=movie_md5) if movie_obj_list: send_dic = {'flag': False, 'msg': '该电影已上传'} else: send_dic = {'flag': True, 'msg': '可以上传'} common.send_data(send_dic, conn)
def delete_movie_interface(back_dic,conn): movie_name = back_dic.get('movie_name') movie_obj_list = models.Movie.orm_select(movie_name=movie_name) movie_obj = movie_obj_list[0] movie_obj.is_delete = 1 movie_obj.orm_update() send_dic = {'flag':True,'msg':'电影删除成功'} common.send_data(send_dic,conn)
def upload_movie(client): if not admin_data['session']: print('请先登录') return print('上传视频') while True: up_list = common.get_allfile_by_path(setting.BASE_MOVIE_UP) if not up_list: print('暂无能上传的影片') break for i, m in enumerate(up_list): print('%s : %s' % (i, m)) choose = input('请选择要上传的影片').strip() if choose == 'q': break if choose.isdigit(): choose = int(choose) # 先把md5值传上去校验一下文件是否存在,在决定要不要上传 if choose >= len(up_list): print('请输入范围内的数字') continue movie_path = os.path.join(setting.BASE_MOVIE_UP, up_list[choose]) file_md5 = common.get_bigfile_md5(movie_path) send_dic = { 'type': 'check_movie', 'session': admin_data['session'], 'file_md5': file_md5 } back_dic = common.send_data(client, send_dic, None) if back_dic['flag']: is_free = input('是否免费(y/n)>>:').strip() if is_free == 'y': is_free = 1 else: is_free = 0 fsize = os.path.getsize(movie_path) send_dic = { 'type': 'upload', 'user_type': 'admin', 'session': admin_data['session'], 'file_name': up_list[choose], 'file_size': fsize, 'file_md5': common.get_bigfile_md5(movie_path), 'is_free': is_free } back_dic = common.send_data(client, send_dic, movie_path) if back_dic['flag']: print(back_dic['msg']) break else: print(back_dic['msg']) else: print(back_dic['msg']) else: print('请输入数字')
def buy_vip_interface(back_dic, conn): # is_vip = back_dic.get('is_vip') user_obj_list = models.User.orm_select(u_id=back_dic.get('u_id')) user_obj = user_obj_list[0] if user_obj.is_vip: send_dic = {'flag': False, 'msg': '您已经是VIP,请勿重复购买!'} else: user_obj.is_vip = 1 user_obj.orm_update() send_dic = {'msg': 'VIP会员购买成功!'} common.send_data(send_dic, conn)
def buy_vip_interface(client_back_dic, conn): user_id = client_back_dic.get('user_id') user_obj = models.User.select(id=user_id)[0] user_obj.is_vip = 1 user_obj.sql_update() send_dic = {'flag': True, 'msg': '会员充值成功!'} common.send_data(send_dic, conn)
def issue_notice_interface(back_dic,conn): title = back_dic.get('title') content = back_dic.get('content') notice_obj = models.Notice( title=title, content=content, create_time=datetime.datetime.now(), u_id=back_dic.get('u_id') ) notice_obj.orm_insert() send_dic = {'flag':True,'msg':'公告发布成功'} common.send_data(send_dic,conn)
def delete_movie_interface(client_back_dic, conn): movie_id = client_back_dic.get('movie_id') # 直接删除 movie_obj = models.Movie.select(id=movie_id)[0] movie_obj.is_delete = 1 # 调用更新方法 movie_obj.sql_update() send_dic = { 'flag': True, 'msg': '电影删除成功!' } common.send_data(send_dic, conn)
def put_notice_interface(client_back_dic, conn): title = client_back_dic.get('title') content = client_back_dic.get('content') user_id = client_back_dic.get('user_id') notice_obj = models.Notice(title=title, content=content, user_id=user_id, create_time=common.get_time()) notice_obj.save() send_dic = { 'msg': '公告发布成功!' } common.send_data(send_dic, conn)
def check_download_record_interface(back_dic, conn): u_id = back_dic.get('u_id') record_obj_list = models.DownloadRecord.orm_select(u_id=u_id) record_list = [] if not record_obj_list: send_dic = {'flag': False, 'msg': '暂无下载记录'} common.send_data(send_dic, conn) else: for record_obj in record_obj_list: m_id = record_obj.m_id movie_obj = models.Movie.orm_select(m_id=m_id)[0] movie_name = movie_obj.movie_name record_list.append([movie_name, record_obj.download_time]) send_dic = {'flag': True, 'record_list': record_list} common.send_data(send_dic, conn)
def check_notice_interface(back_dic, conn): notice_obj_list = models.Notice.orm_select() notice_list = [] if not notice_obj_list: send_dic = {'flag': False, 'msg': '暂无公告'} else: for notice_obj in notice_obj_list: notice_list.append({ 'title': notice_obj.title, 'content': notice_obj.content, 'create_time': notice_obj.create_time }) send_dic = {'flag': True, 'notice_list': notice_list} common.send_data(send_dic, conn)
def down_charge_movie(client): if not user_data['name']: print('请先登录') return print('下载收费视频') print('会员收费5元,普通用户收费10元') choose = input('请输入要下载的电影名称:').strip() send_dic['type'] = 'download_movie' send_dic['name'] = user_data['name'] send_dic['session'] = user_data['session'] send_dic['movie_name'] = choose send_dic['movie_type'] = 'charge' back_dic = common.send_data(client, send_dic, None) if back_dic['flag']: if back_dic['wait_time'] > 0: print('请等待 %s 秒' % back_dic['wait_time']) time.sleep(back_dic['wait_time']) recv_size = 0 print('----->', back_dic['filename']) path = os.path.join(setting.BASE_MOVIE_DOWN, back_dic['filename']) with open(path, 'wb') as f: while recv_size < back_dic['filesize']: recv_data = client.recv(1024) f.write(recv_data) recv_size += len(recv_data) print('recvsize:%s filesize:%s' % (recv_size, back_dic['filesize'])) print('%s :下载成功' % back_dic['filename']) else: print(back_dic['msg'])
def buy_member(client): print('购买会员') if not user_data['name']: print('请先登录') return if user_data['is_vip']: print('您已经是会员了') return while True: buy = input('是否购买会员(y/n)q 退出').strip() if 'y' == buy: send_dic['type'] = 'buy_member' send_dic['name'] = user_data['name'] send_dic['session'] = user_data['session'] back_dic = common.send_data(client, send_dic, None) if back_dic['flag']: user_data['is_vip'] = True print(back_dic['msg']) break else: print(back_dic['msg']) elif 'q' == buy: break else: print('您没有购买')
def register_interface(back_dic, conn): username = back_dic.get('username') password = back_dic.get('password') user_type = back_dic.get('user_type') user_obj_list = models.User.orm_select(username=username) if user_obj_list: send_dic = {'flag': False, 'msg': '用户名已存在'} else: user_obj = models.User(username=username, password=password, user_type=user_type, is_vip=0, register_time=datetime.datetime.now()) user_obj.orm_insert() send_dic = {'flag': True, 'msg': '注册成功'} common.send_data(send_dic, conn)
def login_interface(client_back_dic, conn): # 执行login业务逻辑 username = client_back_dic.get('username') # 1.根据用户名查询用户数据 user_list = models.User.select(name=username) if not user_list: send_dic = {'flag': False, 'msg': '用户不存在'} else: user_obj = user_list[0] password = client_back_dic.get('password') # 1.判断客户端传入的密码与数据库中的密码是否相等 if user_obj.pwd == common.get_md5_pwd(password): # 产生一个随机字符串,作为session值 session = common.get_random_code() addr = client_back_dic.get('addr') # 保存session值到服务端,session + user_id一同保存到服务端本地 # 使用锁写入数据 lock_file.mutex.acquire() # str(addr) user_data.user_online[addr] = [session, user_obj.id] lock_file.mutex.release() send_dic = { 'flag': True, 'msg': '登录成功!', 'session': session, 'is_vip': user_obj.is_vip, 'new_notice': None } new_notice = get_new_notice_interface() if not new_notice: pass else: send_dic['new_notice'] = new_notice else: send_dic = {'flag': False, 'msg': '密码错误!'} common.send_data(send_dic, conn)
def download_movie_interface(back_dic, conn): movie_name = back_dic.get('movie_name') movie_obj = models.Movie.orm_select(movie_name=movie_name)[0] m_id = movie_obj.m_id movie_path = os.path.join(settings.MOVIE_FILE_PATH, movie_name) movie_size = os.path.getsize(movie_path) send_dic = {'movie_size': movie_size} common.send_data(send_dic, conn) with open(movie_path, 'rb') as f: for line in f: conn.send(line) download_record_obj = models.DownloadRecord( m_id=m_id, u_id=back_dic.get('u_id'), download_time=datetime.datetime.now()) download_record_obj.orm_insert()
def get_movie_list_interface(client_back_dic, conn): # 获取所有电影对象 movie_obj_list = models.Movie.select() # 添加未删除的电影列表 back_movie_list = [] if movie_obj_list: # 过滤已删除的电影 for movie_obj in movie_obj_list: # 没有删除则返回 if not movie_obj.is_delete: # 1 代表删除 if client_back_dic.get('movie_type') == 'all': back_movie_list.append( # [电影名称、是否免费、电影ID] [ movie_obj.name, '免费' if movie_obj.is_free else "收费", movie_obj.id ]) elif client_back_dic.get('movie_type') == 'free': # 判断哪些电影是免费的 if movie_obj.is_free: back_movie_list.append( [movie_obj.name, '免费', movie_obj.id]) else: if not movie_obj.is_free: back_movie_list.append( [movie_obj.name, '收费', movie_obj.id]) if back_movie_list: send_dic = {'flag': True, 'back_movie_list': back_movie_list} else: send_dic = {'flag': False, 'msg': '没有电影!'} else: send_dic = {'flag': False, 'msg': '没有电影!'} common.send_data(send_dic, conn)
def down_free_movie(client): if not user_data['session']: print('请先登录') return print('下载免费视频') ''' 先查询免费视频,打印出来, 用户选择后,通过电影id去后台下载 ''' send_dic['type'] = 'get_movie_list' send_dic['movie_type'] = 'free' send_dic['session'] = user_data['session'] back_dic = common.send_data(client, send_dic, None) if back_dic['flag']: for i, mo in enumerate(back_dic['movie_list']): print('%s : %s-->%s' % (i, mo[0], mo[1])) choose = input('请输入要下载的电影(数字):').strip() if choose.isdigit(): choose = int(choose) # 回忆后台返回的数据是什么样的 send_dic['type'] = 'download_movie' send_dic['session'] = user_data['session'] send_dic['movie_id'] = back_dic['movie_list'][choose][2] send_dic['movie_type'] = 'free' back_dic = common.send_data(client, send_dic, None) if back_dic['flag']: if back_dic['wait_time'] > 0: print('请等待 %s 秒' % back_dic['wait_time']) time.sleep(back_dic['wait_time']) recv_size = 0 print('----->', back_dic['filename']) path = os.path.join(setting.BASE_MOVIE_DOWN, back_dic['filename']) with open(path, 'wb') as f: while recv_size < back_dic['filesize']: recv_data = client.recv(1024) f.write(recv_data) recv_size += len(recv_data) print('recvsize:%s filesize:%s' % (recv_size, back_dic['filesize'])) print('%s :下载成功' % back_dic['filename']) else: print(back_dic['msg']) else: print(back_dic['msg'])
def upload_movie(client): if not admin_data['session']: print('请先登录') return print('上传视频') while True: up_list = common.get_allfile_by_path(setting.BASE_MOVIE_UP) if not up_list: print('暂无能上传的影片') break for i, m in enumerate(up_list): print('%s : %s' % (i, m)) choose = input('请选择要上传的影片').strip() if choose == 'q': break if choose.isdigit(): choose = int(choose) # 先把md5值传上去校验一下文件是否存在,在决定要不要上传 if choose >=len(up_list): print('请输入范围内的数字') continue movie_path = os.path.join(setting.BASE_MOVIE_UP, up_list[choose]) file_md5 = common.get_bigfile_md5(movie_path) send_dic={'type':'check_movie','session':admin_data['session'],'file_md5':file_md5} back_dic=common.send_data(client,send_dic,None) if back_dic['flag']: is_free = input('是否免费(y/n)>>:').strip() if is_free == 'y': is_free = 1 else: is_free = 0 fsize = os.path.getsize(movie_path) send_dic = {'type': 'upload', 'user_type': 'admin', 'session': admin_data['session'], 'file_name': up_list[choose], 'file_size': fsize, 'file_md5':common.get_bigfile_md5(movie_path),'is_free': is_free} back_dic = common.send_data(client, send_dic, movie_path) if back_dic['flag']: print(back_dic['msg']) break else: print(back_dic['msg']) else: print(back_dic['msg']) else: print('请输入数字')
def down_charge_movie(client): if not user_data['session']: print('请先登录') return print('下载收费视频') if user_data['is_vip']: charge = input('您是会员,收费5元(y 确认)').strip() else: charge = input('您不是会员,收费10元(y 确认)').strip() if not charge == 'y': # 不是y,相当于没付钱,直接返回 return send_dic['type'] = 'get_movie_list' send_dic['movie_type'] = 'charge' send_dic['session'] = user_data['session'] back_dic = common.send_data(client, send_dic, None) if back_dic['flag']: for i, mo in enumerate(back_dic['movie_list']): print('%s : %s-->%s' % (i, mo[0], mo[1])) choose = input('请输入要下载的电影(数字):').strip() if choose.isdigit(): choose = int(choose) # 回忆后台返回的数据是什么样的 send_dic['type'] = 'download_movie' send_dic['session'] = user_data['session'] send_dic['movie_id'] = back_dic['movie_list'][choose][2] send_dic['movie_type'] = 'charge' back_dic = common.send_data(client, send_dic, None) if back_dic['flag']: recv_size = 0 print('----->', back_dic['filename']) path = os.path.join(setting.BASE_MOVIE_DOWN, back_dic['filename']) with open(path, 'wb') as f: while recv_size < back_dic['filesize']: recv_data = client.recv(1024) f.write(recv_data) recv_size += len(recv_data) print('recvsize:%s filesize:%s' % (recv_size, back_dic['filesize'])) print('%s :下载成功' % back_dic['filename']) else: print(back_dic['msg']) else: print(back_dic['msg'])
def check_all_notice_interface(client_back_dic, conn): notice_obj_list = models.Notice.select() back_notice_list = [] if notice_obj_list: for notice_obj in notice_obj_list: title = notice_obj.title content = notice_obj.content back_notice_list.append({'title': title, 'content': content}) send_dic = {'flag': True, 'back_notice_list': back_notice_list} else: send_dic = {'flag': False, 'msg': '没有公告!'} common.send_data(send_dic, conn)
def check_movie_interface(client_back_dic, conn): file_md5 = client_back_dic.get('file_md5') movie_list = models.Movie.select(file_md5=file_md5) if movie_list: send_dic = { 'flag': False, 'msg': '电影已存在!' } else: send_dic = { 'flag': True, 'msg': '电影可以上传' } common.send_data(send_dic, conn)
def delete_movie(client): ''' 1 先拿到视频列表,打印 2 根据视频前数字,选择要删除的视频 3 删除成功/失败,打印 ''' if not admin_data['session']: print('请先登录') return print('删除视频') while True: send_dic['type'] = 'get_movie_list' send_dic['session'] = admin_data['session'] send_dic['movie_type'] = 'all' back_dic = common.send_data(client, send_dic, None) if back_dic['flag']: for i, mo in enumerate(back_dic['movie_list']): print('%s : %s--%s' % (i, mo[0], mo[1])) choose = input('请输入要删除的电影(数字):').strip() if choose == 'q': break if choose.isdigit(): choose = int(choose) if choose >= len(back_dic['movie_list']): print('请输入范围内的数字') continue send_dic['type'] = 'delete_movie' # 回忆后台返回的数据是什么样的 send_dic['movie_id'] = back_dic['movie_list'][choose][2] back_dic = common.send_data(client, send_dic, None) if back_dic['flag']: print(back_dic['msg']) break else: print(back_dic['msg']) else: print('请输入数字') else: print(back_dic['msg']) break
def delete_movie(client): ''' 1 先拿到视频列表,打印 2 根据视频前数字,选择要删除的视频 3 删除成功/失败,打印 ''' if not admin_data['session']: print('请先登录') return print('删除视频') while True: send_dic['type'] = 'get_movie_list' send_dic['session'] = admin_data['session'] send_dic['movie_type'] = 'all' back_dic = common.send_data(client, send_dic, None) if back_dic['flag']: for i, mo in enumerate(back_dic['movie_list']): print('%s : %s--%s' % (i, mo[0], mo[1])) choose = input('请输入要删除的电影(数字):').strip() if choose == 'q': break if choose.isdigit(): choose = int(choose) if choose >= len(back_dic['movie_list']): print('请输入范围内的数字') continue send_dic['type'] = 'delete_movie' # 回忆后台返回的数据是什么样的 send_dic['movie_id'] = back_dic['movie_list'][choose][2] back_dic = common.send_data(client, send_dic, None) if back_dic['flag']: print(back_dic['msg']) break else: print(back_dic['msg']) else: print('请输入数字') else: print(back_dic['msg']) break
def check_download_record(client): if not user_data['session']: print('请先登录') return print('查看观影记录') send_dic['type'] = 'check_download_record' send_dic['session'] = user_data['session'] back_dic = common.send_data(client, send_dic, None) if back_dic['flag']: for re in back_dic['download_list']: print(re) else: print(back_dic['msg'])
def check_notice(client): if not user_data['session']: print('请先登录') return print('查看公告') send_dic['type'] = 'check_notice' send_dic['session'] = user_data['session'] back_dic = common.send_data(client, send_dic, None) if back_dic['flag']: for value in back_dic['notice_list']: print(value) else: print(back_dic['msg'])
def get_movie_list(client): if not user_data['session']: print('请先登录') return print('查看视频列表') send_dic['type'] = 'get_movie_list' send_dic['movie_type'] = 'all' send_dic['session'] = user_data['session'] back_dic = common.send_data(client, send_dic, None) if back_dic['flag']: for i, mo in enumerate(back_dic['movie_list']): print('%s : %s-->%s' % (i, mo[0], mo[1])) else: print(back_dic['msg'])
def admin_login(client): print('管理员登录') while True: name = input('用户名>>').strip() if name == 'q': break password = input('密码>>').strip() send_dic = {'type': 'login', 'user_type': 'admin', 'name': name, 'password': common.make_md5(password)} back_dic = common.send_data(client, send_dic, None) if back_dic['flag']: admin_data['session'] = back_dic['session'] print(back_dic['msg']) break else: print(back_dic['msg'])
def check_download_record_interface(client_back_dic, conn): record_obj_list = models.DownloadRecord.select() user_id = client_back_dic.get('user_id') back_record_list = [] if record_obj_list: for record_obj in record_obj_list: if record_obj.user_id == user_id: # 获取当前用户下载电影记录的电影对象 movie_obj = models.Movie.select(id=record_obj.movie_id)[0] back_record_list.append(movie_obj.name) else: send_dic = {'flag': False, 'msg': '当前用户没有下载记录!'} send_dic = {'flag': True, 'record_list': back_record_list} else: send_dic = {'flag': False, 'msg': '没有任何下载记录!'} common.send_data(send_dic, conn)
def admin_register(client): print('管理员注册') while True: name = input('请输入手机号>>:').strip() if name == 'q': break password = input('请输入密码>>').strip() conf_password = input('请确认密码>>:').strip() if password == conf_password: send_dic = {'type': 'register', 'user_type': 'admin', 'name': name, 'password': common.make_md5(password)} back_dic = common.send_data(client, send_dic, None) if back_dic['flag']: print(back_dic['msg']) break else: print(back_dic['msg']) else: print('两次密码不一致')
def release_notice(client): if not admin_data['session']: print('请先登录') return print('发布公告') while True: notice_name = input('请输入公告标题:').strip() notice_content = input('请输入公告内容:').strip() if notice_name == 'q': break send_dic['type'] = 'release_notice' send_dic['session'] = admin_data['session'] send_dic['notice_name'] = notice_name send_dic['notice_content'] = notice_content back_dic = common.send_data(client, send_dic, None) if back_dic['flag']: print(back_dic['msg']) break else: print(back_dic['msg'])