700字范文,内容丰富有趣,生活中的好帮手!
700字范文 > 〖Python 数据库开发实战 - Python与MySQL交互篇⑮〗- 项目实战 - 实现新闻管理 - 删除新闻功能

〖Python 数据库开发实战 - Python与MySQL交互篇⑮〗- 项目实战 - 实现新闻管理 - 删除新闻功能

时间:2020-07-07 10:49:19

相关推荐

〖Python 数据库开发实战 - Python与MySQL交互篇⑮〗- 项目实战 - 实现新闻管理 - 删除新闻功能

前言

✌ 作者简介:渴望力量的哈士奇 ✌,大家可以叫我 🐶哈士奇🐶 ,一位致力于 TFS - 全栈 赋能的博主 ✌

🏆 CSDN博客专家认证、新星计划第三季全栈赛道 MVP 、华为云享专家、阿里云专家博主 🏆

📫 如果文章知识点有错误的地方,请指正!和大家一起学习,一起进步👀

💬 人生格言:优于别人,并不高贵,真正的高贵应该是优于过去的自己。💬

🔥 如果感觉博主的文章还不错的话,还请👍关注、点赞、收藏三连支持👍一下博主哦

文章目录

🐳 实现删除新闻功能 - "news_dao.py" - 编写删除新闻功能 - search_list() 方法🐳 实现删除新闻功能 - "news_service.py" - 编写删除新闻功能 - search_list() 方法🐳 实现删除新闻功能 - "news_dao.py" - 编写删除新闻功能 - search_count_page 方法🐳 实现删除新闻功能 - "news_service.py" - 编写删除新闻功能 - search_count_page 方法🐳 实现删除新闻功能 - "news_dao.py" - 编写删除新闻功能 - delete_by_id 方法🐳 实现删除新闻功能 - "news_service.py" - 编写删除新闻功能 - delete_by_id 方法🐳 实现删除新闻功能 - "app.py" - 编写删除新闻功能

在上一章节我们实现了 “新闻管理系统” 的 “审批新闻” 的功能,接下来我们就来实现一下 “删除新闻” 的功能吧。

🐳 实现删除新闻功能 - “news_dao.py” - 编写删除新闻功能 - search_list() 方法

实现思路: 删除的新闻对象 —> 全部的新闻,不区分 “待审核” 、“已审核” 状态 ,所以 SQL 语句为查找全部新闻的记录所以,先查询全部的新闻记录,再根据展示在终端的新闻记录在数据库的索引位进行删除。 重点新增了 “查询新闻列表” -第 86 行 - 第 114 行

