码迷,mamicode.com
首页 > 编程语言 > 详细

python练习——moudule03——选课系统

时间:2018-01-29 00:19:39      阅读:248      评论:0      收藏:0      [点我收藏+]

标签:面向   ever   update   and   check   .section   tar   attr   date   

开发简单的FTP:
1. 用户登陆
2. 上传/下载文件put/get
3. 不同用户家目录不同home
4. 查看当前目录下文件ls
5. 充分使用面向对象知识

目录:

技术分享图片

技术分享图片
  1 import os,socket,optparse,json,time
  2 
  3 STATUS_CODE ={
  4     200 : "操作成功",
  5     601 : 操作失败
  6 }
  7 
  8 class FTPClient(object):
  9     def __init__(self):
 10         self.parser = optparse.OptionParser()
 11         self.parser.add_option(-H, --host, dest=host, help=host of server)
 12         self.parser.add_option(-P,--port,type=int,dest= port,help=port of server)
 13         self.parser.add_option(-u,--username,dest= username,help=username)
 14         self.parser.add_option(-p,--password,dest= password,help=password)
 15         (self.options,self.args) = self.parser.parse_args()
 16         self.verify_args()
 17         self.make_connection()
 18         self.header = {}
 19 
 20     def make_connection(self):
 21         self.sock = socket.socket()
 22         self.sock.connect((self.options.host,self.options.port))
 23 
 24     def verify_args(self):
 25         if self.options.host and self.options.port:
 26             if self.options.port > 0 and self.options.port<= 65535:
 27                 if self.options.username and self.options.password:
 28                     return True
 29                 else:
 30                     exit(check your username and password)
 31             else:
 32                 exit("worry Port!")
 33 
 34         else:
 35             exit(Please check your host and port! They can not be null!)
 36 
 37     def authenticate(self):
 38         ‘‘‘登陆验证‘‘‘
 39         # print(‘authenticating.........‘)
 40         # print(self.get_auth_result(self.options.username,self.options.password).get(‘code‘))
 41         if self.get_auth_result(self.options.username,self.options.password).get(code) == 200:
 42             self.header = {username:self.options.username}
 43             return True
 44         else:
 45             raise Exception(worry username or password!)
 46             # retry_count = 0
 47             # while retry_count < 3:
 48             #     user = input("username>>>").strip()
 49             #     password = input("password>>>").strip()
 50             #     self.get_auth_result(user,password)
 51             # else:
 52             #     retry_count += 1
 53     def get_auth_result(self,username,password):
 54         data = {
 55             action : auth,
 56             username : username,
 57             password : password
 58         }
 59         # print(data)
 60         self.sock.sendall(json.dumps(data).encode())
 61         # print(‘send sucessfully‘)
 62         # print(self.get_response())
 63         # print(type(self.get_response()))
 64         return  self.get_response()
 65 
 66     def get_response(self):
 67         ‘‘‘获取服务器结果‘‘‘
 68         recv = self.sock.recv(1024)
 69         recv = json.loads(recv.decode())
 70         # print(recv)
 71         print(response,recv)
 72         # print(type(recv))
 73         return recv
 74 
 75     def opearte_cmd(self,cmd):
 76         # print(‘12345‘)
 77         # print(cmd,‘&&&&&&&&‘)
 78         if cmd is None :
 79             raise Exception(cmd cannot be null)
 80         cmd_list =cmd.split()
 81         if cmd_list[0] ==get and len(cmd_list) == 2:
 82             self._get(cmd)
 83             return
 84         if cmd_list[0] ==put and len(cmd_list) == 2:
 85             if os.path.exists(cmd_list[1]):
 86                 self._put(cmd)
 87                 return
 88         if cmd_list[0] ==ls:
 89             self._ls()
 90             return
 91         if cmd_list[0] ==exit:
 92             exit()
 93         else:
 94             raise Exception(cmd is worry!please try again later!)
 95 
 96     def get_FileSize(self,filePath):
 97         fsize = os.path.getsize(filePath)
 98         # fsize = fsize / float(1024)
 99         # return round(fsize, 2)
