用户的三次登录验证及进度条

服务器端
import socketserver
import json
import hashlib

def zhuce():
    pass

class MySocket(socketserver.BaseRequestHandler):
    def handle(self):
        sor = b'wusir'#
        while 1:
            str_dic = self.request.recv(1024).decode('utf-8')
            # 接收到 一个字典,类似于{'status':False,'username':None,'password':None}
            if not str_dic:break # 当客户端登录失败退出程序的情况下,这里会接收到一个空消息。
            dic = json.loads(str_dic)
            if not dic['status']:
                '''没有登录成功的情况下'''
                with open('info','r',encoding='utf-8') as f:
                    # 文件内容的存储方式  用户名|密码
                    for info in f:
                        username,pawd_txt = info.strip().split('|')
                        if username == dic['username']:
                            '''用户存在,就对客户端发来的用户的密码再次加密,与文件中对比'''
                            md5_obj = hashlib.md5(sor)
                            md5_obj.update(dic['password'].encode('utf-8'))
                            pawd = md5_obj.hexdigest()
                            if pawd_txt == pawd:
                                dic['status'] = True
                            else:
                                dic['reason'] = '密码错误'
                            break
                    else:
                        dic['reason'] = '用户不存在'
                        zhuce()
                str_dic = json.dumps(dic)
                self.request.send(str_dic.encode('utf-8'))
            else:
                '''已经是登录成功了'''

server = socketserver.ThreadingTCPServer(('127.0.0.1',8080),MySocket)
server.serve_forever()



客户端


import socket
import hashlib
import json
sk = socket.socket()
sk.connect(('127.0.0.1',8080))

dic = {'status':False,'username':None,'password':None}
c = 3
while c:
    username = input('请输入用户名')
    password = input('请输入密码')

    md5_obj = hashlib.md5(password.encode('utf-8'))
    md5_obj.update(username.encode('utf-8'))
    pawd_m = md5_obj.hexdigest()

    dic['username'] = username
    dic['password'] = pawd_m
    str_dic = json.dumps(dic)
    sk.send(str_dic.encode('utf-8'))

    # 服务器应该回复我一个这样的字典:
    # 是否登录成功,如果没有登录成功是因为什么原因?
    res_dic = sk.recv(1024).decode('utf-8')# str_dic
    result = json.loads(res_dic)# dic = {status:False/True ,  username ,   password,   reason}
    if result['status']:
        print('登录成功')
        break
    else:
        print('失败,%s'%result['reason'])
        c -= 1

sk.close()

  进度条

import time
# 1024*15 / 1500000
for i in range(51):
    time.sleep(0.12)
    print('\r'+ (i//2)*"■" + '>' + str(i*2) + '%',end='')

  

posted on 2018-08-21 15:32  你们都厉害  阅读(402)  评论(0编辑  收藏  举报