CGI Network [KOR]
network_cgi.py : CGI 네트워크를 오픈한다
CGI : 웹 서버와 클라이언트 사이에서 정보를 주고 받는 방법이나 규약, 대화형 웹 페이지를 운영한다
from http.server import CGIHTTPRequestHandler, HTTPServer
port = 8888
class Handler(CGIHTTPRequestHandler):
cgi_directories = ['/cgi-bin'] # 경로 설정, 폴더이름은 무조건 cgi-bin 으로 해야한다.
serv = HTTPServer(('127.0.0.1', port), Handler)
print('웹 서비스 시작...')
serv.serve_forever()
main.html : 메인화면을 담당한다
<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title>메인 페이지</title>
</head>
<body>
<h1>여기가 메인 홈페이지</h1>
<ol>
<li><a href="cgi-bin/hello.py">hello 파이썬 문서 요청</a></li> <!-- 파이썬 부르기 -->
<li><a href="cgi-bin/world.py">world 파이썬 문서 요청</a></li>
<li><a href="cgi-bin/my.py?name=tom&age=23">my(get 방식으로 자료 전달)</a></li>
<li><a href="friend.html">친구자료 입력</a></li>
<li><a href="cgi-bin/sangpum.py">상품 자료</a></li> <!-- db 연동해서 부를거임 -->
</ol>
</body>
</html>
hello.py : 여기서는 파이썬으로 처리한 내용을 클라이언트에게 전송한다
munja = '파이썬 변수에 값 기억'
kor = 50
eng = 40
hap = kor + eng
print('Content-Type:text/html;charset=utf-8\n') # 웹용 파이썬
print('<html><body>')
print('<b>안녕하세요</b>강영진의 파이썬 문서입니다<br>')
print('내 이름은 강영진 입니다<br>')
print('minja : %s hap : %d'%(munja, hap)) # 파이썬 변수도 웹으로 출력 가능
print('</body></html>')
world.py : 여기서도 파이썬으로 처리한 내용을 클라이언트에게 전송한다
s1 = '자료1'
s2 = '강영진'
print('Content-Type:text/html;charset=utf-8\n') # 웹용 파이썬
print("""
<html>
<body>
<h1> 난 월드 </h1>
파이썬 값 출력 : {0}, {1} <br>
<a href='../main.html'>메인으로</a>
</body>
</html>
""".format(s1, s2))
my.py : client가 넘겨준 정보를 수신한다 (name = tom, age = 23)
import cgi
form = cgi.FieldStorage() # name=tom&age=23 이부분을 가져온다
irum = form['name'].value
nai = form['age'].value + '살'
print('Content-Type:text/html;charset=utf-8\n') # 웹용 파이썬
print("""
<html>
<body>
넘겨준 자료 보기<br>
이름은 : {0}, 나이는 : {1}
</body>
</html>
""".format(irum, nai))
friend.html : friend.py 에게 넘겨줄 입력값을 받는 폼 html
<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title>Insert title here</title>
</head>
<body>
** 친구 자료 ** <br>
<!-- 입력 폼 이용 -->
<form action="cgi-bin/friend.py" method="get"> <!-- get 대신 post를 쓰면 보안이 유지가 된다 (위에 value가 안뜬다) -->
이름 : <input type="text" name="name"><br>
전화 : <input type="text" name="phone"><br>
성별 :
<input type="radio" name="gen" value="남" checked="checked">남자
<input type="radio" name="gen" value="여">여자
<br><br>
<input type="submit" value="전송"> <!-- button 이 아니라 submit 이라 해야 작동을 한다, 누르면 action 발동 -->
</form>
</body>
</html>
friend.py : friend.html 에게 넘겨받은 값으로 클라이언트에게 반환한다
import cgi
form = cgi.FieldStorage() # name=tom&age=23 이부분을 가져온다
name = form['name'].value # friend.html 에서 값 받아오기
phone = form['phone'].value
gender = form['gen'].value
print('Content-Type:text/html;charset=utf-8\n') # 웹용 파이썬
print("""
<html>
<body>
넘겨준 자료 보기<br>
이름은 : {0}, 전화는 : {1}, 성별은 : {2}
</body>
</html>
""".format(name, phone, gender))
sangpum.py : MariaDB와 연동하여 상품 테이블을 클라이언트에게 반환한다
import MySQLdb
import ast # sting 파일을 dict로 읽는다
import os
# 주소 파일 읽어오기
with open(os.getcwd() + '\\mariadb.txt', 'r') as f: # os.getcwd() 를 통해 파일위치를 찾는다
config = ast.literal_eval(f.read())
print('Content-Type:text/html;charset=utf-8\n') # 웹용 파이썬
print("""
<html>
<body>
<b>상품 정보</b>
<table border = "1">
<tr><th>코드</th><th>상품명</th><th>수량</th><th>단가</th></tr>
""")
try:
conn = MySQLdb.connect(**config)
cursor = conn.cursor()
cursor.execute("select * from sangdata")
datas = cursor.fetchall()
for code, sang,su,dan in datas: # html 문에 넣어준다
print("""
<tr>
<td>{0}</td>
<td>{1}</td>
<td>{2}</td>
<td>{3}</td>
</tr>
""".format(str(code), sang, su, dan))
except Exception as e:
print('오류 : ', e)
finally:
cursor.close()
conn.close()
print("""
</table>
</body>
</html>
""") # 테이블 형식으로 출력, border="1" 은 테두리를 생성한다.
Categories :
Practice