100         return fsize
101     def _get(self,cmd):
102         cmd_list = cmd.split()
103         data = {
104             header: self.header,
105             action: get,
106             filename: cmd_list[1]
107         }
108         recv = self.sock.sendall(json.dumps(data).encode())
109         response = self.get_response()
110         print(recv,response)
111 
112         if response.get(code) == 200:
113             file_size = response.get(file_size)
114             with open(cmd_list[1],wb) as f:
115                 recv_size = 0
116                 while recv_size < int(file_size):
117                     recv_data = self.sock.recv(1024)
118                     # print(recv_data)
119                     recv_size += len(recv_data)
120                     # print(recv_size)
121                     f.write(recv_data)
122                     self.sock.send(b1)
123                 print(self.get_response())
124             return
125         else:
126             raise Exception(worry with server in get file .)
127 
128 
129     def _put(self,cmd):
130         cmd_list = cmd.split()
131         filename = cmd_list[1].split(\\)[-1]
132         print(cmd_list[1])
133         file_size = self.get_FileSize(cmd_list[1])
134         data = {
135             header: self.header,
136             action: put,
137             filename: filename,
138             file_size:file_size
139         }
140         self.sock.sendall(json.dumps(data).encode())
141         recv = self.get_response()
142         if recv.get(code) == 200:
143             print(os.path.exists(cmd_list[1]))
144             f = open(cmd_list[1],rb)
145             size = 0
146             for line in f:
147                 size += len(line)
148                 # print(size)
149                 # print(line)
150                 self.sock.send(line)
151                 self.sock.recv(1)
152             f.close()
153             print(recv:,self.get_response())
154             return True
155         else:
156             msg = {
157                 code:recv.get(code),
158                 message:  STATUS_CODE.get(recv.get(code))
159                    }
160             raise Exception(msg)
161 
162     def _ls(self):
163         data = {
164             header: self.header,
165             action: ls
166         }
167         self.sock.sendall(json.dumps(data).encode())
168         print(recv:, self.get_response())
169         return True
170 
171 #python FTP1\Client\client.py -H 127.0.0.1 -P 9001 -u alex -p 1234
172 
173     def interactive(self):
174         if self.authenticate():
175             print(start interactive.center(60,-))
176             while True:
177                 print(‘‘‘
178                 List of functions:
179                 get :   e.g:get XXX.txt,
180                 put :   e.g:put XXX.txt,
181                 ls  :   e.g:ls
182                 exit :  e.g:exit
183                 ‘‘‘)
184                 cmd = input("cmd>>>").strip()
185                 self.opearte_cmd(cmd)
186                 continue
187 
188 
189 #python FTP1\Client\client.py -H 127.0.0.1 -P 9001 -u alex -p 1234
190 # put C:\Users\Administrator\Desktop\noteForPython.txt
191 if __name__ == __main__:
192     client = FTPClient()
193     client.interactive()
client.py
技术分享图片
1 import os,sys
2 base_dir = os.path.dirname(os.path.dirname(os.path.abspath(__file__)))
3 sys.path.append(base_dir)
4 
5 from core import main
6 
7 if __name__ == __main__:
8     main.ArgvHandler()
server.py
技术分享图片
 1 import os,sys
 2 base_dir = os.path.dirname(os.path.dirname(os.path.abspath(__file__)))
 3 
 4 USER_HOME = %s/home%(base_dir)
 5 LOG_DIR = %s/log%(base_dir)
 6 LOG_level = DEBUG
 7 ACCOUNT_FILE = %s/db/account.ini%(base_dir)
 8 
 9 HOST = 127.0.0.1
