DAO(Data Access Object) 数据访问对象是一个面向对象的数据库接口
控制台的输入输出都是再app.py里面完成的

 mysql_db.py

import mysql.connector.pooling

__config = {
"host":"192.168.111.153",
"port":3306,
"user":"quan",
"password":"2004",
"database":"vega"
} try:
pool = mysql.connector.pooling.MySQLConnectionPool(
**__config,
pool_size=10
)
except Exception as e:
print(e)

 news_dao.py

from db.mysql_db import pool

class NewDao:
#查询待审批新闻列表
def search_unreview_list(self,page):
try:
con = pool.get_connection()
cursor = con.cursor()
sql = "SELECT n.id,n.title,n.state,t.type,u.username " \
"FROM t_news AS n JOIN t_type AS t ON n.type_id = t.id " \
"JOIN t_user AS 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))
result = cursor.fetchall()
return result
except Exception as e:
print(e)
finally:
if "con" in dir():
con.close() #查询待审批新闻的总页数
def search_unreview_count_page(self):
try:
con = pool.get_connection()
cursor = con.cursor()
sql = "SELECT CEIL(COUNT(*)/10) FROM t_news WHERE state = %s"
cursor.execute(sql, ["待审批"])
count_page = cursor.fetchone()[0]
return count_page
except Exception as e:
print(e)
finally:
if "con" in dir():
con.close() #审批新闻
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"
cursor.execute(sql, ("已审批",id))
con.commit()
except Exception as e:
if "con" == dir():
con.rollback()
print(e)
finally:
if "con" in dir():
con.close() #查询新闻列表
def search_list(self,page):
try:
con = pool.get_connection()
cursor = con.cursor()
sql = "SELECT n.id,n.title,n.state,t.type,u.username " \
"FROM t_news AS n JOIN t_type AS t ON n.type_id = t.id " \
"JOIN t_user AS u ON n.editor_id = u.id " \
"ORDER BY n.create_time DESC " \
"LIMIT %s,%s"
cursor.execute(sql, ((page - 1) * 10, 10))
result = cursor.fetchall()
return result
except 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 = "SELECT CEIL(COUNT(*)/10) FROM t_news "
cursor.execute(sql)
count_page = cursor.fetchone()[0]
return count_page
except Exception as e:
print(e)
finally:
if "con" in dir():
con.close() #删除新闻
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"
cursor.execute(sql, [id])
con.commit()
except Exception as e:
if "con" == dir():
con.rollback()
print(e)
finally:
if "con" in dir():
con.close()

role_dao.py

from db.mysql_db import pool

class RoleDao:
# 查询角色列表
def search_list(self):
try:
con = pool.get_connection()
cursor = con.cursor()
sql = "SELECT id,role FROM t_role "
cursor.execute(sql)
result = cursor.fetchall()
return result
except Exception as e:
print(e)
finally:
if "con" in dir():
con.close()

user_dao.py

from db.mysql_db import pool

