- 이번 프로그램은 이전글(2022.11.29 - [분류 전체보기] - 파이썬 GUI/윈도우 FTP(파일전송) 프로그램 만들기 - 2.사전 준비 작업)에 이은 3번째 글로 준비된 FTP서버에 로그인 하는 부분을 설명합니다.
(본 블로그의 내용은 유튜브 동영상(파이썬 GUI Window FTP(파일전송) 프로그램 만들기-3.로그인-1)(GUI/Window FTP program by Python-3.login-1))에서 더욱 자세히 보실 수 있습니다.)
**본 프로그램은 아래 깃허브 사이트의 소스를 참고하여 작성하였으며, 세부내용은 아래 사이트를 참고하여 주시기 바랍니다.
[출처] 깃허브, f.tea.p | 작성자 armut
https://github.com/armut/f.tea.p
(1) 아래에서와 같이 프로그램을 실행시키면 ftp서버에 접속할 수 있는 창이 뜨고, 여기에 서버IP주소(호스트), 아이디, 패스워드를 입력 후 엔터 또는 연결 버튼을 클릭하면 서버에 로그인 됩니다.
O 시작전 준비 사항
- 이번글을 실습하기 위해서는 이전글(2022.11.29 - [분류 전체보기] - 파이썬 GUI/윈도우 FTP(파일전송) 프로그램 만들기 - 2.사전 준비 작업)에서 설명한 ftp서버를 준비하셔야 합니다.
# -*- coding: utf-8 -*-
import sys
from PyQt5.QtWidgets import *
from PyQt5 import uic, QtCore, QtGui, QtWidgets
from PyQt5.QtGui import *
from ftplib import FTP
form_class = uic.loadUiType("1.FTPClient2_C.ui")[0]
class FTPClass():
__instance = None
@staticmethod
def tea():
if not FTPClass.__instance:
raise Exception("FTPClass를 먼저 인스턴스화 해야 합니다.")
return FTPClass.__instance
@staticmethod
def reset():
FTPClass.__instance = None
def __init__(self, banana):
if FTPClass.__instance:
raise Exception("인스턴스가 이미 존재합니다.")
FTPClass.__instance = banana
class LoginWindow(QtWidgets.QMainWindow, form_class):
def __init__(self):
super().__init__()
self.setFixedSize(820,900)
self.setWindowIcon(QIcon("pagichacha.png"))
self.setupUi(self)
self.lineEdit_5.returnPressed.connect(self.ftpConnect)
self.pushButton.clicked.connect(self.ftpConnect)
def ftpConnect(self):
HOST = self.lineEdit.text()
ID = self.lineEdit_4.text()
PW = self.lineEdit_5.text()
# PORT = int(self.lineEdit_6.text())
FTPClass.reset()
ret = FTPClass(FTP(HOST))
print(ret,"+++++++++++++++++ 1")
FTPClass.tea().encoding = 'utf-8'
result = FTPClass.tea().login(ID, PW)
print(result)
if result and result.split(' ')[0] == '230':
print("로그인 성공!!")
self.textEdit_2.setText(result+"로그인 성공!!")
else:
print("Something went wrong.")
self.textEdit_2.setText("로그인 실패!!!!, ID/PW 등을 정확히 입력했는지 확인해 보시기 바랍니다.!")
app=QApplication(sys.argv)
# window = MyWindow()
window = LoginWindow()
window.show()
print("Before event loop")
app.exec_()
print("After event loop")
1.form_class = uic.loadUiType("1.FTPClient2_C.ui")[0] <-- qt disigner로 만든 UI를 사용하겠다.
2.class FTPClass(): <-- ftp서버 연결을 위한 클래스 선언
3.@staticmethod <-- 다른 클래스에서 사용 가능하도록 staticmethod 키워드를 사용(이 키워드 아래에 정의된 함수를 다른 클래스에서 사용 가능)
4.
@staticmethod
def tea(): <-- 인스턴스를 리턴
if not FTPClass.__instance:
raise Exception("FTPClass를 먼저 인스턴스화 해야 합니다.")
return FTPClass.__instance
5.
@staticmethod
def reset(): <-- 인스턴스를 'None'로 설정
FTPClass.__instance = None
6.
def __init__(self, banana): <-- 클래스의 인스턴스 초기화
if FTPClass.__instance:
raise Exception("인스턴스가 이미 존재합니다.")
FTPClass.__instance = banana
7.
class LoginWindow(QtWidgets.QMainWindow, form_class):
self.setupUi(self) <-- form_class UI를 사용하겠다
8.self.lineEdit_5.returnPressed.connect(self.ftpConnect) <-- lineEdit_5(패스워드) 입력 후 엔터 시 ftpConnect()함수 호출
9.self.pushButton.clicked.connect(self.ftpConnect) <-- pushButton(연결버튼) 클릭 시 ftpConnect()함수 호출
10. HOST = self.lineEdit.text() <-- lineEdit(호스트)의 값을 읽어서 HOST변수에 저장(아래 해설 동일함)
11.ID = self.lineEdit_4.text()
12.PW = self.lineEdit_5.text()
13.FTPClass.reset() <-- LoginWindow클래스 내에서 다른 클래스(FTPClass)의 함수를 직접 호출(@staticmethod로 선언해줘서 가능), 인스턴스를 'None'로 설정
14.ret = FTPClass(FTP(HOST)) <-- ftp서버에 연결
15.FTPClass.tea().encoding = 'utf-8' # 서버 접속 후 디렉토리 또는 파일명이 한글이면 깨지는 것을 방지
16.result = FTPClass.tea().login(ID, PW) <-- 연결된 ftp서버에 로그인 시도
17.
if result and result.split(' ')[0] == '230': <-- 서버쪽 리턴 값이 '230' 이면 로그인 성공
print("로그인 성공!!")
self.textEdit_2.setText(result+"로그인 성공!!") <-- 화면에 '로그인 성공' 메시지 출력
else:
print("Something went wrong.")
self.textEdit_2.setText("로그인 실패!!!!, ID/PW 등을 정확히 입력했는지 확인해 보시기 바랍니다.!")
1. ftp서버를 실행 후 아래 그림에서 보듯이 ftp서버의 IP를 확인합니다.
2. (1)프로그램 실행 후 위에서 확인한 ftp서버의 IP를 (2)호스트에 입력하고 (3)아이디, (4)패스워드를 입력 후 엔터 또는 (5) '연결' 버튼을 클릭 후 아래 창에 정상적으로 로그인 되었다는 메시지('로그인 성공')가 뜬다면, 잘 실행된 것입니다.
3. 기본적인 소스 분석 내용은 위의 '소스 분석'을 참고 하시기 바라며, 여기서는 주요한 부분만 살펴 보겠습니다.
프로그램 실행 후 패스워드 까지 입력 후 엔터를 누르면 아래 코드에 의해 ftpConnect()함수가 실행됩니다.
'self.lineEdit_5.returnPressed.connect(self.ftpConnect)'
또는 '연결' 버튼을 클릭 시 아래 코드에 의해 동일하게 ftpConnect()함수가 실행됩니다.
self.pushButton.clicked.connect(self.ftpConnect)
Qt Designer에서 확인한 모습니다.
(Qt Designer 프로그램의 위치는 기본으로 설치시 "C:\anaconda3\Library\bin\designer.exe" <-- 여기에 위치합니다.)
4.ftp서버의 기능을 사용하기 위해 FTPClass 클래스를 정의하였습니다.
@staticmethod 키워드를 써서 다른 클래스에서 사용할 수 있도록 해주었고, 인스턴스를 초기화 해 주었습니다.
오늘은 여기까지이며, 위의 내용이 유익하셨다면, 좋아요와 구독 부탁드립니다.
감사합니다.
'파이썬 실습 > GUI,윈도우 FTP(파일전송)프로그램 만들기' 카테고리의 다른 글
파이썬 GUI/윈도우 FTP(파일전송) 프로그램 만들기 - 3.로그인-4)원격디렉토리목록보기 (0) | 2022.12.03 |
---|---|
파이썬 GUI/윈도우 FTP(파일전송) 프로그램 만들기 - 3.로그인-3)트리뷰이벤트처리하기 (2) | 2022.12.03 |
파이썬 GUI/윈도우 FTP(파일전송) 프로그램 만들기 - 3.로그인-2)로컬디렉토리목록보기 (0) | 2022.12.03 |
파이썬 GUI/윈도우 FTP(파일전송) 프로그램 만들기 - 2.사전 준비 작업 (0) | 2022.11.30 |
파이썬 GUI/윈도우 FTP(파일전송) 프로그램 만들기 - 1.소개편 (0) | 2022.11.27 |