do_GET+ do_POST 예제1
localhost:8000으로 접속하면 다음과 같은 화면이 나오고
hello world를 쓴뒤 Post it 버튼을 누르면 다음과 같이 나타나게 하려면 어떻게 해야할까?
1. html string을 가지는 form 변수를 만든다.
form = '''<!DOCTYPE html>
<title>Message Board</title>
<form method="POST" action="http://localhost:8000/">
<textarea name="message"></textarea>
<br>
<button type="submit">Post it!</button>
</form>
'''
2. do_GET- form을 response로 준다.
def do_GET(self):
self.send_response(200)
self.send_header('Content-type', 'text/html; charset=utf-8')
self.end_headers()
self.wfile.write(form.encode())
3. do_POST 부분
3.1. request의 entity body에 있는 message field를 가져온다.
length = int(self.headers.get('Content-length', 0))
data = self.rfile.read(length).decode()
message = parse_qs(data)["message"][0]
3.2 헤더를 설정한다. text/plain은 텍스트 파일 기본값이다.
self.send_response(200)
self.send_header('Content-type', 'text/plain; charset=utf-8')
self.end_headers()
3.3 message를 인코딩해서 보낸다.
self.wfile.write(message.encode())
main부분은 HelloServer예제와 같다.
do_GET과 do_POST가 같은 핸들러안에 정의되는 것이 특징이다.
MIME 타입(https://developer.mozilla.org/ko/docs/Web/HTTP/Basics_of_HTTP/MIME_types)