# coding:utf-8from db.mysql_db import pool"""定义 NewsDao 类"""class NewsDao:"""查询待审批新闻列表1、定义 search_unreview_list 方法,传入参数 page2、针对 search_unreview_list 方法,进行异常捕获"""def search_unreview_list(self, page): # 定义 search_unreview_list;查询 "待审批" 新闻列表try:# try 语句捕获异常con=pool.get_connection() # 定义一个连接(从连接池取出一个连接)cursor=con.cursor() # 创建游标"""1、将查询待审批新闻列表 SQL语句 赋值给 sql2、使用表连接将查询到的新闻记录进行 分页 ,每一页 10条记录;"新闻表、类型表、用户表"3、根据 creat_time 字段降序排列,也就是最新的新闻排在最上面"""sql="SELECT n.id,n.title,t.type,u.username " \"FROM t_news n JOIN t_type t ON n.type_id=t.id " \"JOIN t_user u ON n.editor_id=u.id " \"WHERE n.state=%s " \"ORDER BY n.create_time DESC " \"LIMIT %s,%s"cursor.execute(sql, ("待审批", (page-1)*10, 10))# 将 page 换算为起始位置 和偏移量# 举例:显示第一页 --> page为1# '(1-1)*10 ,10'为查询第0位开始,偏移10的记录,则就是前十条记录# 同理:第二页记录从第 10 条记录开始,为 '(2-1)*10 ,10'result=cursor.fetchall() # 将查询的结果集 赋值 给 result ; 获取全部结果集 使用 fetchall()方法。return resultexcept Exception as e:print(e)finally:if "con" in dir():con.close()"""查询 "待审批新闻" 的总页数1、定义 search_unreview_count_page 方法,不需要传入参数2、针对 search_unreview_count_page 方法,进行异常捕获"""def search_unreview_count_page(self):try:con=pool.get_connection()cursor=con.cursor()"""将 "查询待审批新闻"总数分页的 SQL语句 赋值给 sql"""sql="SELECT CEIL(COUNT(*)/10) FROM t_news WHERE state=%s" # CEIL() 函数是结果有小数位,强制进一位。cursor.execute(sql, ["待审批"])count_page=cursor.fetchone()[0] # 查询结果集只有一条记录,所以这里使用 fetchone()return count_pageexcept Exception as e:print(e)finally:if "con" in dir():con.close()"""审批新闻1、定义 update_unreview_news() 方法,传入参数 id2、针对 update_unreview_news() 方法,进行异常捕获"""def update_unreview_news(self, id):try:con = pool.get_connection()con.start_transaction()cursor = con.cursor()sql = "UPDATE t_news SET state=%s WHERE id=%s"# 预编译 "待审批新闻" SQL语句,将其变更为 "已审批"cursor.execute(sql, ("已审批", id))mit()except Exception as e:if "con" in dir():con.rollback()print(e)finally:if "con" in dir():con.close()"""查询新闻列表1、定义 search_list() 方法,传入参数 page , 查询全部 新闻列表 的SQL语句赋值给 sql2、针对 search_list() 方法,进行异常捕获。"""def search_list(self, page):try:# try 语句捕获异常con=pool.get_connection() # 定义一个连接(从连接池取出一个连接)cursor=con.cursor() # 创建游标"""1、将查询待审批新闻列表 SQL语句 赋值给 sql2、使用表连接将查询到的新闻记录进行 分页 ,每一页 10条记录;"新闻表、类型表、用户表""""sql="SELECT n.id,n.title,t.type,u.username " \"FROM t_news n JOIN t_type t ON n.type_id=t.id " \"JOIN t_user u ON n.editor_id=u.id " \"ORDER BY n.create_time DESC " \"LIMIT %s,%s"cursor.execute(sql, ((page-1)*10, 10))# 将 page 换算为起始位置 和偏移量# 举例:显示第一页 --> page为1# '(1-1)*10 ,10'为查询第0位开始,偏移10的记录,则就是前十条记录# 同理:第二页记录从第 10 条记录开始,为 '(2-1)*10 ,10'result=cursor.fetchall() # 将查询的结果集 赋值 给 result ; 获取全部结果集 使用 fetchall()方法。return resultexcept Exception as e:print(e)finally:if "con" in dir():con.close()

🐳 实现删除新闻功能 - “news_service.py” - 编写删除新闻功能 - search_list() 方法

重点新增了 “查询新闻列表” -第 36 行 - 第 42 行

# coding:utf-8from db.news_dao import NewsDao"""定义 NewsService 类"""class NewsService:__new_dao = NewsDao() # 实例化 NewsDao ,赋值给私有变量 __new_dao"""1、查询待审批新闻列表;定义 search_unreview_list 方法,传入参数 page2、调用 __new_dao 实例 的 search_unreview_list 方法,赋值给 "result",并返回结果"""def search_unreview_list(self, page):result = self.__new_dao.search_unreview_list(page)return result"""1、查询 "待审批新闻" 的总页数;定义 search_unreview_count_page 方法,不需要传入参数2、调用 __new_dao 实例 的 search_unreview_count_page 方法,赋值给 "count_page",并返回结果"""def search_unreview_count_page(self):count_page = self.__new_dao.search_unreview_count_page()return count_page"""1、审批新闻;定义 update_unreview_news() 方法,传入参数 id。2、调用 __new_dao 实例 的 update_unreview_news() 方法"""def update_unreview_news(self, id):self.__new_dao.update_unreview_news(id)"""1、查询新闻列表;定义 search_list() 方法,传入参数 apge2、调用 __new_dao 实例 的 update_unreview_news() 方法"""def search_list(self, page):result = self.__new_dao.search_list(page)return result

