본문으로 바로가기

파이썬 Flask 폼(Form) 전송

category Application/Flask 2020. 7. 29. 15:45
728x90

 

 

폼 전송

 

Flask

from flask import Flask, render_template, redirect, url_for, request

app = Flask(__name__)

@app.route('/')
@app.route('/index')
def index():
    return render_template('index.html')

@app.route('/form_send')
def form_send():
    return render_template('form_send.html')

@app.route('/form_recv', methods=['POST'])
def form_recv():
    if request.method == 'POST':
        data = request.form
    else:
        data = {}
    return render_template('form_recv.html', data=data)

@app.errorhandler(404)
def page_not_found(error):
    return render_template('page_not_found.html'), 404

if __name__ == '__main__':
    app.run(debug=True)

 

HTML (form)

{% extends 'base.html' %}

{% block title %} Form 전송 테스트 {% endblock %}

{% block content %}

<form action="form_recv" method="post">
    <p>이름 <input type="text" name="name" placeholder="이름 입력"></p>
    <p>색깔 <input type="text" name="color" placeholder="색깔 입력"></p>
    <p><input type="submit" value="submit"></p>
</form>

{% endblock %}

 

HTML (result)

{% extends 'base.html' %}

{% block title %} Form 전송 결과 {% endblock %}

{% block content %}

{% if data['name'] and data['color'] %}
    <p>이름은 {{ data.name }} 이고 색깔은 {{ data.color }}</p>
{% endif %}

{% for k, v in data.items() %}
    key: {{ k }}, value: {{ v }}
    <br>
{% endfor %}

{% endblock %}

 

 

HTML 에서 폼 전송은 다음과 같이 나타내고 method=GET 또는 POST 로 전송할 수 있습니다.

<form action="form_recv" method="post">
    <p>이름 <input type="text" name="name" placeholder="이름 입력"></p>
    <p>색깔 <input type="text" name="color" placeholder="색깔 입력"></p>
    <p><input type="submit" value="submit"></p>
</form>

 

Flask 에서 전달받은 데이터를 HTML 로 전달합니다.

methods=['POST'] 은 POST 만 허용합니다.

@app.route('/form_recv', methods=['POST'])
def form_recv():
    if request.method == 'POST':
        data = request.form
    else:
        data = {}
    return render_template('form_recv.html', data=data)

 

전달받은 데이터는 딕셔너리형으로 접근합니다.

{% if data['name'] and data['color'] %}
    <p>이름은 {{ data.name }} 이고 색깔은 {{ data.color }}</p>
{% endif %}

{% for k, v in data.items() %}
    key: {{ k }}, value: {{ v }}
    <br>
{% endfor %}