Класс pyftpdlib.handlers.FTPHandler(conn, server)
реализует интерпретатор протокола FTP-сервера (см. RFC-959), обрабатывая команды, полученные от клиента по каналу управления, путем вызова соответствующего метода этой команде. Например, для полученной команды "MKD pathname"
вызывается метод .ftp_MKD()
с pathname
в качестве аргумента).
Вся соответствующая информация о сеансе хранится в переменных экземпляра. Аргументы conn
- это базовый экземпляр объекта сокета вновь установленного соединения, server
- это экземпляр класса pyftpdlib.servers.FTPServer
. Базовое использование просто требует создания экземпляра класса FTPHandler
и указания, какой экземпляр авторизатора он будет использовать:
>>> from pyftpdlib.handlers import FTPHandler >>> from pyftpdlib.authorizers import DummyAuthorizer >>> handler = FTPHandler >>> authorizer = DummyAuthorizer() >>> authorizer.add_anonymous(homedir='/somedir') >>> handler.authorizer = authorizer
Через подклассы FTPHandler()
можно использовать обратные вызовы на какие то действия пользователя.
Небольшой пример, который показывает, как это сделать:
from pyftpdlib.handlers import FTPHandler from pyftpdlib.servers import FTPServer from pyftpdlib.authorizers import DummyAuthorizer class MyHandler(FTPHandler): def on_connect(self): print (f'Connected {self.remote_ip}:{self.remote_port}') def on_disconnect(self): # сделать что-нибудь, когда клиент отключается pass def on_login(self, username): # сделать что-нибудь, когда пользователь войдет в систему pass def on_logout(self, username): # сделать что-нибудь, когда пользователь выйдет из системы pass def on_file_sent(self, file): # сделать что-нибудь, когда файл был отправлен pass def on_file_received(self, file): # сделать что-нибудь, когда файл был получен pass def on_incomplete_file_sent(self, file): # сделать что-нибудь, когда файл частично отправлен pass def on_incomplete_file_received(self, file): # удалить частично загруженные файлы import os os.remove(file) def main(): authorizer = DummyAuthorizer() authorizer.add_user('user', '12345', homedir='.', perm='elradfmwMT') authorizer.add_anonymous(homedir='.') handler = MyHandler handler.authorizer = authorizer server = FTPServer(('', 2121), handler) server.serve_forever() if __name__ == "__main__": main()