2019.04.30 HTML을 통한 간단한 서버 구축하기1(get)
# 질문에 답하기
HTTP Server
출처 : jQuery Ajax & JSON | PoiemaWeb
- 브라우저를 통해 사용자가 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 출력
'HTML' 카테고리의 다른 글
css) 버튼이 중앙으로 가지 않을 때 (0) | 2020.09.28 |
---|---|
HTML 06. Server만들기(POST 및 CGI) (0) | 2020.01.16 |
HTML 04. clone page+Bootstrap (0) | 2020.01.16 |
HTML 03. form, input, label (0) | 2020.01.16 |
HTML 02. table 만들기 (0) | 2020.01.16 |