파이썬(Python)/Flask

[Python] Flask와 Jinja2 사용하여 데이터 주고 받기

끄적끄적아무거나 2021. 11. 19. 08:55
반응형

 

목차

     

     

     

    [Python] Flask와 Jinja2 사용하여 데이터 주고 받기 

     

    앞서 Post 글을 통해서 웹페이지(HTML)에서 백엔드(Back end) 서버로 값을 보낼 때 GET, POST 와 같은 request를 이용해서 값을 전달하였습니다. jinja2는 백엔드 여기서는 flask를 이용해서 돌리는 서버에서 웹페이지(Web page)로 값을 보낼 때 사용하는 툴입니다. 

     

    jinja2는 파이썬에서 지원하는 동적 templating으로 사용이 간단합니다.

     

     

     

    jinja2 Syntax

     

    {{ flask에서 보낸 값 }}
    {% 문법(if,for) 사용 %}
    {# comment #}

     

    단순히 flask에서 보낸 값을 받을 경우 첫번째 방식으로 HTML 문서에 선언하면 됩니다. 문법이 포함될 경우 2번째 줄과 같이 사용하시면 됩니다. 

     

     

     

    [Python] Flask와 Jinja2 사용하여 데이터 주고 받기 : 예제

     

    이번 예제는 아이디와 비밀번호를 입력하는 form을 만들고 두 값을 모두 입력하면 form으로 flask에 전달하고 flask는 해당 값을 다시 html로 보내서 html에서 출력하는 예제입니다 

     

    코드-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>
    <div>
      {% if id and pw %}
      <p>{{ id }}</p>
      <p>{{ pw }}</p>
      {% elif id or pw %}
      <p>id, pw 둘 다 입력해야합니다</p>
      {% else %}
      <p>입력을 하지 않았습니다</p>
      {% endif %}
    </div>
    
    </body>
    </html>

     

    login.html 파일은 templates 안에 넣어야 정상 동작 합니다.

    34번~41번 라인 : jinja2 문법

    34번 라인 : pw와 id 값이 flask에서 넘어왔을 경우 아래 구문을 실행합니다

    35번 라인 : {{}} 를 사용하여 변수를 보여줍니다.

    41번 라인 : if 문이 종료 하면 endif 로 마무리 짓습니다. 

     

    코드 - flask python 파일>>

    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']
            pw = request.form['pw']
            return render_template("login.html",id=id,pw=pw)
        else:
            return render_template("login.html")
         
    if __name__ == '__main__':
       app.run(debug = True, port=9999)

     

    7번 라인 : POST로 form이 올 경우 실행 합니다.

    10번 라인: render_template를 사용하면 페이지와 보낼 값을 입력 합니다.

     

    결과>>

     

     

    반응형