# con = pool.get_connection()
# cursor = con.cursor()
# sql = "SELECT COUNT(*) FROM t_user WHERE username = %s AND " \
# "AES_DECRYPT(UNHEX(password),'HelloWorld') = %s"
# cursor.execute(sql,("admin","123456"))
# count = cursor.fetchone()[0]
# print(count)
# con = pool.get_connection()
# cursor = con.cursor()
# sql = "SELECT r.role FROM t_user AS u JOIN t_role AS r ON " \
# "u.role_id = r.id WHERE u.username = %s"
# cursor.execute(sql, ["admin"])
# role = cursor.fetchone()[0]
# print(role)
class UserDao:
#验证用户登陆信息
def login(self,username,password):
global con
try:
con = pool.get_connection()
cursor = con.cursor()
sql = "SELECT COUNT(*) FROM t_user WHERE username = %s AND " \
"AES_DECRYPT(UNHEX(password),'HelloWorld') = %s"
cursor.execute(sql,(username,password))
count = cursor.fetchone()[0]
return True if count == 1 else False except Exception as e:
print(e)
finally:
if "con" in dir():#因为这个项目使可以执行一次程序,多次登陆#需要给回连接给连接池,通过调用close()即可
con.close() def serch_user_role(self,username):
#查询用户角色
try:
con = pool.get_connection()
cursor = con.cursor()
sql = "SELECT r.role FROM t_user AS u JOIN t_role AS r ON " \
"u.role_id = r.id WHERE u.username = %s"
cursor.execute(sql, [username])
role = cursor.fetchone()[0]
return role
except Exception as e:
print(e)
finally:
if "con" in dir():
con.close() #插入新用户
def insert_user(self,username,password,email,role_id):
try:
con = pool.get_connection()
con.start_transaction()
cursor = con.cursor()
sql = "INSERT INTO t_user(username,password,email,role_id)" \
"VALUES (%s,HEX(AES_ENCRYPT(%s,'HelloWorld')),%s,%s)"
cursor.execute(sql, (username,password,email,role_id))
con.commit()
except Exception as e:
if "con" == dir():
con.rollback()
print(e)
finally:
if "con" in dir():
con.close() #查询用户总页数
def search_count_page(self):
try:
con = pool.get_connection()
cursor = con.cursor()
sql = "SELECT CEIL(COUNT(*)/10) FROM t_user "
cursor.execute(sql)
count_page = cursor.fetchone()[0]
return count_page
except Exception as e:
print(e)
finally:
if "con" in dir():
con.close() #插叙用户的分页记录
def search_list(self,page):
try:
con = pool.get_connection()
cursor = con.cursor()
sql = "SELECT u.id,u.username,r.role,u.email FROM t_user AS u JOIN t_role AS r" \
" ON u.role_id = r.id " \
"ORDER BY u.id " \
"LIMIT %s,%s"
cursor.execute(sql,((page - 1)*10,10))
result = cursor.fetchall()
return result
except Exception as e:
print(e)
finally:
if "con" in dir():
con.close() #修改用户信息
def update(self,id,username,password,email,role_id):
try:
con = pool.get_connection()
con.start_transaction()
cursor = con.cursor()
sql = "UPDATE t_user SET " \
"username = %s, " \
"password = HEX(AES_ENCRYPT(%s,'HelloWord')), " \
"email = %s, " \
"role_id = %s " \
"WHERE id = %s "
cursor.execute(sql, (username, password, email, role_id,id))
con.commit()
except Exception as e:
if "con" == dir():
con.rollback()
print(e)
finally:
if "con" in dir():
con.close() #删除用户
def delete_by_id(self,id):
try:
con = pool.get_connection()
con.start_transaction()
cursor = con.cursor()
sql = "DELETE FROM t_user WHERE id = %s "
cursor.execute(sql, [id])
con.commit()
except Exception as e:
if "con" == dir():
con.rollback()
print(e)
finally:
if "con" in dir():
con.close()

news_service.py

from db.news_dao import NewDao

class NewsService:
__news_dao = NewDao() #查询待审批新闻列表
def search_unreview_list(self,page):
result = self.__news_dao.search_unreview_list(page)
return result # 查询待审批新闻的总页数
def search_unreview_count_page(self):
count_page = self.__news_dao.search_unreview_count_page()
return count_page # 审批新闻
def update_unreview_news(self, id):
self.__news_dao.update_unreview_news(id) #查询新闻列表
def search_list(self,page):
result = self.__news_dao.search_list(page)
return result # 查询新闻总数
def search_count_page(self):
count_page = self.__news_dao.search_count_page()
return count_page # 删除新闻
def delete_by_id(self, id):
self.__news_dao.delete_by_id(id)

role_service.py

from db.role_dao import RoleDao

class RoleService:
__role_dao = RoleDao() # 查询角色列表
def search_list(self):
result = self.__role_dao.search_list()
return result

user_service.py

from db.user_dao import UserDao