🐳 实现删除新闻功能 - “news_dao.py” - 编写删除新闻功能 - search_count_page 方法

重点新增了 “查询新闻总页数” -第 116 行 - 第 134 行

# coding:utf-8from db.mysql_db import pool"""定义 NewsDao 类"""class NewsDao:"""查询待审批新闻列表1、定义 search_unreview_list 方法,传入参数 page2、针对 search_unreview_list 方法,进行异常捕获"""def search_unreview_list(self, page): # 定义 search_unreview_list;查询 "待审批" 新闻列表try:# try 语句捕获异常con=pool.get_connection() # 定义一个连接(从连接池取出一个连接)cursor=con.cursor() # 创建游标"""1、将查询待审批新闻列表 SQL语句 赋值给 sql2、使用表连接将查询到的新闻记录进行 分页 ,每一页 10条记录;"新闻表、类型表、用户表"3、根据 creat_time 字段降序排列,也就是最新的新闻排在最上面"""sql="SELECT n.id,n.title,t.type,u.username " \"FROM t_news n JOIN t_type t ON n.type_id=t.id " \"JOIN t_user u ON n.editor_id=u.id " \"WHERE n.state=%s " \"ORDER BY n.create_time DESC " \"LIMIT %s,%s"cursor.execute(sql, ("待审批", (page-1)*10, 10))# 将 page 换算为起始位置 和偏移量# 举例:显示第一页 --> page为1# '(1-1)*10 ,10'为查询第0位开始,偏移10的记录,则就是前十条记录# 同理:第二页记录从第 10 条记录开始,为 '(2-1)*10 ,10'result=cursor.fetchall() # 将查询的结果集 赋值 给 result ; 获取全部结果集 使用 fetchall()方法。return resultexcept Exception as e:print(e)finally:if "con" in dir():con.close()"""查询 "待审批新闻" 的总页数1、定义 search_unreview_count_page 方法,不需要传入参数2、针对 search_unreview_count_page 方法,进行异常捕获"""def search_unreview_count_page(self):try:con=pool.get_connection()cursor=con.cursor()"""将 "查询待审批新闻"总数分页的 SQL语句 赋值给 sql"""sql="SELECT CEIL(COUNT(*)/10) FROM t_news WHERE state=%s" # CEIL() 函数是结果有小数位,强制进一位。cursor.execute(sql, ["待审批"])count_page=cursor.fetchone()[0] # 查询结果集只有一条记录,所以这里使用 fetchone()return count_pageexcept Exception as e:print(e)finally:if "con" in dir():con.close()"""审批新闻1、定义 update_unreview_news() 方法,传入参数 id2、针对 update_unreview_news() 方法,进行异常捕获"""def update_unreview_news(self, id):try:con = pool.get_connection()con.start_transaction()cursor = con.cursor()sql = "UPDATE t_news SET state=%s WHERE id=%s"# 预编译 "待审批新闻" SQL语句,将其变更为 "已审批"cursor.execute(sql, ("已审批", id))mit()except Exception as e:if "con" in dir():con.rollback()print(e)finally:if "con" in dir():con.close()"""查询新闻列表1、定义 search_list() 方法,传入参数 page , 查询全部 新闻记录 的SQL语句赋值给 sql2、针对 search_list() 方法,进行异常捕获。"""def search_list(self, page):try:# try 语句捕获异常con=pool.get_connection() # 定义一个连接(从连接池取出一个连接)cursor=con.cursor() # 创建游标"""1、将查询待审批新闻列表 SQL语句 赋值给 sql2、使用表连接将查询到的新闻记录进行 分页 ,每一页 10条记录;"新闻表、类型表、用户表""""sql="SELECT n.id,n.title,t.type,u.username " \"FROM t_news n JOIN t_type t ON n.type_id=t.id " \"JOIN t_user u ON n.editor_id=u.id " \"ORDER BY n.create_time DESC " \"LIMIT %s,%s"cursor.execute(sql, ((page-1)*10, 10))# 将 page 换算为起始位置 和偏移量# 举例:显示第一页 --> page为1# '(1-1)*10 ,10'为查询第0位开始,偏移10的记录,则就是前十条记录# 同理:第二页记录从第 10 条记录开始,为 '(2-1)*10 ,10'result=cursor.fetchall() # 将查询的结果集 赋值 给 result ; 获取全部结果集 使用 fetchall()方法。return resultexcept Exception as e:print(e)finally:if "con" in dir():con.close()"""查询新闻总页数"""def search_count_page(self):try:con=pool.get_connection()cursor=con.cursor()"""将 "查询新闻总页数" SQL语句 赋值给 sql"""sql="SELECT CEIL(COUNT(*)/10) FROM t_news" # CEIL() 函数是结果有小数位,强制进一位。cursor.execute(sql)count_page=cursor.fetchone()[0] # 查询结果集只有一条记录,所以这里使用 fetchone()return count_pageexcept Exception as e:print(e)finally:if "con" in dir():con.close()

