Computer >> 컴퓨터 >  >> 프로그래밍 >> Python

파이썬 CGI 스크립트로 간단한 폼(양식) 데이터 처리하는 방법

CGI(Common Gateway Interface)는 웹 서버와 외부 프로그램(스크립트) 사이에서 데이터를 주고받기 위한 표준 방식입니다. 이 글에서는 HTML 폼에서 입력받은 사용자 데이터를 파이썬 CGI 스크립트로 전달하고 처리하는 가장 기본적인 방법을 단계별로 살펴봅니다.

1단계: HTML 폼 작성하기

먼저 사용자로부터 이름을 입력받는 간단한 HTML 폼을 만듭니다. 아래 예시를 보겠습니다.

<form action="getData.py" method="post">
   FirstName: <input type="text" name="first_name">
   LastName: <input type="text" name="last_name">
   <input type="submit" value="go">
</form>

여기서 중요한 부분은 다음과 같습니다.

action="getData.py" — 폼이 제출되면 데이터가 getData.py라는 파이썬 스크립트로 전송됩니다.
method="post" — POST 방식을 사용하므로 입력된 데이터가 URL에 노출되지 않고 HTTP 요청 본문에 담겨 전달됩니다.
name 속성 — first_name과 last_name이라는 필드 이름이 파이썬 스크립트에서 값을 읽어올 때의 키(key)로 사용됩니다.

2단계: 파이썬 CGI 스크립트 작성하기

폼이 제출되면 getData.py 파일이 실행됩니다. 이 스크립트는 HTML 페이지에서 전송된 데이터를 받아 화면에 출력하는 역할을 합니다. 아래는 해당 파이썬 CGI 코드입니다.

#!C:\Python27\python.exe
# CGI 처리를 위한 모듈 임포트
import cgi, cgitb

# FieldStorage 인스턴스 생성
form = cgi.FieldStorage()

# 필드에서 데이터 가져오기
first_name = form.getvalue('first_name')
last_name = form.getvalue('last_name')

print("Content-type:text/html")
print
print("")
print("")
print("Hello - Second CGI Program")
print("")
print("")
print("
   Hello %s %s
   " % (first_name, last_name))
print("")
print("")

코드 상세 설명

셔뱅(Shebang) 라인 — #!C:\Python27\python.exe는 이 스크립트를 실행할 파이썬 인터프리터의 경로를 지정합니다. 리눅스 환경에서는 일반적으로 #!/usr/bin/python과 같이 작성합니다.

cgi와 cgitb 모듈 — cgi 모듈은 폼 데이터를 다루는 핵심 모듈이며, cgitb 모듈은 스크립트 실행 중 오류가 발생했을 때 브라우저에 상세한 디버그 정보를 표시해 주어 문제 해결에 유용합니다.

cgi.FieldStorage() — POST 또는 GET으로 전송된 폼 데이터를 담는 객체입니다. 이 객체를 통해 각 입력 필드의 값에 접근할 수 있습니다.

form.getvalue('필드명') — HTML 폼의 name 속성값을 키로 사용하여 해당 입력값을 가져옵니다. first_name과 last_name에 저장된 값이 여기서 읽혀집니다.

Content-type 헤더 출력 — print("Content-type:text/html")은 브라우저에게 이제부터 HTML 문서가 전송된다는 것을 알려주는 HTTP 헤더입니다. 반드시 본문 출력 전에 먼저 출력해야 하며, 그 뒤의 빈 print 한 줄은 헤더와 본문을 구분하는 빈 줄 역할을 합니다.

%s 포맷팅 — %s 자리에 first_name과 last_name 값이 순서대로 삽입되어 "Hello 홍길동 김"과 같은 형태로 인사말이 출력됩니다.

실행 결과

폼에 이름을 입력하고 go 버튼을 누르면 getData.py가 실행되어 다음과 같은 결과가 브라우저에 나타납니다.

Hello - Second CGI Program
Hello [입력한 이름] [입력한 성]

참고 사항

위 예제는 Python 2.7 기준의 전통적인 CGI 방식입니다. 최신 프로젝트에서는 Flask나 Django 같은 웹 프레임워크를 사용하는 것이 성능, 보안, 유지보수 측면에서 훨씬 유리합니다. 다만 CGI는 웹이 요청을 처리하는 원리를 이해하는 데 좋은 학습 예제이며, 간단한 내부 도구나 소규모 스크립트에는 여전히 활용할 수 있습니다.