class UserService:
__user_dao = UserDao()
#验证用户登陆
def login(self,username,password):
result = self.__user_dao.login(username,password)
return result
#查询用户角色
def search_user_role(self,username):
role = self.__user_dao.serch_user_role(username)
return role # 插入新用户
def insert_user(self, username, password, email, role_id):
self.__user_dao.insert_user(username, password, email, role_id) #查询用户总页数
def search_count_page(self):
count_page = self.__user_dao.search_count_page()
return count_page #插叙用户的分页记录
def search_list(self,page):
result = self.__user_dao.search_list(page)
return result # 修改用户信息
def update(self, id, username, password, email, role_id):
self.__user_dao.update(id, username, password, email, role_id) # 删除用户
def delete_by_id(self, id):
self.__user_dao.delete_by_id(id)

app.py

from colorama import Fore,Style
from getpass import getpass #获取用输入密码
from service.user_service import UserService
from service.news_service import NewsService
from service.role_service import RoleService
import os #为了清空控制台内容
import sys
import time __user_service = UserService()
__news_service = NewsService()
__role_service = RoleService() while True:
os.system("cls")
print(Fore.LIGHTBLUE_EX,"\n\t+++++++++++++++++++")
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输入你的操作编号:")
if opt == "1":
username = input("\n\t输入你的用户名:")
password = getpass("\n\t输入你的密码:")
result = __user_service.login(username,password)
#登陆成功
if result == True:
#查询角色
role = __user_service.search_user_role(username)
while True:
os.system("cls")
if role == "新闻编辑":
print("test")
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":
while True:
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输入你的操作编号:")
if opt == "1":
page = 1
while True:
os.system("cls")
count_page = __news_service.search_unreview_count_page()
result = __news_service.search_unreview_list(page)
for index in range(len(result)):
one = result[index]
print(Fore.LIGHTBLUE_EX,"\n\t{0}\t{1}\t{2}\t{3}".format(index+1,one[1],one[2],one[3]))
print(Fore.LIGHTBLUE_EX, "\n\t-------------------")
print(Fore.LIGHTBLUE_EX,"\n\t{0}/{1}".format(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":
break
elif opt == "prev" and page > 1:
page -=1
elif opt == "next" and page < count_page:
page +=1
elif int(opt) >= 1 and int(opt) <= 10:
news_id = result[int(opt) - 1][0]
__news_service.update_unreview_news(news_id)
elif opt == "2":
page = 1
while True:
os.system("cls")
count_page = __news_service.search_count_page()
result = __news_service.search_list(page)
for index in range(len(result)):
one = result[index]
print(Fore.LIGHTBLUE_EX, "\n\t{0}\t{1}\t{2}\t{3}".format(index + 1, one[1], one[2], one[3]))
print(Fore.LIGHTBLUE_EX, "\n\t-------------------")
print(Fore.LIGHTBLUE_EX, "\n\t{0}/{1}".format(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":
break
elif opt == "prev" and page > 1:
page -= 1
elif opt == "next" and page < count_page:
page += 1
elif int(opt) >= 1 and int(opt) <= 10:
news_id = result[int(opt) - 1][0]
__news_service.delete_by_id(news_id)
elif opt == "back": break
elif opt == "2":
while True:
os.system("cls")
print(Fore.LIGHTGREEN_EX, "\n\t1)添加用户")
print(Fore.LIGHTGREEN_EX, "\n\t2)修改用户")
print(Fore.LIGHTGREEN_EX, "\n\t3)删除用户")
print(Fore.LIGHTRED_EX, "\n\tback)返回")
print(Style.RESET_ALL)
opt = input("\n\t输入你的操作编号:")
if opt == "back":
break
elif opt == "1":
os.system("cls")
username = input("\n\t你要添加的用户名字")
password = getpass("\n\t输入新用户密码")
repassword = getpass("\n\t再次输入新用户密码")
if password != repassword:
print(Fore.LIGHTRED_EX,"\n\t两次密码不一致(3秒自动返回)")
time.sleep(3)
continue
email = input("\n\t新用户邮箱:")
result = __role_service.search_list()
for index in range(len(result)):
one = result[index]
print(Fore.LIGHTBLUE_EX,"\n\t{0}.{1}".format(index+1,one[1]))
print(Style.RESET_ALL)
opt = input("\n\t新用户的角色编号:")
role_id = result[int(opt)-1][0]
__user_service.insert_user(username,password,email,role_id)
print("\n\t保存成功(3秒自动返回)")
time.sleep(3) elif opt == "2": page = 1
while True:
os.system("cls")
count_page = __user_service.search_count_page()
result = __user_service.search_list(page)
for index in range(len(result)):
one = result[index]
print(Fore.LIGHTBLUE_EX,
"\n\t{0}\t{1}\t{2}".format(index + 1, one[1], one[2]))
print(Fore.LIGHTBLUE_EX, "\n\t-------------------")
print(Fore.LIGHTBLUE_EX, "\n\t{0}/{1}".format(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":
break
elif opt == "prev" and page > 1:
page -= 1
elif opt == "next" and page < count_page:
page += 1
elif int(opt) >= 1 and int(opt) <= 10:
os.system("cls")
user_id = result[int(opt)-1][0]
username = input("\n\t你要修改成的用户名字")
password = getpass("\n\t输入新密码")
repassword = getpass("\n\t再次输入新密码")
if password != repassword:
print(Fore.LIGHTRED_EX,"\n\t两次密码不一致(3秒自动返回)")
time.sleep(3)
print(Style.RESET_ALL)
break
email = input("\n\t新用户邮箱:")
result = __role_service.search_list()
for index in range(len(result)):
one = result[index]
print(Fore.LIGHTBLUE_EX, "\n\t{0}.{1}".format(index + 1, one[1]))
print(Style.RESET_ALL)
opt = input("\n\t新用户的角色编号:")
role_id = result[int(opt) - 1][0]
opt = input("\n\t是否保存(Y/N)")
if opt.upper() == "Y":
__user_service.update(user_id,username,password,email,role_id)
print("\n\t保存成功(3秒自动返回)")
time.sleep(3)
elif opt == "3": page = 1
while True:
os.system("cls")
count_page = __user_service.search_count_page()
result = __user_service.search_list(page)
for index in range(len(result)):
one = result[index]
print(Fore.LIGHTBLUE_EX,
"\n\t{0}\t{1}\t{2}".format(index + 1, one[1], one[2]))
print(Fore.LIGHTBLUE_EX, "\n\t-------------------")
print(Fore.LIGHTBLUE_EX, "\n\t{0}/{1}".format(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":
break
elif opt == "prev" and page > 1:
page -= 1
elif opt == "next" and page < count_page:
page += 1
elif int(opt) >= 1 and int(opt) <= 10:
os.system("cls")
user_id = result[int(opt) - 1][0]
__user_service.delete_by_id(user_id)
print("\n\t删除成功(3秒自动返回)")
time.sleep(3) elif opt == "back":
break
elif opt == "exit":
sys.exit(0)
else:
print("\n\t登陆失败,3秒自动返回")
time.sleep(3)
elif opt == "2":
sys.exit(0)#0代表安全退出,等数据释放等

python项目——新闻管理系统的更多相关文章

  1. 2013流行Python项目汇总

    2013流行Python项目汇总 转自:http://www.kankanews.com/ICkengine/archives/102963.shtml Python作为程序员的宠儿,越来越得到人们的 ...

  2. python项目

    python实战项目: http://www.the5fire.com/category/python实战/ python基础教程中的十个项目: python项目练习一:即时标记 python项目练习 ...

  3. 流行的Python项目汇总

    年有哪些流行的Python项目呢?下面,我们一起来看下. 一.测试和调试 python_koans :Python Koans 算 “Ruby Koans” 的一部分,作为交互式教程,可以学习 TDD ...

  4. Jenkins部署Python项目实战

    一.背景 我们工作中常用Jenkins部署Java代码,因其灵活的插件特性,例如jdk,maven,ant等使得java项目编译后上线部署一气呵成,同样对于脚本语言类型如Python上线部署,利用Je ...

  5. Python项目使用memcached缓存

    前言许多Web应用都将数据保存到MySQL这样的关系型数据库管理系统中,应用服务器从中读取数据并在浏览器中显示. 但随着数据量的增大.访问的集中,就会出现数据库的负担加重.数据库响应恶化. 网站显示延 ...

  6. 基于ASP.NET的新闻管理系统(一)

    1. 项目简介 1.1设计内容 (1)可以在首页查看各类新闻,可以点击新闻查看具体内容:可以查看不同类型的新闻,并了解热点新闻,可以在搜索框里输入要查找的内容. (2)在后台界面中,管理员可以修改密码 ...

  7. Java开发新闻管理系统(前后端)+爬虫百度、新浪等新闻

                  ForFuture News  新闻管理系统                      项目演示地址:http://www.ganquanzhong.top [注]:文档下 ...

  8. Python 项目结构

    Python 项目结构 实验准备 我们的实验项目名为 factorial. 12 $ mkdir factorial$ cd factorial/ 主代码 我们给将要创建的 Python 模块取名为 ...

  9. k8s-生产环境部署django项目k8s-dashboard管理系统

    1. k8s-生产环境部署django项目k8s-dashboard管理系统 gitee地址: https://gitee.com/scajy/django-k8s-dashboard.git 部署架 ...

随机推荐

  1. 第六次Scrum Metting

    日期:2021年5月3日 会议主要内容概述:讨论前后端进度,前端各模块对接以及前后端对接. 一.进度情况 组员 负责 两日内已完成的工作 后两日计划完成的工作 工作中遇到的困难 徐宇龙 后端 数据模块 ...

  2. [对对子队]团队任务拆解Alpha

    Alpha阶段主要目标 完成游戏场景的基本实现(不要求美术资源) 完成游戏UI的基本实现(不要求美术资源) 制作第一部分的关卡(顺序语句,制作3-5关) 完成第一部分关卡和游戏基本逻辑的测试 任务分解 ...

  3. RocketMQ源码详解 | Producer篇 · 其一:Start,然后 Send 一条消息

    概述 DefaultMQProducer producer = new DefaultMQProducer("please_rename_unique_group_name"); ...

  4. 零基础入门stm32基本定时器详解

    一.基本定时器介绍 在STM32中,基本定时器有TIM6.TIM7等.基本定时器主要包含时基单元,提供16位的计数,能计数0~65535.基本定时器除了计数功能以外,还能输出给DAC模块一个TRGO信 ...

  5. 嵌入式单片机之STM32F103C8T6最小系统板电路设计参考

    STM32F103C8T6最小系统板电路设计 一.电源部分 设计了一个XH插座,以便使用3.7V锂电池供电,接入电压不允许超过6V. 二.指示灯部分 电源指示灯可以通过一个短路帽控制亮灭,以达到节电的 ...

  6. AtCoder Beginner Contest 220部分题(G,H)题解

    刚开始的时候被E题卡住了,不过发现是个数学题后就开始使劲推式子,幸运的是推出来了,之后的F题更是树形DP换根的模板吧,就草草的过了,看了一眼G,随便口胡了一下,赶紧打代码,毕竟时间不多了,最后也没打完 ...

  7. Luogu P2081 [NOI2012]迷失游乐园 | 期望 DP 基环树

    题目链接 基环树套路题.(然而各种错误调了好久233) 当$m=n-1$时,原图是一棵树. 先以任意点为根做$dp$,求出从每一个点出发,然后只往自己子树里走时路径的期望长度. 接着再把整棵树再扫一遍 ...

  8. 关于dns服务工作的原理,和配置的细节理解。

    dns服务器相关 1,dns原理,也就是迭代,和递归查询.将域名解析为ip的过程. 一次完整的查询请求经过的流程: Client -->hosts文件 -->DNS Service Loc ...

  9. 这一篇 K8S(Kubernetes)集群部署 我觉得还可以!!!

    点赞再看,养成习惯,微信搜索[牧小农]关注我获取更多资讯,风里雨里,小农等你,很高兴能够成为你的朋友. 国内安装K8S的四种途径 Kubernetes 的安装其实并不复杂,因为Kubernetes 属 ...

  10. Jmeter 运行结果的csv文件生成报告

    把运行结果保存到本地,下次可以直接用结果生成测试报告. 一.首先保证脚本能正常运行 二.本地创建csv文件,用来保存运行结果 三.察看结果树,选择本地文件(上一步创建好的csv文件),保存运行结果,如 ...