파이썬(Python)/Flask

[Python] flask form 값 받기 (GET, POST)

끄적끄적아무거나 2021. 11. 17. 18:01
반응형

 

목차

     

     

     

     

     

     

     

    HTTP(Hypertext Transfer Protocol) 프로토콜 이란? 

     

    HTTP는 인터넷 계층(OSI 7계층)에서 Application에 해당합니다. Request 방법에는 아래와 같이 9개의 방법이 있습니다. HTTP 패킷 안에 Request 정보가 같이 전달 됩니다. 

     

    Request 종류

     

    • GET
    • HEAD
    • POST
    • PUT
    • DELETE
    • CONNECT
    • OPTIONS
    • TRACE
    • PATCH

     

    실제 웹 서버를 설계하면 사용하는 request 는 GET, POST 크게 2개 정도만 사용합니다. 나머지 request에 대한 정보는 검색을 통해 확인하시면 됩니다.

     

     

     

     

    HTTP(Hypertext Transfer Protocol) GET

     

    GET는 말 그대로 데이터를 받기만 하고 다른 영향은 없습니다. 일반적으로 사용자가 특정 url을 입력하면 해당 페이지의 데이터를 GET하겠다고 request를 보내고 url의 서버는 GET request 에 응답하여 데이터를 보냅니다. 

     

     

     

    HTTP(Hypertext Transfer Protocol) POST

     

    POST는 HTML form(폼) 데이터를 보낼 때 사용합니다. POST 방식으로 데이터를 받게 되면 서버에 cache 되지 않습니다. 

     

     

     

     

    Flask로 GET과 POST 구현 하기

     

    페이지의 form을 주고 받기 위해 HTML 문서를 작성해야 합니다. 그리고 그에 응답하는 서버 제작을 위해 flask를 사용합니다. 

     

    작성한 html 문서는 templates 라는 폴더를 만들어서 해당 폴더에 넣어야만 flask와 연동해서 동작합니다. 

     

    login.html 코드>>

    <!DOCTYPE html>
    <html lang="en">
    <head>
      <title>scribblinganything.tistory.com</title>
      <meta charset="utf-8">
      <meta name="viewport" content="width=device-width, initial-scale=1">
      <link href="https://cdn.jsdelivr.net/npm/bootstrap@5.1.2/dist/css/bootstrap.min.css" rel="stylesheet">
      <script src="https://cdn.jsdelivr.net/npm/bootstrap@5.1.2/dist/js/bootstrap.bundle.min.js"></script>
    </head>
    <body>
    
    <div class="container">
      <form action = "http://localhost:9999/login" method = "post">
        <div class="row">
            <div class="col-sm-9">
            </div>
            <div class="form-floating col-sm-3">
            <input type="text" class="form-control " id="id" placeholder="id" name="id">
            <label for="아이디">아이디</label>
            </div>
        </div>
        <div class="row">
            <div class="col-sm-9">
            </div>    
            <div class="form-floating col-sm-3">
            <input type="text" class="form-control col-sm-3" id="pwd" placeholder="pw" name="pw">
            <label for="pw">비밀번호</label>
            </div>
        </div>
        <button type="submit" class="btn btn-primary" style="float:right;" id="login">로그인</button>
    
      </form>
    </div>
    
    </body>
    </html>

     

    이번 장에서는 html 작성법에 대해서는 추가 설명을 하지 않습니다. 작성 방법을 알고 싶은 분은 Bootstrap 관련 내용들을 살펴 보시면 됩니다.

     

    파이썬 flask 코드>>

    from flask import Flask, request, render_template
    
    app = Flask(__name__)
    
    @app.route('/login',methods = ['POST', 'GET'])
    def login():
        if request.method == 'POST':
            id = request.form['id']
            return "Your ID is %s" %id
        else:
            return render_template("login.html")
         
    if __name__ == '__main__':
       app.run(debug = True, port=9999)

     

     

    결과>>

     

    주석>>

     

    5번 라인 : method를 POST, GET으로 선정하여 /login url 접속시 해당 method일 때만 실행하게 만들었습니다. method를 별도 설정하지 않으면 GET으로 default 됩니다.

     

    7번 라인 : POST는 HTML 문서에서 로그인을 클릭 시 POST request와 함께 정보들이 서버로 갑니다.

     

    10번 라인 : GET인 경우 해당 페이지를 불러 옵니다.

     

     

     

    반응형