🐳 实现删除新闻功能 - “news_service.py” - 编写删除新闻功能 - search_count_page 方法

重点新增了 “查询新闻总页数” -第 44 行 - 第 49 行

# coding:utf-8from db.news_dao import NewsDao"""定义 NewsService 类"""class NewsService:__new_dao = NewsDao() # 实例化 NewsDao ,赋值给私有变量 __new_dao"""1、查询待审批新闻列表;定义 search_unreview_list 方法,传入参数 page2、调用 __new_dao 实例 的 search_unreview_list 方法,赋值给 "result",并返回结果"""def search_unreview_list(self, page):result = self.__new_dao.search_unreview_list(page)return result"""1、查询 "待审批新闻" 的总页数;定义 search_unreview_count_page 方法,不需要传入参数2、调用 __new_dao 实例 的 search_unreview_count_page 方法,赋值给 "count_page",并返回结果"""def search_unreview_count_page(self):count_page = self.__new_dao.search_unreview_count_page()return count_page"""1、审批新闻;定义 update_unreview_news() 方法,传入参数 id。2、调用 __new_dao 实例 的 update_unreview_news() 方法"""def update_unreview_news(self, id):self.__new_dao.update_unreview_news(id)"""1、查询新闻列表;定义 search_list() 方法,传入参数 apge2、调用 __new_dao 实例 的 update_unreview_news() 方法"""def search_list(self, page):result = self.__new_dao.search_list(page)return result"""查询新闻总页数"""def search_count_page(self):count_page = self.__new_dao.search_count_page()return count_page

🐳 实现删除新闻功能 - “news_dao.py” - 编写删除新闻功能 - delete_by_id 方法

重点新增了 “删除新闻” -第 136 行 - 第 155 行