10 PORT = 9001
settings.py
技术分享图片
  1 import socketserver,json,configparser,os,time
  2 
  3 STATUS_CODE ={
  4     200 : "操作成功",
  5     601 : 操作失败
  6 }
  7 Base_dir = os.path.dirname(os.path.dirname(os.path.abspath(__file__)))
  8 from conf import settings
  9 class FTPHandler(socketserver.BaseRequestHandler):
 10     def handle(self):
 11         while True:
 12             print("welcome to FTPHander-handle-whileTrue...")
 13             self.data = self.request.recv(1024).strip()
 14             if  self.data is None:
 15                 print("Client is closed")
 16                 break
 17             print(self.client_address[0])
 18 
 19             data = json.loads(self.data.decode())
 20 
 21             if data.get(action) == auth:
 22                 self._auth(data)
 23             elif data.get(action) in (put,get,ls):
 24                 func = getattr(self,_%s%data.get(action))
 25                 func(data)
 26             else:
 27                 print(invlid cmd)
 28                 self.send_response(601)
 29 
 30 
 31     def _auth(self,data):
 32         # print(data)
 33         parser = configparser.ConfigParser()
 34         parser.read(settings.ACCOUNT_FILE)
 35         section_list = parser.sections()
 36         if data.get(username) in section_list:
 37             true_pwd = parser.get(data.get(username),password)
 38             quation = parser.get(data.get(username),quation)
 39             # print(true_pwd,quation)
 40             # print(data.get(‘password‘))
 41             if true_pwd == data.get(password):
 42                 # print(‘1313‘)
 43                 self.send_response(200)
 44 
 45 
 46     # def _auth(self,*args,**kwargs):
 47     #     print(args.center(60,‘-‘))
 48     #     parser = configparser.ConfigParser()
 49     #     parser.read(settings.ACCOUNT_FILE)
 50     #     section_list = parser.sections()
 51     #     if args[‘username‘] in section_list:
 52     #         true_pwd = parser.get(args[‘username‘],‘password‘)
 53     #         quation = parser.get(args.get[‘username‘],‘quation‘)
 54     #         if true_pwd == args[‘password‘]:
 55     #             self.send_response(200)
 56         # if args.get(‘username‘) in section_list:
 57         #     true_pwd = parser.get(args.get(‘username‘),‘password‘)
 58         #     quation = parser.get(args.get(‘username‘),‘quation‘)
 59         #     if true_pwd == args.get(‘password‘):
 60         #         self.send_response(200)
 61 
 62     def send_response(self,code,data=None):
 63         response ={code:code,msg:STATUS_CODE[code]}
 64         if data:
 65             response.update( data )
 66         self.request.send(json.dumps(response).encode())
 67 
 68     def verify_data(self,*args):
 69         pass
 70 
 71     def _put(self,data):
 72         print(start put......................................................)
 73         self.verify_data(data)
 74         if data.get(header) == {}:
 75             self.send_response(601)
 76         parser = configparser.ConfigParser()
 77         parser.read(settings.ACCOUNT_FILE)
 78         section_list = parser.sections()
 79         username_of_data = data.get(header).get(username)
 80         flag = username_of_data in section_list
 81         # print(flag)
 82         if flag:
 83             quation =  parser.get(username_of_data, quation)
 84             # home_DIR = Base_dir.join(‘home\%s‘ % username_of_data)
 85             home_DIR = os.path.join(Base_dir,home\%s % username_of_data)
 86             # print(home_DIR)
 87             user_exit_file = os.listdir(home_DIR)
 88             print(user_exit_file)
 89             size_exited = 0
 90             for filePath in user_exit_file:
 91                 filePath = os.path.join(home_DIR,filePath)
 92                 size_exited += self.get_FileSize(filePath)
 93 
 94             puted_file_size = data.get(file_size)
 95 
 96             if puted_file_size > int(quation) - size_exited:
 97                 self.send_response(601)
 98             else:
 99                 self.send_response(200)
