新闻系统示例
新闻系统
自己设计合理的文件或数据结构,满足一下需求:
-
用户登录,需要让用户输入动态验证码及对密码进行md5加密。
-
新闻列表(无需登录)
-
进入查看指定新闻详细(无需登录)
-
对指定的新闻点赞(需登录,装饰器实现)
-
对指定的新闻评论(需登录,装饰器实现)
1 #!/usr/bin/env python 2 # -*- coding:utf-8 -*- 3 import hashlib 4 5 6 # 用户信息:示例密码是 123 7 USER_DICT = {'eric': '202cb962ac59075b964b07152d234b70', 'alex': '202cb962ac59075b964b07152d234b70'} 8 9 10 # 当前登录用户 11 CURRENT_USER = None 12 13 14 ARTICLE_LIST = [ 15 { 16 'title': '震惊了,张思达居然...', 17 'content': '张思达昨天在小区树下发现一条黑色的蛇,都冻僵了!他就把蛇揣到怀里面,想给它一点温暖。今天一大早他就在树上挂了个牌子:不准随地大小便', 18 'comment': [ 19 {'data': '赞呀', 'user': '李鹏'}, 20 {'data': '是我干的', 'user': '李忠伟'}, 21 ], 22 'up': 0, 23 }, 24 { 25 'title': '邵海鹏和他女朋友的故事', 26 'content': '几个月前,女朋友跑了,几个月后,她回来了,怀着孕,流着泪说他不要她了,叫我陪她打掉孩子。我说生下来吧,我养。几个月后,孩子生下来了,我跑了!', 27 'comment': [], 28 'up': 0, 29 }, 30 { 31 'title': '世界上最苦命的人', 32 'content': '一个乞丐上门行乞,我老婆见他可怜,给了他十块钱,又热情地端了一碗刚做好的饭菜给他吃。乞丐感动地接过了饭碗,狼吞虎咽地扒了两口,泪水忍不住流了下来:“谢谢你,大姐,遇见你以后才知道,原来我不是这个世界上最苦命的人,你老公才是。”', 33 'comment': [], 34 'up': 0, 35 }, 36 ] 37 38 39 40 41 def encrypt_md5(arg): 42 """ 43 md5加密 44 :param arg: 45 :return: 46 """ 47 m = hashlib.md5() 48 m.update(arg.encode('utf-8')) 49 return m.hexdigest() 50 51 52 53 54 def register(): 55 """ 56 用户注册 57 :return: 58 """ 59 print('用户注册') 60 while True: 61 user = input('请输入用户名(N返回上一级):') 62 if user.upper() == 'N': 63 return 64 pwd = input('请输入密码:') 65 if user in USER_DICT: 66 print('用户已经存在,请重新输入。') 67 continue 68 USER_DICT[user] = encrypt_md5(pwd) 69 print('%s 注册成功' % user) 70 print(USER_DICT) 71 72 73 74 75 def login(): 76 """ 77 用户登录 78 :return: 79 """ 80 print('用户登录') 81 while True: 82 user = input('请输入用户名(N返回上一级):') 83 if user.upper() == 'N': 84 return 85 pwd = input('请输入密码:') 86 if user not in USER_DICT: 87 print('用户名不存在') 88 continue 89 90 91 encrypt_password = USER_DICT.get(user) 92 if encrypt_md5(pwd) != encrypt_password: 93 print('密码错误') 94 continue 95 96 97 print('登录成功') 98 global CURRENT_USER 99 CURRENT_USER = user 100 return 101 102 103 104 105 def article_list(): 106 """ 107 文章列表 108 :return: 109 """ 110 while True: 111 print('=================== 文章列表 ===================') 112 for i in range(len(ARTICLE_LIST)): 113 row = ARTICLE_LIST[i] 114 msg = """%s.%s \n 赞(%s) 评论(%s)\n""" % (i + 1, row['title'], row['up'], len(row['comment'])) 115 print(msg) 116 choice = input('请选择要查看的文章(N返回上一级):') 117 if choice.upper() == 'N': 118 return 119 choice = int(choice) 120 choice_row_dict = ARTICLE_LIST[choice - 1] 121 article_detail(choice_row_dict) 122 123 124 125 126 def article_detail(row_dict): 127 """ 128 文章详细 129 :param row_dict: 130 :return: 131 """ 132 show_article_detail(row_dict) 133 func_dict = {'1': article_up, '2': article_comment} 134 while True: 135 print('1.赞;2.评论;') 136 choice = input('请选择(N返回上一级):') 137 if choice.upper() == 'N': 138 return 139 func = func_dict.get(choice) 140 if not func: 141 print('选择错误,请重新输入。') 142 result = func(row_dict) 143 if result: 144 show_article_detail(row_dict) 145 continue 146 147 148 print('用户未登录,请登录后再进行点赞和评论。') 149 to_login = input('是否进行登录?yes/no:') 150 if to_login == 'yes': 151 login() 152 153 154 155 156 def show_article_detail(row_dict): 157 print('=================== 文章详细 ===================') 158 msg = '%s\n%s\n赞(%s) 评论(%s)' % (row_dict['title'], row_dict['content'], row_dict['up'], len(row_dict['comment'])) 159 print(msg) 160 if len(row_dict['comment']): 161 print('评论列表(%s)' % len(row_dict['comment'])) 162 for item in row_dict['comment']: 163 comment = " %s - %s" % (item['data'], item['user']) 164 print(comment) 165 166 167 168 169 def auth(func): 170 def inner(*args, **kwargs): 171 if CURRENT_USER: 172 return func(*args, **kwargs) 173 return False 174 175 176 return inner 177 178 179 180 181 @authdef article_up(row_dict): 182 """ 183 点赞文章 184 :param row_dict: 185 :return: 186 """ 187 row_dict['up'] += 1 188 print('点赞成功') 189 return True 190 191 192 193 194 @authdef article_comment(row_dict): 195 """ 196 评论文章 197 :param row_dict: 198 :return: 199 """ 200 while True: 201 comment = input('请输入评论(N返回上一级):') 202 if comment.upper() == 'N': 203 return True 204 row_dict['comment'].append({'data': comment, 'user': CURRENT_USER}) 205 print('评论成功') 206 207 208 209 210 def run(): 211 """ 212 主函数 213 :return: 214 """ 215 print('=================== 系统首页 ===================') 216 func_dict = {'1': register, '2': login, '3': article_list} 217 while True: 218 print('1.注册;2.登录;3.文章列表') 219 choice = input('请选择序号:') 220 if choice.upper() == 'N': 221 return 222 func = func_dict.get(choice) 223 if not func: 224 print('序号选择错误') 225 continue 226 func() 227 228 229 230 231 if __name__ == '__main__': 232 run()