# coding:utf-8from db.mysql_db import pool"""定义 NewsDao 类"""class NewsDao:"""查询待审批新闻列表1、定义 search_unreview_list 方法,传入参数 page2、针对 search_unreview_list 方法,进行异常捕获"""def search_unreview_list(self, page): # 定义 search_unreview_list;查询 "待审批" 新闻列表try:# try 语句捕获异常con=pool.get_connection() # 定义一个连接(从连接池取出一个连接)cursor=con.cursor() # 创建游标"""1、将查询待审批新闻列表 SQL语句 赋值给 sql2、使用表连接将查询到的新闻记录进行 分页 ,每一页 10条记录;"新闻表、类型表、用户表"3、根据 creat_time 字段降序排列,也就是最新的新闻排在最上面"""sql="SELECT n.id,n.title,t.type,u.username " \"FROM t_news n JOIN t_type t ON n.type_id=t.id " \"JOIN t_user u ON n.editor_id=u.id " \"WHERE n.state=%s " \"ORDER BY n.create_time DESC " \"LIMIT %s,%s"cursor.execute(sql, ("待审批", (page-1)*10, 10))# 将 page 换算为起始位置 和偏移量# 举例:显示第一页 --> page为1# '(1-1)*10 ,10'为查询第0位开始,偏移10的记录,则就是前十条记录# 同理:第二页记录从第 10 条记录开始,为 '(2-1)*10 ,10'result=cursor.fetchall() # 将查询的结果集 赋值 给 result ; 获取全部结果集 使用 fetchall()方法。return resultexcept Exception as e:print(e)finally:if "con" in dir():con.close()"""查询 "待审批新闻" 的总页数1、定义 search_unreview_count_page 方法,不需要传入参数2、针对 search_unreview_count_page 方法,进行异常捕获"""def search_unreview_count_page(self):try:con=pool.get_connection()cursor=con.cursor()"""将 "查询待审批新闻"总数分页的 SQL语句 赋值给 sql"""sql="SELECT CEIL(COUNT(*)/10) FROM t_news WHERE state=%s" # CEIL() 函数是结果有小数位,强制进一位。cursor.execute(sql, ["待审批"])count_page=cursor.fetchone()[0] # 查询结果集只有一条记录,所以这里使用 fetchone()return count_pageexcept Exception as e:print(e)finally:if "con" in dir():con.close()"""审批新闻1、定义 update_unreview_news() 方法,传入参数 id2、针对 update_unreview_news() 方法,进行异常捕获"""def update_unreview_news(self, id):try:con = pool.get_connection()con.start_transaction()cursor = con.cursor()sql = "UPDATE t_news SET state=%s WHERE id=%s"# 预编译 "待审批新闻" SQL语句,将其变更为 "已审批"cursor.execute(sql, ("已审批", id))mit()except Exception as e:if "con" in dir():con.rollback()print(e)finally:if "con" in dir():con.close()"""查询新闻列表1、定义 search_list() 方法,传入参数 page , 查询全部 新闻记录 的SQL语句赋值给 sql2、针对 search_list() 方法,进行异常捕获。"""def search_list(self, page):try:# try 语句捕获异常con=pool.get_connection() # 定义一个连接(从连接池取出一个连接)cursor=con.cursor() # 创建游标"""1、将查询待审批新闻列表 SQL语句 赋值给 sql2、使用表连接将查询到的新闻记录进行 分页 ,每一页 10条记录;"新闻表、类型表、用户表""""sql="SELECT n.id,n.title,t.type,u.username " \"FROM t_news n JOIN t_type t ON n.type_id=t.id " \"JOIN t_user u ON n.editor_id=u.id " \"ORDER BY n.create_time DESC " \"LIMIT %s,%s"cursor.execute(sql, ((page-1)*10, 10))# 将 page 换算为起始位置 和偏移量# 举例:显示第一页 --> page为1# '(1-1)*10 ,10'为查询第0位开始,偏移10的记录,则就是前十条记录# 同理:第二页记录从第 10 条记录开始,为 '(2-1)*10 ,10'result=cursor.fetchall() # 将查询的结果集 赋值 给 result ; 获取全部结果集 使用 fetchall()方法。return resultexcept Exception as e:print(e)finally:if "con" in dir():con.close()"""查询新闻总页数"""def search_count_page(self):try:con=pool.get_connection()cursor=con.cursor()"""将 "查询新闻总页数" SQL语句 赋值给 sql"""sql="SELECT CEIL(COUNT(*)/10) FROM t_news" # CEIL() 函数是结果有小数位,强制进一位。cursor.execute(sql)count_page=cursor.fetchone()[0] # 查询结果集只有一条记录,所以这里使用 fetchone()return count_pageexcept Exception as e:print(e)finally:if "con" in dir():con.close()"""删除新闻1、定义 delete_by_id() 方法,传入参数 id , 根据新闻主键 id 删除新闻记录的 SQL语句 赋值给 sql2、针对 delete_by_id() 方法,进行异常捕获。"""def delete_by_id(self, id):try:con = pool.get_connection()con.start_transaction()cursor = con.cursor()sql = "DELETE FROM t_news WHERE id=%s" # 预编译 "删除新闻" SQL语句cursor.execute(sql, [id])mit()except Exception as e:if "con" in dir():con.rollback()print(e)finally:if "con" in dir():con.close()

