无法实现审批新闻

无法实现审批新闻

我的代码无法实现审批新闻,我粘贴了app.py   news_dao.py以及news_service.py的代码,
请老师帮忙测试下,看看问题出在哪

app.py
from colorama import Fore,Style,init
init()
from getpass import getpass
from service.user_service import UserService
from service.news_service import NewsService
from service.role_service import RoleService
from service.type_service import TypeService
import os
import sys
import time

__user_service=UserService()
__news_service=NewsService()
__role_service=RoleService()
__type_service=TypeService()
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(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":
                        os.system("cls")
                        title=input("\n\t新闻标题")
                        userid=__user_service.search_user_id(username)
                        result=__type_service.search_list()
                        for index in range(len(result)):
                            one = result[index]
                            print(Fore.LIGHTBLUE_EX, "\n\t%d.%s" % (index + 1, one[1]))
                        print(Style.RESET_ALL)
                        opt = input("\n\t类型编号:")
                        type_id = result[int(opt) - 1][0]
                        # TODO 新闻正文内容
                        content_id=100
                        is_top=input("\n\t置顶级别(0-5):")
                        is_commit=input("\n\t是否提交(Y/N):")
                        if is_commit=="Y" or is_commit=="y":
                            __news_service.insert(title,userid,type_id,content_id,is_top)
                            print("\n\t保存(3秒自动返回)")
                            time.sleep(3)

                    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%d\t%s\t%s\t%s" % (index + 1, one[1], one[2], one[3]))
                            print(Fore.LIGHTBLUE_EX_EX, "\n\t---------------------")
                            print(Fore.LIGHTBLUE_EX, "\n\t%d/%d" % (page, count_page))
                            print(Fore.LIGHTBLUE_EX_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]
                                result=__news_service.search_by_id(news_id)
                                title=result[0]
                                type=result[1]
                                is_top=result[2]
                                print("\n\t新闻原标题:%s" %(title))
                                new_title=input("\n\t新标题:")
                                print("\n\t新闻原类型:%s" %(type))
                                result = __type_service.search_list()
                                for index in range(len(result)):
                                    one = result[index]
                                    print(Fore.LIGHTBLUE_EX, "\n\t%d.%s" % (index + 1, one[1]))
                                print(Style.RESET_ALL)
                                opt = input("\n\t类型编号:")
                                type_id = result[int(opt) - 1][0]
                                #TODO 输入新闻内容
                                content_id=100
                                print("\n\t新置顶级别:%s" % (is_top))
                                new_is_top=input("\n\t置顶级别(0-5):")
                                is_commit=input("\n\t是否提交?(Y/N):")
                                if is_commit=="Y" or is_commit=="y":
                                    __news_service.update(news_id,new_title,type_id,content_id,new_is_top)
                                    print("\n\t保存成功(3秒自动返回)")
                                    time.sleep(3)

                    elif opt == "back":
                        break

                    elif opt == "exit":
                        sys.exit(0)

                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%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":
                                        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]
                                        __news_service.update_unreview_news(news_id)
                                        result = __news_service.search_cache(news_id)
                                        title = result[0]
                                        username = result[1]
                                        type = result[2]
                                        content_id = result[3]
                                        #TODO 查找新闻正文
                                        content = "100"
                                        is_top = result[4]
                                        create_time = str(result[5])
                                        __news_service.cache_news(news_id,title,username,type,content,is_top,create_time)
                            elif opt=="back":
                                break
                            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%d\t%s\t%s\t%s" % (index + 1, one[1], one[2], one[3]))
                                    print(Fore.LIGHTBLUE_EX_EX, "\n\t---------------------")
                                    print(Fore.LIGHTBLUE_EX, "\n\t%d/%d" % (page, count_page))
                                    print(Fore.LIGHTBLUE_EX_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)
                                        __news_service.delete_cache(news_id)
                    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("\n\t两次密码不一致(3s自动返回)")
                                    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%d.%s"%(index+1,one[1]))
                                print(Style.RESET_ALL)
                                opt=input("\n\t角色编号:")
                                role_id=result[int(opt)-1][0]
                                __user_service.insert(username,password,email,role_id)
                                print("\n\t保存成功(3s自动返回)")
                                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%d\t%s\t%s" % (index + 1, one[1], one[2]))
                                    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":
                                        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两次密码不一致(3s自动返回)")
                                            print(Style.RESET_ALL)
                                            time.sleep(3)
                                            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%d.%s" % (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 == "Y" or opt == "y":
                                            __user_service.update(user_id,username,password,email,role_id)
                                            print("\n\t保存成功(3s自动返回)")
                                            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%d\t%s\t%s" % (index + 1, one[1], one[2]))
                                    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":
                                        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删除成功(1s自动返回)")
                                        time.sleep(1)

                    if opt=="back":
                        break
                    elif opt=="exit":
                        sys.exit(0)
        else:
            print("\n\t登入失败(3秒自动返回)")
            time.sleep(3)
    elif opt=="2":
        # 安全退出系统
        sys.exit(0)
        
        
 news_dao.py
 from db.mysql_db import pool

