1、作业需求
开发简单的FTP:
1. 用户登陆
2. 上传/下载文件
3. 不同用户家目录不同
4. 查看当前目录下文件
5. 充分使用面向对象知识
2、流程图
3、目录结构
4、代码区
bin目录下的start.py程序执行文件
# -*- coding:utf-8 -*- # Author:D.Gray import os,sys BASE_DIR = os.path.dirname(os.path.dirname(os.path.abspath(__file__))) sys.path.append(BASE_DIR) from core import ftp_client fc = ftp_client.FTP_client()
# -*- coding:utf-8 -*- # Author:D.Gray import os,sys BASE_DIR = os.path.dirname(os.path.dirname(os.path.abspath(__file__))) sys.path.append(BASE_DIR) from core import ftp_server fs = ftp_server.FTP_server()
conf目下的setting.py系统配置文件
# -*- coding:utf-8 -*- # Author:D.Gray import os,sys,socket BASE_DIR = os.path.dirname(os.path.dirname(os.path.abspath(__file__))) #IP地址和端口 IP_PORT = ("localhost",6969) #数据文件路径 USER_FILE = BASE_DIR + r"dbuser.db" #用户文件目录 USER_HOME = BASE_DIR
core目录下主程序文件
# -*- coding:utf-8 -*- # Author:D.Gray import os,sys,socket from conf import setting from core import ftp_server from core import users class FTP_client(object): def __init__(self): self.client = setting.socket.socket() self.client.connect(setting.IP_PORT) self.user_obj = users.Users() self.help_info = { "get":"用于上传文件,例如:get readme.txt 即 get 文件名", "put":"用于下载文件,例如:put readme.txt 即 put 文件名", 'dir':"用于显示当前目录下文件或文件详细信息 格式 ls " } if self.auth(): self.start() def auth(self): ''' 用户登录验证函数 :return: ''' while True: username = input("请输入用户名>>>:").strip() pwd = input("请输入用户密码>>>:").strip() auth_info = 'auth %s %s'%(username,pwd) #格式化输出 auth 用户名 密码 self.client.send(auth_info.encode()) #将格式化后的内容发送给服务端 back_res = self.client.recv(1024).decode() if back_res == "ok": print('认证成功') user = self.user_obj.get_user(username) self.current_user = username self.current_pwd = pwd self.current_path = user['home'] self.current_dir = back_res[1] return True elif back_res == "Not password": print("