🐳 实现删除新闻功能 - “news_service.py” - 编写删除新闻功能 - delete_by_id 方法

重点新增了 “删除新闻” -第 51 行 - 第 57 行

# coding:utf-8from db.news_dao import NewsDao"""定义 NewsService 类"""class NewsService:__new_dao = NewsDao() # 实例化 NewsDao ,赋值给私有变量 __new_dao"""1、查询待审批新闻列表;定义 search_unreview_list 方法,传入参数 page2、调用 __new_dao 实例 的 search_unreview_list 方法,赋值给 "result",并返回结果"""def search_unreview_list(self, page):result = self.__new_dao.search_unreview_list(page)return result"""1、查询 "待审批新闻" 的总页数;定义 search_unreview_count_page 方法,不需要传入参数2、调用 __new_dao 实例 的 search_unreview_count_page 方法,赋值给 "count_page",并返回结果"""def search_unreview_count_page(self):count_page = self.__new_dao.search_unreview_count_page()return count_page"""1、审批新闻;定义 update_unreview_news() 方法,传入参数 id。2、调用 __new_dao 实例 的 update_unreview_news() 方法"""def update_unreview_news(self, id):self.__new_dao.update_unreview_news(id)"""1、查询新闻列表;定义 search_list() 方法,传入参数 apge2、调用 __new_dao 实例 的 update_unreview_news() 方法"""def search_list(self, page):result = self.__new_dao.search_list(page)return result"""查询新闻总页数"""def search_count_page(self):count_page = self.__new_dao.search_count_page()return count_page"""删除新闻1、定义 delete_by_id() 方法,传入参数 id ,2、调用 __new_dao 实例的 delete_by_id() 方法"""def delete_by_id(self, id):self.__new_dao.delete_by_id(id)

🐳 实现删除新闻功能 - “app.py” - 编写删除新闻功能

接下来我们就在 “app.py” 程序中来实现 “删除新闻” 的操作吧。“删除新闻” 的功能与 “审批新闻” 的功能还是比较接近的,当进入 “删除新闻” 这个菜单的终端时,同样显示的是 “新闻的分页数据”,然后是 "翻页"操作,"输入新闻编号 - 删除对应的新闻"等操作。重点新增了 “删除新闻” -第 121 行 - 第 168 行

