2019.04.30 HTML을 통한 간단한 서버 구축하기2(POST)

# 질문에 답하기

  1. CGI

    Common Gateway interface
    CGI 단점 : 요청이 있을 때마다 프로세스(응용프로그램)을 새로 실행
    CGI 장점: 특별한 추가 프로그램 없이도 여러 언어의 스크립트 실행 가능

  • 특정 위치에 있는 것을 가지고 와야 할 때 쓰면 된다.

권한주기 (해당 파일마다 적용해줘야한다.)

  • chomod ugo+x cgi/test.py
  • #!를 써서 파이썬 경로를 써줘야한다.
  • which python3

구현

스크린샷 2019-04-30 오후 4 52 37
  • 해당 경로를 지정해줘야한다.
  • 해당 경로 파일에는 #!/usr/local/bin/python3이라는 python 경로를 지정해줘야한다.

test.py

스크린샷 2019-04-30 오후 4 54 46
  • 이렇게 한 뒤에 서버에 접속해보면 test.py의 자료를 가지고 온다.

POST

  • GET의 폼을 톨해 받은 자료를 POST로 받아와 해석하기
  • 폼을 통해 키와 몸무게를 받아 BMI 지수 출력해주기

구현

스크린샷 2019-04-30 오후 4 57 03
  • form_html에서 받은 자료를 method='POST'로 하여 POST로 보내고 포스트에서 해당 내용을 받아서 처리해준다.
  • 포스트에 담겨서 오는 내용은 주소창에 있는 자료를 해석하는게 아니므로 보안이 철저하지만 그만큼 해석하는게 쉽지 않다.
  • self.rfile.read 및 parse_qs를 사용한다.

'HTML' 카테고리의 다른 글

css) 버튼이 중앙으로 가지 않을 때  (0) 2020.09.28
HTML 05. Server만들기(get)  (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

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