class NewsDao:
    # 查询待审批新闻列表
    def search_unreview_list(self,page):
        try:
            con=pool.get_connection()
            cursor=con.cursor()
            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))
            result=cursor.fetchall()  # result两个元组组成的列表
            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" in 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 "\
                "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))
            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" in dir():
                con.rollback()
            print(e)
        finally:
            if "con" in dir():
                con.close()

    # 添加新闻
    def insert(self,title,editor_id,type_id,content_id,is_top):
        try:
            con = pool.get_connection()
            con.start_transaction()
            cursor = con.cursor()
            sql = "INSERT INTO t_news(title,editor_id,type_id,content_id,is_top,state) " \
                  "VALUES(%s,%s,%s,%s,%s,%s)"
            cursor.execute(sql, [title,editor_id,type_id,content_id,is_top,"待审批"])
            con.commit()
        except Exception as e:
            if "con" in dir():
                con.rollback()
            print(e)
        finally:
            if "con" in dir():
                con.close()

    # 查找用于缓存的记录
    def search_cache(self,id):
        try:
            con=pool.get_connection()
            cursor=con.cursor()
            sql="SELECT n.title,u.username,t.type,n.content_id, " \
                "n.is_top,n.create_time " \
                "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.id=%s"
            cursor.execute(sql,[id])
            result=cursor.fetchone()
            return result
        except Exception as e:
            print(e)
        finally:
            if "con" in dir():
                con.close()



    # 根据id查找新闻
    def search_by_id(self,id):
        try:
            con = pool.get_connection()
            cursor = con.cursor()
            sql = "SELECT n.title,t.type,n.is_top" \
                  "FROM t_news n " \
                  "JOIN t_type t ON n.type_id=t.id " \
                  "WHERE n.id=%s"
            cursor.execute(sql, [id])
            result = cursor.fetchone()
            return result
        except Exception as e:
            print(e)
        finally:
            if "con" in dir():
                con.close()

    # 更改新闻
    def update(self,id,title,type_id,content_id,is_top):
        try:
            con = pool.get_connection()
            con.start_transaction()
            cursor = con.cursor()
            sql = "UPDATE t_news SET title=%s,type_id=%s,content_id=%s, " \
                  "is_top=%s,state=%s,update_time=NOW() WHERE id=%s"
            cursor.execute(sql, (title,type_id,content_id,is_top,"待审批",id))
            con.commit()
        except Exception as e:
            if "con" in dir():
                con.rollback()
            print(e)
        finally:
            if "con" in dir():
                con.close()
                
news_service.py
from db.news_dao import NewsDao
from db.redis_news_dao import RedisNewsDao


class NewsService:
    __news_dao=NewsDao()
    __redis_news_dao=RedisNewsDao()

    # 查询待审批新闻列表
    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)

    # 添加新闻
    def insert(self, title, editor_id, type_id, content_id, is_top):
        self.__news_dao.insert(title,editor_id,type_id,content_id,is_top)

    # 查找用于缓存的记录
    def search_cache(self,id):
        result = self.__news_dao.search_cache(id)
        return result

    # 向redis保存缓存的新闻
    def cache_news(self,id,title,username,type,content,is_top,create_time):
        self.__redis_news_dao.insert(id,title,username,type,content,is_top,create_time)

    #删除缓存的新闻
    def delete_cache(self,id):
        self.__redis_news_dao.delete_cache(id)

    # 根据id查找新闻
    def search_by_id(self,id):
        result=self.__news_dao.search_by_id(id)
        return result

    # 更改新闻
    def update(self,id,title,type_id,content_id,is_top):
        self.__news_dao.update(id,title,type_id,content_id,is_top)
        self.delete_cache(id)


正在回答 回答被采纳积分+1

登陆购买课程后可参与讨论,去登陆

1回答
好帮手慕美 2019-12-16 12:04:19

同学,你好。

1、app.py文件中:在得到news_id时,应取元组中的第一个元素,即下标为0

http://img1.sycdn.imooc.com//climg/5df701ae093d7c8e04310100.jpg

2、news_dao.py文件中:在审批新闻时, sql语句中应为小写的s

http://img1.sycdn.imooc.com//climg/5df701c809dbd2a406140417.jpg

如果我的回答解决了您的疑惑,请采纳!祝学习愉快~~~~

问题已解决,确定采纳
还有疑问,暂不采纳

恭喜解决一个难题,获得1积分~

来为老师/同学的回答评分吧

0 星
请稍等 ...
意见反馈 帮助中心 APP下载
官方微信

在线咨询

领取优惠

免费试听

领取大纲

扫描二维码,添加
你的专属老师