2019.04.30 HTML을 통한 간단한 서버 구축하기1(get)
# 질문에 답하기
HTTP Server
[출처 : jQuery Ajax & JSON | PoiemaWeb](https://poiemaweb.com/jquery-ajax-json) |
- 브라우저를 통해 사용자가 HTTP Rrequest message를 보내면
- 서버는 그 Message를 해석하고 Response Message로 응답한다.
- 어느 페이지로 접속하였느냐?
- Query string은 어떤 데이터를 가지고 있느냐?
- 특정 스크립트 요청이 있느냐?
- 최종 응답을 HTML, 다운로드는 파일로 할 것이냐?
HTTP Response만 하는 서버
Handler 필요 : 요청이 들어오면 어느 객체가 요청을 해석하고 처리할 것이냐?
주소에 붙여서 보내면 이것을 읽어서 해석하는데 이를 쿼리스트링이라고 하고 파싱을 통해 주소내 특정 값들을 분리한다.
def run와 with handler는 같은 것이다.
- 네이버 메인 페이지는 get방식 회원가입 할 때는 POST방식이다.
근데 장고 같은 프레임워크는 한 페이지에서 접속 Method에 따라 기능을 분기한다. 예) 회원가입 페이지 domain.com/singup/ - Get방식으로 접속하면 회원가입 양식 보여주기
- Post방식으로 하면 전달받은 데이터를 처리해서 회원가입 진행하기, 데이터베이스에 저장하기
- 한 주소로 고정되어 있어서 회원 가입에 오류가 있으면 회원가입으로 돌아가서 다시 메시지를 띄어야 한다. 우리가 쳤던 정보 내용들이 남아 있어야 한다. 한 페이지에서 돌아가기 때문에 비밀번호와 같은 것을 잘못 입력해도 그대로 남아 있다.
do_GET 예시 코드
- Handler 클래스를 만들고 그 아래에 GET과 POST를 두어서 2가지에 대해서 어떻게 처리할지에 대한 내용이 들어간다.
do_GET을 통해 주소창에 들어간 내용 해석하기
- 주소창에 들어간 http://127.0.0.1:8000/?height=181&weight=77와 같은 내용 해석하기
from urllib.parse import parse_qs, urlparse
PORT = 8000
class Handler(BaseHTTPRequestHandler):
def do_GET(self):
self.send_response(200)
self.send_header('Content-type', 'text/html')
self.end_headers()
query_text = urlparse(self.paht).query
print(query_text)
query_vars = parse_qs(query_text)
print(query_vars)
if 'weight' in query_vars and 'height' in query_vars:
height1 = float(query_vars['height'][0])
weight1 = float(query_vars['weight'][0])
BMI = weight1/((height1/100)**2)
message = "Your BMI is " + str(BMI)
self.wfile.write(bytes(message, 'utf-8'))
return
def do_POST(self):
pass
def run():
server_address = ('127.0.0.1', PORT)
httpd = HTTPServer(server_address, Handler)
print("serving at PORT", PORT)
httpd.serve_forever()
run()
결과값
- 주소에 http://127.0.0.1:8000/?height=181&weight=77 임의로 넣고 실행
- print창에
- height=181&weight=77
- {‘height’: [‘181’], ‘weight’: [‘77’]}
- http 창에
- your BMI is 23.503556057507403 출력