Loading

新闻系统示例

新闻系统

自己设计合理的文件或数据结构,满足一下需求:
  • 用户登录,需要让用户输入动态验证码及对密码进行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()
Demo

 

 
posted @ 2019-11-19 01:32  陌路麒麟  阅读(20)  评论(0编辑  收藏  举报