# coding:utf-8from colorama import Fore, Stylefrom getpass import getpass# 该模块的作用是遮挡输入的密码from service.user_service import UserServicefrom service.news_service import NewsServiceimport os # os 模块的作用是利用 "clear" 系统命令(win电脑 - "cls"),清空控制台的内容import sys # sys 模块的作用主要是利用 "exit()" 方法进行安全退出;(释放数据库连接、文件连接...之后退出)import time__user_service = UserService()# 实例化 UserService() 对象,赋值给私有变量 "__user_service"__news_service = NewsService()while 1:os.system("clear")# 清空控制台print(Fore.LIGHTBLUE_EX, "\n\t=========================") # "\n":换行 ;"\t":table,四个空格。print(Fore.LIGHTBLUE_EX, "\n\t欢迎使用新闻管理系统")print(Fore.LIGHTBLUE_EX, "\n\t=========================")print(Fore.LIGHTGREEN_EX, "\n\t1.登录系统")print(Fore.LIGHTGREEN_EX, "\n\t2.退出系统")print(Style.RESET_ALL) # 重置字体的颜色# opt = input("\n\t请输入操作编号:") # 将用户输入的内容 赋值给变量 optopt=input("\n\t输入操作编号:")"""对用户输入的交互内容进行校验1、输入 "1" ,进入 "登录系统"2、输入 "2" ,则退出系统"""if opt=="1": # 当用户输入 1,进行 登录系统username = input("\n\t用户名:")password = getpass("\n\t密码:") # 使用 getpass() 可以将输入的密码 隐去result = __user_service.login(username, password) # 调用 __user_service 的 login 方法,实现登录;赋值给 result"""针对登录成功用户进行身份校验1、为 True ,判断 登录用户 的身份,根据对应的身份,进入对应的身份层级的轮询2、为 False ,则 登录失败,返回 登录 层级的轮询"""if result == True:role = __user_service.search_user_role(username) # 调用 __user_service 的 search_user_role 方法,校验用户身份os.system("clear")"""判断登陆成功后的身份;"新闻编辑" 与 "管理员" 分别跳转各自对应的菜单层级 """while 1:os.system("clear") # 清空终端信息if role == "新闻编辑":print("*****临时占位符*****")elif role == "管理员":print(Fore.LIGHTGREEN_EX, "\n\t1.新闻管理")print(Fore.LIGHTGREEN_EX, "\n\t2.用户管理")print(Fore.LIGHTRED_EX, "\n\tback.退出登录")print(Fore.LIGHTRED_EX, "\n\texit.退出系统 ")print(Style.RESET_ALL)opt = input("\n\t请输入操作编号:")"""根据登录用户键入的选项,执行对应的操作"""if opt == "1":"""选项 1 :进入 "新闻管理" 三级菜单(轮询)"""while 1:os.system("clear") # 清空终端信息print(Fore.LIGHTGREEN_EX, "\n\t1.审批新闻") #print(Fore.LIGHTGREEN_EX, "\n\t2.删除新闻")print(Fore.LIGHTRED_EX, "\n\tback.返回上一层")print(Style.RESET_ALL)opt = input("\n\t输入操作编号:")# 根据输入的选项,执行对应的操作if opt=="1":"""选项 1 :进入 "审批新闻" 四级菜单(轮询)"""page=1# 定义 page 变量,保存当前是 "第1页"# page 这个变量不能定义在 while 循环内,定义在 while 内,每一次轮询都会重置 pagewhile 1:os.system("clear") # 清空终端"""1、需要导入 service包 news_service模块 NewsService类,将其赋值给 私有变量 ---> __news_service 2、__news_service 私有变量 参考 第 14 行代码"""count_page=__news_service.search_unreview_count_page() # 调用查询"待审批新闻"总页数的方法result=__news_service.search_unreview_list(page) # 将第1页的结果集赋值给 result"""将结果集通过索引的形式进行一个 for 循环输出"""for index in range(len(result)):one=result[index]print(Fore.LIGHTBLUE_EX, "\n\t%d\t%s\t%s\t%s" %(index+1, one[1], one[2], one[3]))print(Fore.LIGHTBLUE_EX, "\n\t-------------------")print(Fore.LIGHTBLUE_EX, "\n\t%d/%d" %(page, count_page))print(Fore.LIGHTBLUE_EX, "\n\t-------------------")print(Fore.LIGHTRED_EX, "\n\tback.返回上一层")print(Fore.LIGHTRED_EX, "\n\tprev.上一页")print(Fore.LIGHTRED_EX, "\n\tnext.下一页")print(Style.RESET_ALL)opt = input("\n\t输入操作编号:")"""针对用户的输入进行 判断;"""if opt=="back":# 返回上一层breakelif opt=="prev" and page>1: # 向 "上一页" 翻页,前置条件不能为 "第一页"page-=1elif opt=="next" and page<count_page: # 向 "下一页" 翻页,前置条件不能为 "最后一页"page+=1elif int(opt) >= 1 and int(opt) <= 10:""" 1、这里的 opt 获取到输入的编号是 string 类型,需要先转成 int 类型2、因为每一页的新闻数量是十条,所以输入的取值范围是 大于等于1、小于等于103、在获取输入的记录时,这里获取的新闻的id并不是数据库中新闻记录的主键id4、传入的记录其实是显示在终端的待审批新闻的索引,所以我们需要将传入的记录换算为 "待审批新闻" 的索引位"""news_id = result[int(opt) - 1][0]__news_service.update_unreview_news(news_id)elif opt=="2":"""选项 2 :进入 "删除新闻" 四级菜单(轮询)"""page = 1 # 定义 page 变量,保存当前是 "第1页"# page 这个变量不能定义在 while 循环内,定义在 while 内,每一次轮询都会重置 pagewhile 1:os.system("clear") # 清空终端"""1、需要导入 service包 news_service模块 NewsService类,将其赋值给 私有变量 ---> __news_service 2、__news_service 私有变量 参考 第 14 行代码"""count_page = __news_service.search_count_page() # 调用 "新闻总页数" 的方法result = __news_service.search_list(page) # 将查询 "新闻列表" 的结果集赋值给 result"""将结果集通过索引的形式进行一个 for 循环输出"""for index in range(len(result)):one = result[index]print(Fore.LIGHTBLUE_EX,"\n\t%d\t%s\t%s\t%s" % (index + 1, one[1], one[2], one[3]))print(Fore.LIGHTBLUE_EX, "\n\t-------------------")print(Fore.LIGHTBLUE_EX, "\n\t%d/%d" % (page, count_page))print(Fore.LIGHTBLUE_EX, "\n\t-------------------")print(Fore.LIGHTRED_EX, "\n\tback.返回上一层")print(Fore.LIGHTRED_EX, "\n\tprev.上一页")print(Fore.LIGHTRED_EX, "\n\tnext.下一页")print(Style.RESET_ALL)opt = input("\n\t输入操作编号:")"""针对用户的输入进行 判断;"""if opt == "back": # 返回上一层breakelif opt == "prev" and page > 1: # 向 "上一页" 翻页,前置条件不能为 "第一页"page -= 1elif opt == "next" and page < count_page: # 向 "下一页" 翻页,前置条件不能为 "最后一页"page += 1elif int(opt) >= 1 and int(opt) <= 10:""" 1、这里的 opt 获取到输入的编号是 string 类型,需要先转成 int 类型2、因为每一页的新闻数量是十条,所以输入的取值范围是 大于等于1、小于等于103、在获取输入的记录时,这里获取的新闻的id并不是数据库中新闻记录的主键id4、传入的记录其实是显示在终端的新闻记录的索引,所以我们需要将传入的记录换算为 "新闻记录" 的索引位"""news_id = result[int(opt)-1][0]__news_service.delete_by_id(news_id)elif opt == "back":breakelif opt == "back": # 返回上一级层级菜单breakelif opt == "exit": # 安全退出sys.exit(0)else:print("\n\t*****登录失败...3秒后自动返回!*****")time.sleep(3)elif opt=="2":sys.exit(0)# 安全退出 ---> 利用 "exit()" 方法安全退出;(释放数据库连接、文件连接...之后退出)

本内容不代表本网观点和政治立场,如有侵犯你的权益请联系我们处理。
网友评论
网友评论仅供其表达个人看法,并不表明网站立场。