100                 puted_filename = data.get(filename)
101                 if puted_filename in user_exit_file:
102                     puted_filename = %s-1% puted_filename
103                 # filename = home_DIR.join(puted_filename)
104                 filename = os.path.join(home_DIR,puted_filename)
105                 get_FileSize = 0
106                 with open(filename,"wb") as f:
107                     while get_FileSize < puted_file_size:
108                         file_data = self.request.recv(1024)
109                         f.write(file_data)
110                         get_FileSize += len(file_data)
111                         self.request.send(b1)
112                         # print(file_data)
113                         # print(get_FileSize, puted_file_size)
114                     self.send_response(200)
115                 print(put successfully....center(60,-))
116 
117 
118     def get_FileSize(self,filePath):
119         fsize = os.path.getsize(filePath)
120         # fsize = fsize / float(1024)
121         # return round(fsize, 2)
122         return fsize
123 
124     def _get(self,data):
125         print(start get................)
126         # self.verify_data(data)
127         if data.get(header) == {}:
128             self.send_response(601)
129         parser = configparser.ConfigParser()
130         parser.read(settings.ACCOUNT_FILE)
131         section_list = parser.sections()
132         username_of_data = data.get(header).get(username)
133         filename = data.get(filename)
134         # home of user
135         home_DIR = os.path.join(Base_dir,home\%s % username_of_data)
136         #abspath
137         filename = os.path.join(home_DIR,filename)
138         if os.path.isfile(filename):
139             file_size = os.path.getsize(filename)
140             self.send_response(200,{file_size:%s%file_size})
141             f = open(filename,rb)
142             for line in f:
143                 print(line)
144                 self.request.send(line)
145                 self.request.recv(1)
146             self.send_response(200)
147             print("get successfully.....")
148         else:
149             self.send_response(601)
150 
151 
152     def _ls(self,data):
153         print(start ls...)
154         self.verify_data(data)
155         if data.get(header) == {}:
156             self.send_response(601)
157         parser = configparser.ConfigParser()
158         parser.read(settings.ACCOUNT_FILE)
159         section_list = parser.sections()
160         username_of_data = data.get(header).get(username)
161         flag = username_of_data in section_list
162         if flag:
163             home_DIR = os.path.join(Base_dir, home\%s % username_of_data)
164             user_exit_file = os.listdir(home_DIR)
165             self.request.sendall(json.dumps(user_exit_file).encode())
166             for i in user_exit_file:
167                 print(i)
168 
169 
170     def _cd(self,*args,**kwargs):
171         pass
172 
173 if __name__ == __main__:
174     HOST, PORT = settings.Host, settings.PORT
ftp_server.py
技术分享图片
 1 from core.ftp_server import FTPHandler
 2 from conf import settings
 3 import socketserver
 4 
 5 class ArgvHandler(object):
 6     def __init__(self):
 7         self.start()
 8         # self.parser = optparse.OptionParser()
 9         # self.parser.add_option(‘-H‘,‘--host‘,dest= ‘host‘,help=‘host of server‘)
10         # self.parser.add_option(‘-P‘,‘--port‘,type=int,dest= ‘port‘,help=‘port of server‘)
11         # (self.options,self.args) = self.parser.parse_args()
12         # print(self.options,self.args)
13         # # print(dir(self.options))
14         # print(self.options.host)
15         # self.verify_args()
16 
17 
18     def verify_args(self):
19         if hasattr(self,self.args[0]):
20             func = getattr(self,self.args[0])
21             func()
22 
23         else:
24             print(self.parser.print_help())
25 
26     def start(self):
27         print(going to start....center(60,-))
28         server = socketserver.ThreadingTCPServer((settings.HOST, settings.PORT),FTPHandler)
29         server.serve_forever()
main.py

 

python练习——moudule03——选课系统

标签:面向   ever   update   and   check   .section   tar   attr   date   

原文地址:https://www.cnblogs.com/Macal/p/8372907.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!