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

Python CGI 프로그래밍: 체크박스 데이터 전달하고 처리하는 방법

체크박스(Checkbox)는 사용자가 여러 개의 옵션을 동시에 선택할 수 있어야 할 때 사용됩니다. 라디오 버튼과 달리 하나의 그룹에서 복수 선택이 가능하기 때문에 설문조사, 관심 분야 선택 등 웹 폼에서 널리 활용됩니다. 이 글에서는 HTML 폼으로 체크박스 데이터를 전송하고, Python CGI 스크립트에서 해당 값을 받아 처리하는 방법을 알아보겠습니다.

HTML 폼 예제

다음은 두 개의 체크박스를 포함하는 HTML 폼 코드입니다.

<form action = "/cgi-bin/checkbox.cgi" method = "POST" target = "_blank">
<input type = "checkbox" name = "maths" value = "on" /> Maths
<input type = "checkbox" name = "physics" value = "on" /> Physics
<input type = "submit" value = "Select Subject" />
</form>

주요 속성 설명

  • action: 폼 데이터가 전송될 CGI 스크립트의 경로를 지정합니다.
  • method="POST": 데이터를 HTTP 요청 본문에 담아 전송합니다.
  • target="_blank": 처리 결과를 새 창(또는 새 탭)에 표시합니다.
  • name: 각 체크박스를 구분하는 키 값으로, CGI 스크립트에서 이 이름으로 데이터를 조회합니다.

실행 결과

위 코드를 브라우저에서 열면 다음과 같은 체크박스 폼이 화면에 나타납니다.

Python CGI 프로그래밍: 체크박스 데이터 전달하고 처리하는 방법

checkbox.cgi 스크립트 작성하기

웹 브라우저에서 전달된 체크박스 입력값을 처리하는 CGI 스크립트는 아래와 같습니다.

#!/usr/bin/python
# Import modules for CGI handling
import cgi, cgitb
# Create instance of FieldStorage
form = cgi.FieldStorage()
# Get data from fields
if form.getvalue('maths'):
   math_flag = "ON"
else:
   math_flag = "OFF"
if form.getvalue('physics'):
   physics_flag = "ON"
else:
   physics_flag = "OFF"
print "Content-type:text/html\r\n\r\n"
print "<html>"
print "<head>"
print "<title>Checkbox - Third CGI Program</title>"
print "</head>"
print "<body>"
print "<h2> CheckBox Maths is : %s</h2>" % math_flag
print "<h2> CheckBox Physics is : %s</h2>" % physics_flag
print "</body>"
print "</html>"

스크립트 동작 원리

  1. 모듈 임포트: cgi 모듈로 폼 데이터를 다루고, cgitb 모듈로 오류 발생 시 디버그 정보를 브라우저에 표시할 수 있도록 준비합니다.
  2. FieldStorage 생성: cgi.FieldStorage() 인스턴스를 만들어 전송된 폼 데이터를 읽어옵니다.
  3. 값 확인: getvalue('maths')getvalue('physics')를 호출해 각 체크박스가 선택되었는지 확인합니다. 체크박스는 선택된 경우에만 값이 전송되므로, 값이 없으면 None이 반환됩니다.
  4. 결과 출력: 먼저 Content-type:text/html 헤더를 출력한 뒤, 각 체크박스의 ON/OFF 상태를 HTML로 렌더링합니다.

참고: 위 코드는 Python 2 문법(print 문)을 기준으로 작성되었습니다. Python 3 환경에서는 print() 함수 형태로 수정해야 하며, cgi 모듈은 Python 3.13부터 표준 라이브러리에서 제거되었으므로 신규 프로젝트에서는 Flask, Django 같은 웹 프레임워크 사용을 권장합니다.