前言:
✌ 作者简介:渴望力量的哈士奇 ✌,大家可以叫我 🐶哈士奇🐶 ,一位致力于 TFS - 全栈 赋能的博主 ✌
🏆 CSDN博客专家认证、新星计划第三季全栈赛道 MVP 、华为云享专家、阿里云专家博主 🏆
📫 如果文章知识点有错误的地方,请指正!和大家一起学习,一起进步👀
💬 人生格言:优于别人,并不高贵,真正的高贵应该是优于过去的自己。💬
🔥 如果感觉博主的文章还不错的话,还请👍关注、点赞、收藏三连支持👍一下博主哦
专栏系列(点击解锁)学习路线(点击解锁)知识定位 🔥Python全栈白皮书🔥 零基础入门篇 以浅显易懂的方式轻松入门,让你彻底爱上Python的魅力。 语法进阶篇 主要围绕多线程编程、正则表达式学习、含贴近实战的项目练习 。 自动化办公篇 实现日常办公软件的自动化操作,节省时间、提高办公效率。 自动化测试实战篇 从实战的角度出发,先人一步,快速转型测试开发工程师。 数据库开发实战篇 掌握关系型与非关系数据库知识,提升数据库实战开发能力。 爬虫入门与实战 更新中 数据分析篇 更新中 前端入门+flask 全栈篇 更新中 django+vue全栈篇 更新中 拓展-人工智能入门 更新中 网络安全之路 踩坑篇 记录学习及演练过程中遇到的坑,便于后来居上者 网安知识扫盲篇 三天打鱼,不深入了解原理,只会让你成为脚本小子。 vulhub靶场漏洞复现 让漏洞复现变得简单,让安全研究者更加专注于漏洞原理本身。 shell编程篇 不涉及linux基础,最终案例会偏向于安全加固方向。 [待完结] WEB漏洞攻防篇 2021年9月3日停止更新,转战先知社区等安全社区及小密圈 渗透工具使用集锦 2021年9月3日停止更新,转战先知社区等安全社区及小密圈 点点点工程师 测试神器 - Charles 软件测试数据包抓包分析神器 测试神器 - Fiddler 一文学会 fiddle ,学不会倒立吃翔,稀得! 测试神器 - Jmeter 不仅是性能测试神器,更可用于搭建轻量级接口自动化测试框架。 RobotFrameWork Python实现的自动化测试利器,该篇章仅介绍UI自动化部分。 Java实现UI自动化 文档写于2016年,Java实现的UI自动化,仍有借鉴意义。该工具目前的应用场景已不多,文档已删,为了排版好看才留着。
文章目录
上一章节我们编写的程序可以实现以 “管理员” 的身份去登录 “新闻管理系统” ,也能够看到 二级菜单的返回提示,还能够返回上一级菜单以及退出系统。但是在 二级菜单 有 “新闻管理” 与 “用户管理” 这两个业务流程还没有做,接下来我们就从 “新闻管理” 开始入手吧。
🐳 实现 “新闻管理” 模块
- 在上一章节,我们有针对判断 “登录用户” 是 “管理员” 的情况下 ,控制台就有对应的操作提示。
- 但是我们只针对 “退出登录” 、“退出系统” 进行了代码的编写,接下来继续针对 “新闻管理” 进行代码的编写吧。
app.py
# coding:utf-8from colorama import Fore, Style from getpass import getpass # 该模块的作用是遮挡输入的密码from service.user_service import UserService import os # os 模块的作用是利用 "clear" 系统命令(win电脑 - "cls"),清空控制台的内容import sys # sys 模块的作用主要是利用 "exit()" 方法进行安全退出;(释放数据库连接、文件连接...之后退出)import time __user_service = UserService()# 实例化 UserService() 对象,赋值给私有变量 "__user_service"while1: 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请输入操作编号:") # 将用户输入的内容 赋值给变量 opt opt=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")""" 判断登陆成功后的身份;"新闻编辑" 与 "管理员" 分别跳转各自对应的菜单层级 """while1: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":""" 进入 "新闻管理" 三级菜单 """while1: os.system("cls")# 清空终端信息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输入操作编号:")# 根据输入的选线,执行对应的操作elif opt =="back":# 返回上一级层级菜单breakelif opt =="exit":# 安全退出 sys.exit(0)else:print("\n\t*****登录失败...3秒后自动返回!*****") time.sleep(3)elif opt=="2": sys.exit(0)# 安全退出 ---> 利用 "exit()" 方法安全退出;(释放数据库连接、文件连接...之后退出)
注意点:
-第 71 行:当用户输入 "1" 的时候,就会进入 "审批新闻" 这个菜单栏目。进入该菜单栏目后,先清空一下控制台;然后再输出 "待审批新闻" 记录。
-并不是把所有的记录都显示在控制台里面,必须要做分页显示,利用 "limit" 子句可以完成 "分页" ,比如我们设定在控制台每一页显示 10 条记录。
-有鉴于此,所以关于 "opt" 判断用户输入的内容先暂时不再继续往下编写了,我们先去编写实现 "分页查询" 的 "dao" 程序,然后再编写 "service程序" ,最后再返回 "app.py" 在 "新闻管理" 的 "opt" 下方判断输入的操作编号到底是什么。
- 接下来,就切换到 “db” 包,编写实现 “新闻管理” 的 “news_dao.py” 程序吧。
🐬 实现 “新闻管理” 模块 -创建 “news_dao.py” 程序
在 db包 创建 "news_dao.py" 文件
# coding:utf-8from db.mysql_db import pool """ 定义 NewsDao 类 """classNewsDao:""" 查询待审批新闻列表 1、定义 search_unreview_list 方法,传入参数 page 2、针对 search_unreview_list 方法,进行异常捕获 """defsearch_unreview_list(self, page):# 定义 logintry:# try 语句捕获异常 con=pool.get_connection()# 定义一个连接(从连接池取出一个连接) cursor=con.cursor()# 创建游标""" 1、将查询待审批新闻列表 SQL语句 赋值给 sql 2、使用表连接将查询到的新闻记录进行 分页 ,每一页 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 result except Exception as e:print(e)finally:if"con"indir(): con.close()""" 测试 NewsDao """ service = NewsDao() news_test = service.search_unreview_list(1)print(news_test)
🐬 实现 “新闻管理” 模块 -创建 “news_service.py” 程序
- 有了
news_dao.py
之后,接下来就是news_service.py
了,不废话了,接下来就编写news_service.py
吧。# coding:utf-8from db.news_dao import NewsDao """ 定义 NewsService 类 """classNewsService: __new_dao = NewsDao()# 实例化 NewsDao ,赋值给私有变量 __new_dao""" 1、查询待审批新闻列表;定义 search_unreview_list 方法,传入参数 page 2、调用 __new_dao 实例 的 search_unreview_list 方法,赋值给 "result",并返回结果 """defsearch_unreview_list(self, page): result = self.__new_dao.search_unreview_list(page)return result """ 测试 NewsService """ service = NewsService() news_test = service.search_unreview_list(1)
版权归原作者 不渴望力量的哈士奇 所有, 如有侵权,请联系我们删除。