def edit_animation(): """编辑轮播图""" form = AnimationEditForm().validate_for_api() animation = form.obj with db.auto_commit(): if form.name.data: animation.name = form.name.data try: file = request.files[form.logo.name] if not allowed_image_file(file.filename): return ReturnObj.get_response( ReturnEnum.IMAGE_TYPE_ERROR.value, "只允许上传png jpg jpeg gif格式") file_logo = secure_filename(file.filename) logo = change_filename(file_logo) file.save(os.path.join(current_app.config["LOGO_DIR"], logo)) animation.logo = urljoin(current_app.config["LOGO_PATH"], logo) except Exception as e: pass if form.url.data: animation.url = form.url.data if form.tag_id.data: animation.tag_id = form.tag_id.data db.session.add(animation) write_oplog() return ReturnObj.get_response(ReturnEnum.SUCCESS.value, "success")
def list_user(): """列出用户""" form = PageForm().validate_for_api() page_data = BaseUser.query if form.q.data: page_data = page_data.join(User, BaseUser.id == User.id). \ filter(or_(BaseUser.id == form.q.data, BaseUser.name.like("%" + form.q.data + "%"))) page_data = page_data.order_by(BaseUser.create_time.desc()). \ paginate(error_out=False, page=int(form.page.data), per_page=int(form.pagesize.data)) users = [] for i in page_data.items: user = User.query.filter(User.id == i.id).first() one = { "id": i.id, "name": i.name, "account": i.account, "gender": i.gender, "email": user.email if user else None, "phone": user.phone if user else None, "info": user.info if user else None, "face": user.face if user else None, "create_time": i.create_time.strftime("%Y-%m-%d %H:%M:%S"), } users.append(one) r = { "has_next": page_data.has_next, "has_prev": page_data.has_prev, "pages": page_data.pages, "page": page_data.page, "total": page_data.total, "users": users } write_oplog() return ReturnObj.get_response(ReturnEnum.SUCCESS.value, "success", data=r)
def del_video(): form = IdForm().validate_for_api() video = Video.query.get_or_404(form.id.data, "找不到该视频") with db.auto_commit(): db.session.delete(video) write_oplog() return ReturnObj.get_response(ReturnEnum.SUCCESS.value, "success")
def list_admin(): """分页列出管理员的信息""" form = PageForm().validate_for_api() page_data = BaseUser.query.join(Admin, Admin.id == BaseUser.id) if form.q.data: page_data = page_data.filter( or_(BaseUser.id == form.q.data, BaseUser.name.like("%" + form.q.data + "%"))) page_data = page_data.order_by(BaseUser.create_time.desc()). \ paginate(error_out=False, page=int(form.page.data), per_page=int(form.pagesize.data)) admins = [] for i in page_data.items: roles = [] for j in Role.query.join(UserRole, UserRole.role_id == Role.id).filter( UserRole.user_id == i.id).all(): role = {"id": j.id, "name": j.name} roles.append(role) admin = { "id": i.id, "account": i.account, "name": i.name, "gender": i.gender, "roles": roles } admins.append(admin) r = { "has_next": page_data.has_next, "has_prev": page_data.has_prev, "pages": page_data.pages, "page": page_data.page, "total": page_data.total, "admins": admins } write_oplog() return ReturnObj.get_response(ReturnEnum.SUCCESS.value, "success", data=r)
def list_module(): """列出权限模块""" form = PageForm().validate_for_api() page_data = AuthModule.query if form.q.data: page_data = page_data.filter(or_(AuthModule.id == form.q.data, AuthModule.name.like("%" + form.q.data + "%"))) page_data = page_data.order_by(AuthModule.create_time.desc()). \ paginate(error_out=False, page=int(form.page.data), per_page=int(form.pagesize.data)) modules = [] for i in page_data.items: module = { "id": i.id, "name": i.name, "module": i.module, "create_time": i.create_time.strftime("%Y-%m-%d %H:%M:%S") } modules.append(module) r = { "has_next": page_data.has_next, "has_prev": page_data.has_prev, "pages": page_data.pages, "page": page_data.page, "total": page_data.total, "modules": modules } write_oplog() return ReturnObj.get_response(ReturnEnum.SUCCESS.value, "success", data=r)
def list_animation(): """列出轮播图""" form = PageForm().validate_for_api() page_data = Animation.query if form.tag_id.data == -1: pass else: page_data = page_data.filter(Animation.tag_id == form.tag_id.data) if form.q.data: page_data = page_data.filter( or_(Animation.id == form.q.data, Animation.name.like("%" + form.q.data + "%"))) page_data = page_data.order_by(Animation.create_time.desc()). \ paginate(error_out=False, page=int(form.page.data), per_page=int(form.pagesize.data)) animations = [] for i in page_data.items: tag = Tag.query.filter(Tag.id == i.tag_id).first() animation = { "id": i.id, "tag": tag.name if tag else "未知", "name": i.name, "logo": i.logo, "url": i.url } animations.append(animation) r = { "has_next": page_data.has_next, "has_prev": page_data.has_prev, "pages": page_data.pages, "page": page_data.page, "total": page_data.total, "animations": animations } write_oplog() return ReturnObj.get_response(ReturnEnum.SUCCESS.value, "success", data=r)
def del_tag(): form = IdForm().validate_for_api() tag = Tag.query.filter(Tag.id == form.id.data).first_or_404("找不到该标签") with db.auto_commit(): db.session.delete(tag) write_oplog() return ReturnObj.get_response(ReturnEnum.SUCCESS.value, "success")
def add_video(): """添加番剧视频""" form = BangumiAddVideoForm().validate_for_api() bangumi = form.obj with db.auto_commit(): video = Video() video.name = form.name.data try: file = request.files[form.url.name] if not allowed_video_file(file.filename): return ReturnObj.get_response( ReturnEnum.VIDEO_TYPE_ERROR.value, "只允许上传mp4 avi flv wmv格式") file_url = secure_filename(file.filename) url = change_filename(file_url) file.save(os.path.join(current_app.config["VIDEO_DIR"], url)) try: video_clip = VideoFileClip( os.path.join(current_app.config["VIDEO_DIR"], url)) video.length = video_clip.duration video_clip.reader.close() video_clip.audio.reader.close_proc() except Exception as e: print(e) video.length = None video.url = urljoin(current_app.config["VIDEO_PATH"], url) except Exception as e: return ReturnObj.get_response(ReturnEnum.UPLOAD_VIDEO.value, "请上传视频") try: file = request.files[form.logo.name] if not allowed_image_file(file.filename): return ReturnObj.get_response( ReturnEnum.IMAGE_TYPE_ERROR.value, "只允许上传png jpg jpeg gif格式") file_logo = secure_filename(file.filename) logo = change_filename(file_logo) file.save(os.path.join(current_app.config["LOGO_DIR"], logo)) video.logo = urljoin(current_app.config["LOGO_PATH"], logo) except Exception as e: return ReturnObj.get_response(ReturnEnum.UPLOAD_VIDEO_LOGO.value, "请上传视频封面") db.session.add(video) with db.auto_commit(): video = Video.query.filter(Video.name == form.name.data).order_by( Video.create_time.desc()).first() bangumi.episodes += 1 bangumi.new_piece += 1 if form.is_finish.data == 1: bangumi.is_finish = 1 db.session.add(bangumi) with db.auto_commit(): episode = Episode() episode.video_id = video.id episode.bangumi_id = bangumi.id episode.piece = bangumi.new_piece db.session.add(episode) write_oplog() return ReturnObj.get_response(ReturnEnum.SUCCESS.value, "success")
def del_animation(): """删除轮播图""" form = IdForm().validate_for_api() animation = Animation.query.get_or_404(form.id.data, "找不到该轮播图") with db.auto_commit(): db.session.delete(animation) write_oplog() return ReturnObj.get_response(ReturnEnum.SUCCESS.value, "success")
def add_user(): """添加用户""" form = AdminAddUserForm().validate_for_api() baseuser = register_user(form) write_oplog() return ReturnObj.get_response(ReturnEnum.SUCCESS.value, "success", data={"id": baseuser.id})
def del_comment(): """删除评论""" form = IdForm().validate_for_api() comment = Comment.query.filter(Comment.id == form.id.data).first_or_404(description="找不到该评论") with db.auto_commit(): db.session.delete(comment) write_oplog() return ReturnObj.get_response(ReturnEnum.SUCCESS.value, "success")
def del_by_video(): """根据视频id删除该视频的所有评论""" form = IdForm().validate_for_api() comments = Comment.query.filter(Comment.video_id == form.id.data).all() with db.auto_commit(): for i in comments: db.session.delete(i) write_oplog() return ReturnObj.get_response(ReturnEnum.SUCCESS.value, "success")
def add_module(): """添加一个权限模块""" form = AuthModuleForm().validate_for_api() with db.auto_commit(): authmodule = AuthModule() authmodule.name = form.name.data authmodule.module = form.module.data db.session.add(authmodule) write_oplog() return ReturnObj.get_response(ReturnEnum.SUCCESS.value, "success")
def add_tag(): form = TagAddForm().validate_for_api() with db.auto_commit(): tag = Tag() if form.parent_id.data: tag.parent_id = form.parent_id.data tag.name = form.name.data tag.info = form.info.data db.session.add(tag) write_oplog() return ReturnObj.get_response(ReturnEnum.SUCCESS.value, "success")
def edit_module(): """编辑权限模块""" form = AuthModuleEditForm().validate_for_api() authmodule = form.obj with db.auto_commit(): if form.module.data: authmodule.module = form.module.data if form.name.data: authmodule.name = form.name.data db.session.add(authmodule) write_oplog() return ReturnObj.get_response(ReturnEnum.SUCCESS.value, "success")
def del_bangumi(): form = IdForm().validate_for_api() bangumi = Bangumi.query.get_or_404(form.id.data, "找不到该番剧") with db.auto_commit(): # 将状态设为0,下架 if form.status.data == 1: bangumi.status = 1 elif form.status.data == 0: bangumi.status = 0 db.session.add(bangumi) write_oplog() return ReturnObj.get_response(ReturnEnum.SUCCESS.value, "success")
def edit_uploadvideo(): """编辑审核状态""" form = VerificationForm().validate_for_api() verification = form.verification try: verification.status = form.status.data verification.admin_id = current_user.id db.session.add(verification) db.session.commit() except Exception as e: print(e) db.session.rollback() uploadvideo = form.uploadvideo if verification.status == 1: # 审核通过 try: # 审核通过,添加到视频表 video = Video() video.user_id = uploadvideo.user_id video.tag_id = uploadvideo.tag_id video.name = uploadvideo.name video.info = uploadvideo.info # 更换视频封面文件位置 file_name = uploadvideo.logo.rsplit("/", 1)[1] src = os.path.join(current_app.config["TMP_DIR"], file_name) if os.path.isfile(src): des = os.path.join(current_app.config["LOGO_DIR"], file_name) shutil.move(src, des) else: return ReturnObj.get_response( ReturnEnum.UPLOAD_VIDEO_LOGO.value, "上传视频封面不存在") video.logo = uploadvideo.logo.replace("tmp", "logo") # 更换视频文件位置 file_name = uploadvideo.url.rsplit("/", 1)[1] src = os.path.join(current_app.config["TMP_DIR"], file_name) if os.path.isfile(src): des = os.path.join(current_app.config["VIDEO_DIR"], file_name) shutil.move(src, des) else: return ReturnObj.get_response( ReturnEnum.UPLOADVIDE0_NOT_EXIST.value, "上传视频不存在") video.url = uploadvideo.url.replace("tmp", "video") video.release_time = datetime.now() db.session.add(video) except Exception as e: print(e) db.session.rollback() write_oplog() return ReturnObj.get_response(ReturnEnum.SUCCESS.value, "success")
def del_module(): """删除权限模块""" form = IdForm().validate_for_api() authmodule = AuthModule.query.filter(AuthModule.id == form.id.data). \ first_or_404("找不到该权限模块") with db.auto_commit(): # 先删除该模块的下所有接口 for i in AuthApi.query.filter(AuthApi.module_id == authmodule.id).all(): db.session.delete(i) # 再删除该模块 db.session.delete(authmodule) write_oplog() return ReturnObj.get_response(ReturnEnum.SUCCESS.value, "success")
def add_video(): form = VideoAddForm() # 每次刷新列表,动态加载最新的标签 # form.tag_id.choices = [(v.id, v.name) for v in Tag.query.all()] form.validate_for_api() with db.auto_commit(): video = Video() video.name = form.name.data try: file = request.files[form.url.name] if not allowed_video_file(file.filename): return ReturnObj.get_response( ReturnEnum.VIDEO_TYPE_ERROR.value, "只允许上传mp4 avi flv wmv格式") file_url = secure_filename(file.filename) url = change_filename(file_url) file.save(os.path.join(current_app.config["VIDEO_DIR"], url)) try: video_clip = VideoFileClip( os.path.join(current_app.config["VIDEO_DIR"], url)) video.length = video_clip.duration video_clip.reader.close() video_clip.audio.reader.close_proc() except Exception as e: print(e) video.length = None video.url = urljoin(current_app.config["VIDEO_PATH"], url) except Exception as e: return ReturnObj.get_response(ReturnEnum.UPLOAD_VIDEO.value, "请上传视频") try: file = request.files[form.logo.name] if not allowed_image_file(file.filename): return ReturnObj.get_response( ReturnEnum.IMAGE_TYPE_ERROR.value, "只允许上传png jpg jpeg gif格式") file_logo = secure_filename(file.filename) logo = change_filename(file_logo) file.save(os.path.join(current_app.config["LOGO_DIR"], logo)) video.logo = urljoin(current_app.config["LOGO_PATH"], logo) except Exception as e: return ReturnObj.get_response(ReturnEnum.UPLOAD_VIDEO_LOGO.value, "请上传视频封面") # 默认所属用户为pilipili番剧 video.user_id = 6666 video.info = form.info.data # 默认所属标签为连载动画 video.tag_id = 18 db.session.add(video) write_oplog() return ReturnObj.get_response(ReturnEnum.SUCCESS.value, "success")
def add_admin(): """添加管理员""" form = AdminAddForm() # 动态加载最新的角色列表 form.role_id.choices = [(v.id, v.id) for v in Role.query.all()] # 验证 form.validate_for_api() baseuser = register_admin(form) if baseuser: write_oplog() return ReturnObj.get_response(ReturnEnum.SUCCESS.value, "success", data={"id": baseuser.id}) return ReturnObj.get_response(ReturnEnum.FAIL.value, "fail")
def del_role(): form = IdForm().validate_for_api() role = Role.query.filter(Role.id == form.id.data).first_or_404(description="找不到该角色") with db.auto_commit(): # 删除该角色所拥有的权限关联 for role_auth in RoleAuth.query.filter(RoleAuth.role_id == role.id).all(): db.session.delete(role_auth) # 删除拥有该角色的用户关联 for user_role in UserRole.query.filter(UserRole.role_id == role.id).all(): db.session.delete(user_role) # 删除该角色 db.session.delete(role) write_oplog() return ReturnObj.get_response(ReturnEnum.SUCCESS.value, "success")
def add_role(): form = RoleAddForm() form.auths.choices = [(v.id, v.id) for v in AuthModule.query.all()] form.validate_for_api() with db.auto_commit(): # 添加角色 role = Role(name=form.name.data) db.session.add(role) # 关联权限 with db.auto_commit(): role = Role.query.filter(Role.name == form.name.data).first() for i in form.auths.data: db.session.add(RoleAuth(role_id=role.id, auth_id=i)) write_oplog() return ReturnObj.get_response(ReturnEnum.SUCCESS.value, "success")
def edit_video(): form = VideoEditForm() # form.tag_id.choices = [(v.id, v.name) for v in Tag.query.all()] form.validate_for_api() # 验证通过,从obj中获取查找到的对象 video = form.obj with db.auto_commit(): if form.name.data: video.name = form.name.data if form.info.data: video.info = form.info.data try: file = request.files[form.url.name] if not allowed_video_file(file.filename): return ReturnObj.get_response( ReturnEnum.VIDEO_TYPE_ERROR.value, "只允许上传mp4 avi flv wmv格式") file_url = secure_filename(file.filename) url = change_filename(file_url) file.save(os.path.join(current_app.config["VIDEO_DIR"], url)) try: video_clip = VideoFileClip( os.path.join(current_app.config["VIDEO_DIR"], url)) video.length = video_clip.duration video_clip.reader.close() video_clip.audio.reader.close_proc() except Exception as e: print(e) video.length = None video.url = urljoin(current_app.config["VIDEO_PATH"], url) except Exception as e: pass try: file = request.files[form.logo.name] if not allowed_image_file(file.filename): return ReturnObj.get_response( ReturnEnum.IMAGE_TYPE_ERROR.value, "只允许上传png jpg jpeg gif格式") file_logo = secure_filename(file.filename) logo = change_filename(file_logo) file.save(os.path.join(current_app.config["LOGO_DIR"], logo)) video.logo = urljoin(current_app.config["LOGO_PATH"], logo) except Exception as e: pass # if form.tag_id.data: # video.tag_id = form.tag_id.data write_oplog() return ReturnObj.get_response(ReturnEnum.SUCCESS.value, "success")
def list_video(): form = PageForm().validate_for_api() page_data = Video.query if form.tag_id.data == -1: pass else: sub_tags = [ i.id for i in Tag.query.filter(Tag.parent_id == form.tag_id.data).all() ] page_data = page_data.filter( or_(Video.tag_id == form.tag_id.data, Video.tag_id.in_(sub_tags))) if form.q.data: page_data = page_data.filter( or_(Video.id == form.q.data, Video.name.like("%" + form.q.data + "%"))) page_data = page_data.order_by(Video.create_time.desc()). \ paginate(error_out=False, page=int(form.page.data), per_page=int(form.pagesize.data)) videos = [] for i in page_data.items: tag = Tag.query.filter(Tag.id == i.tag_id).first() video = { "id": i.id, "name": i.name, "logo": i.logo, "playnum": i.playnum, "commentnum": i.commentnum, "danmunum": i.danmunum, "colnum": i.colnum, "url": i.url, "info": i.info, "tag": { "id": tag.id if tag else "未知", "name": tag.name if tag else "未知", }, "release_time": i.release_time.strftime("%Y-%m-%d %H:%M:%S"), } videos.append(video) r = { "has_next": page_data.has_next, "has_prev": page_data.has_prev, "pages": page_data.pages, "page": page_data.page, "total": page_data.total, "videos": videos } write_oplog() return ReturnObj.get_response(ReturnEnum.SUCCESS.value, "success", data=r)
def list_uploadvideo(): """查看审核视频""" form = ListUploadVideoForm().validate_for_api() page_data = UploadVideo.query if form.status.data == -1: pass else: page_data = page_data.join(Verification, UploadVideo.id == Verification.video_id). \ filter(Verification.status == form.status.data) page_data = page_data.order_by(UploadVideo.create_time.asc()). \ paginate(error_out=False, page=int(form.page.data), per_page=int(form.pagesize.data)) uploadvideos = [] for i in page_data.items: tag = Tag.query.filter(Tag.id == i.tag_id).first() baseuser = BaseUser.query.filter(BaseUser.id == i.user_id).first() verification = Verification.query.filter( Verification.video_id == i.id).first() one = { "id": i.id, "name": i.name, "url": i.url, "info": i.info, "logo": i.logo, "tag": { "id": tag.id if tag else "未知", "name": tag.name if tag else "未知" }, "user": { "id": baseuser.id if baseuser else "未知", "name": baseuser.name if baseuser else "未知", }, "status": verification.status, "upload_time": i.upload_time.strftime("%Y-%m-%d %H:%M:%S"), } uploadvideos.append(one) r = { "has_next": page_data.has_next, "has_prev": page_data.has_prev, "pages": page_data.pages, "page": page_data.page, "total": page_data.total, "uploadvideos": uploadvideos } write_oplog() return ReturnObj.get_response(ReturnEnum.SUCCESS.value, "success", data=r)
def edit_user(): """编辑用户""" form = AdminEditUserForm().validate_for_api() baseuser = form.baseuser user = form.user try: if form.name.data: baseuser.name = form.name.data if form.gender.data: baseuser.gender = form.gender.data if form.pwd.data: baseuser.pwd = form.pwd.data db.session.add(baseuser) db.session.commit() except Exception as e: db.session.rollback() print(e) try: if form.email.data: user.email = form.email.data if form.phone.data: user.phone = form.phone.data if form.info.data: user.info = form.info.data try: file = request.files[form.face.name] if not allowed_image_file(file.filename): return ReturnObj.get_response( ReturnEnum.IMAGE_TYPE_ERROR.value, "只允许上传png jpg jpeg gif格式") file_face = secure_filename(file.filename) face = change_filename(file_face) file.save(os.path.join(current_app.config["FACE_DIR"], face)) user.face = urljoin(current_app.config["FACE_PATH"], face) except BadRequestKeyError as e: pass db.session.add(user) db.session.commit() except Exception as e: db.session.rollback() print(e) write_oplog() return ReturnObj.get_response(ReturnEnum.SUCCESS.value, "success", data={"id": baseuser.id})
def list_loginlog(): """列出登录日志""" form = ListLogForm().validate_for_api() page_data = LoginLog.query if form.tag_id.data == -1: pass elif form.tag_id.data == 0: # 查询普通用户 page_data = page_data.join(User, User.id == LoginLog.user_id) else: # 查询管理员 page_data = page_data.join(Admin, Admin.id == LoginLog.user_id) if form.q.data: page_data = page_data.join(BaseUser, BaseUser.id == LoginLog.user_id). \ filter(or_(BaseUser.id == form.q.data, BaseUser.name.like("%" + form.q.data + "%"))) if form.start_date.data: page_data = page_data.filter( LoginLog.create_time.between(form.start_date.data, form.end_date.data)) page_data = page_data.order_by(LoginLog.create_time.desc()). \ paginate(error_out=False, page=int(form.page.data), per_page=int(form.pagesize.data)) loginlogs = [] for i in page_data.items: baseuser = BaseUser.query.filter(BaseUser.id == i.user_id).first() one = { "id": i.id, "user": { "id": baseuser.id if baseuser else "未知", "name": baseuser.name if baseuser else "未知", }, "ip": i.ip, "location": i.location, "create_time": i.create_time.strftime("%Y-%m-%d %H:%M:%S") } loginlogs.append(one) r = { "has_next": page_data.has_next, "has_prev": page_data.has_prev, "pages": page_data.pages, "page": page_data.page, "total": page_data.total, "loginlogs": loginlogs } write_oplog() return ReturnObj.get_response(ReturnEnum.SUCCESS.value, "success", data=r)
def edit_role(): form = RoleEditForm() form.auths.choices = [(v.id, v.id) for v in AuthModule.query.all()] form.validate_for_api() role = form.obj with db.auto_commit(): if form.name.data: role.name = form.name.data db.session.add(role) if form.auths.data: # 删除原来的权限 for i in RoleAuth.query.filter(RoleAuth.role_id == role.id).all(): db.session.delete(i) # 添加新的权限 for i in form.auths.data: db.session.add(RoleAuth(role_id=role.id, auth_id=i)) write_oplog() return ReturnObj.get_response(ReturnEnum.SUCCESS.value, "success")
def del_user(): """删除用户""" form = IdForm().validate_for_api() user = User.query.get_or_404(form.id.data, "找不到该用户") admin = Admin.query.filter(Admin.id == user.id).first() if admin: return ReturnObj.get_response(ReturnEnum.ADMIN_DEL_ERROR.value, "该用户也是管理员,不能删除") with db.auto_commit(): # 删除用户的角色关联 user_role = UserRole.query.filter(UserRole.user_id == user.id).all() for i in user_role: db.session.delete(i) # 删除用户额外信息 db.session.delete(user) # 删除用户基本信息 baseuser = BaseUser.query.filter(BaseUser.id == user.id).first() db.session.delete(baseuser) write_oplog() return ReturnObj.get_response(ReturnEnum.SUCCESS.value, "success")
def list_viewlog(): """列出用户观看日志""" form = ListLogForm().validate_for_api() page_data = ViewLog.query if form.q.data: page_data = page_data.join(BaseUser, BaseUser.id == ViewLog.user_id). \ filter(or_(BaseUser.id == form.q.data, BaseUser.name.like("%" + form.q.data + "%"))) if form.start_date.data: page_data = page_data.filter( ViewLog.create_time.between(form.start_date.data, form.end_date.data)) if form.video_id.data: page_data = page_data.filter(ViewLog.video_id == form.video_id.data) page_data = page_data.order_by(ViewLog.create_time.desc()). \ paginate(error_out=False, page=int(form.page.data), per_page=int(form.pagesize.data)) viewlogs = [] for i in page_data.items: baseuser = BaseUser.query.filter(BaseUser.id == i.user_id).first() video = Video.query.filter(Video.id == i.video_id).first() one = { "user": { "id": baseuser.id if baseuser else "未知", "name": baseuser.name if baseuser else "未知", }, "video": { "id": video.id if video else "未知", "name": video.name if video else "未知", }, "update_time": i.update_time.strftime("%Y-%m-%d %H:%M:%S") } viewlogs.append(one) r = { "has_next": page_data.has_next, "has_prev": page_data.has_prev, "pages": page_data.pages, "page": page_data.page, "total": page_data.total, "viewlogs": viewlogs } write_oplog() return ReturnObj.get_response(ReturnEnum.SUCCESS.value, "success", data=r)