본문 바로가기
개발자 일지/Phython

[파이썬 기초]홈페이지 CGI 구현하기

by 네빌링 2021. 3. 10.
반응형

-웹사이트를 CGI를 연동하여 구현한다.

-생활코딩의 파이썬 강의를 기반으로 학습하였다.

-파이썬은 3.9.2 ver를 사용한다.


 

 단순한 웹사이트를 CGI를 이용하여 프로그래밍적으로 다룰 수 있는 웹애플리케이션을 구현해본다. htdocs디렉토리에 index.py 파일을 만들었다. 이 상태에서 그냥 127.0.0.1/index.py로 접근하면 파이썬 포맷팅 에러가 발생하니 최상단에 #!Python이라는 시작 주석을 넣어준다.(윈도우 기준이며 리눅스는 다름)

 이후 다시 127.0.0.1/index.py로 접근하면 여전히 Internal Error가 발생하지만, 에러 로그의 내용이 바뀌어 있다.

에러 내용은 End of script output before headers라고 나온다. 참고로 에러 로그는 C:\Bitnami\wampstack-8.0.2-1\apache2\logs에서 error.log에서 볼 수 있다.

 

[Wed Mar 10 21:11:52.072438 2021] [cgi:error] [pid 8228:tid 1248] [client 127.0.0.1:64740] 
End of script output before headers: index.py

 스크립트 앞에 Headers를 명시해줘야 한다. 이것을 통해 웹서버는 응답(response)하는 웹페이지가 어떤 데이터인지 알려준다. 

 

 다음과 같은 헤더 코드를 넣어준다.

 

#!Python
print("Content-Type: text/html")
print()  

 

 이후 URL로 접근하면 에러 없이 빈 화면을 확인할 수 있다. 이제 index.html이나 503.html의 내용을 복사해서 print문으로 출력해보자. 에러가 발생할 것이다. 줄바꿈이 안 되어 그런 것인데, docstring방식을 사용하면 귀찮은 줄바꿈 처리 없이 바로 html을 인식하도록 처리할 수 있다.

 

#!Python
print("Content-Type: text/html")    # HTML is following
print()

print('''<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01//EN" "http://www.w3.org/TR/html4/strict.dtd">
<html>
<head>
<title>Your application is not available</title>
<link href="/bitnami.css" media="all" rel="Stylesheet" type="text/css" />
<meta http-equiv="content-type" content="text/html; charset=UTF-8">
<meta http-equiv="content-type" content="application/xhtml+xml; charset=UTF-8">
<meta http-equiv="content-style-type" content="text/css">
<meta http-equiv="expires" content="0">
<meta http-equiv="refresh" content="15" />
</head>
<body>
<div class="container">
<div id="header">
<table class="tableHeader">
<tr>
<td><img src="/img/bitnami.png" alt="Bitnami"></td>
</tr>
</table>
</div>
<div id="lowerContainer">

<table class="tableParagraph">
<tr>
  <td class="container">
     <h1>Your application is not available</h1>
    <p>Your application may not be available for many reasons:
      <ul>
       <li>If you just launched the server, please wait a few minutes for the application to deploy. It is common behavior for Java applications.</li>
       <li>Your application may not be working properly. Please check the application log file.</li>
      </ul>
      This page will automatically refresh every 15 seconds until the application is available.
    </p>
   </td>
</tr>
</table>
</div>
</body>
</html>
''')

 

 보는 것처럼 print(''' HTML코드 ''')방식으로 코드를 삽입하였다.

이후 URL을 실행하면 다음과 같이 정상적으로 나옴을 확인할 수 있다.

 

CGI를 연동하여 웹페이지를 띄웠다

 

 

반응형