2019.04.30 HTML을 통한 간단한 서버 구축하기1(get)

# 질문에 답하기

  1. HTTP Server

스크린샷 2019-04-30 오후 4 29 55

출처 : jQuery Ajax & JSON | PoiemaWeb

  1. 브라우저를 통해 사용자가 HTTP Rrequest message를 보내면
  2. 서버는 그 Message를 해석하고 Response Message로 응답한다.
    1. 어느 페이지로 접속하였느냐?
    2. Query string은 어떤 데이터를 가지고 있느냐?
    3. 특정 스크립트 요청이 있느냐?
    4. 최종 응답을 HTML, 다운로드는 파일로 할 것이냐?

HTTP Response만 하는 서버

  • Handler 필요 : 요청이 들어오면 어느 객체가 요청을 해석하고 처리할 것이냐?

  • 주소에 붙여서 보내면 이것을 읽어서 해석하는데 이를 쿼리스트링이라고 하고 파싱을 통해 주소내 특정 값들을 분리한다.

  • def run와 with handler는 같은 것이다.

  • 네이버 메인 페이지는 get방식 회원가입 할 때는 POST방식이다.
    근데 장고 같은 프레임워크는 한 페이지에서 접속 Method에 따라 기능을 분기한다.
    예) 회원가입 페이지 domain.com/singup/

  • Get방식으로 접속하면 회원가입 양식 보여주기

  • Post방식으로 하면 전달받은 데이터를 처리해서 회원가입 진행하기, 데이터베이스에 저장하기

  • 한 주소로 고정되어 있어서 회원 가입에 오류가 있으면 회원가입으로 돌아가서 다시 메시지를 띄어야 한다. 우리가 쳤던 정보 내용들이 남아 있어야 한다. 한 페이지에서 돌아가기 때문에 비밀번호와 같은 것을 잘못 입력해도 그대로 남아 있다.

do_GET 예시 코드

스크린샷 2019-04-30 오후 4 35 17
  • Handler 클래스를 만들고 그 아래에 GET과 POST를 두어서 2가지에 대해서 어떻게 처리할지에 대한 내용이 들어간다.

do_GET을 통해 주소창에 들어간 내용 해석하기

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()

결과값

'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

+ Recent posts