보통 html 문서의 form 태그를 통한 데이터의 전송에서의 중요한 속성은 method와 action이다.
| 예시) post 전송 방식으로 localhost/complete_send 에 url 로 전송 (정확히는 python flask 문서 전달) |
- action : 값을 전달할 python flask 'View'의 위치
| - python flask 동작 스크립트의 해당 위치에 값을 전달 |
| - 위와 같은 구조로 데이터가 이동한다 |
get 방식 데이터 전송 방식의 경우 전송되는 데이터들에 대한 값이 모두 url 에 노출되기에 보안에 상당히 취약하고, 전송할 수 있는 데이터의 크기도 post 방식에 비해 크진 않다.
- get 방식 데이터 전송 예시
| - form 양식 |
※ homeform.html 스크립트
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 | <!DOCTYPE html> <html> <body> <!--get 방식의 경우, method 설정이 필요하지 않다.(defualt 속성)--> <form action="/completeSend"> <!-- <table>:테이블을 생성하는 태그 - <tr> : 행 생성 - <td> : 열, 테이블의 칸 태그 내부 속성 id : html 에서 해당 태그의 고유한 값 name : flask 에서 값을 읽어 들일 수 있게 해당 데이터가 들어갈 변수 명 --> <table> <tr> <td>id</td> <td><input type="text" placeholder="id" name="id" id="id" /></td> </tr> <tr> <td>password</td> <td><input type="password" placeholder="password" name="password" id="password" /></td> </tr> <tr> <td>리뷰</td> <td><textarea name="review" id="review"></textarea></td> </tr> </table> <!--type = 'submit' 속성이 있어야 전송이 가능해진다--> <button type="submit">send</button> </form> </body> </html> | cs |
![]() |
| - 입력 받은 값을 출력하는 페이지 |
1 2 3 4 5 6 7 8 | <html> <body> <h2>{{id}} : </h2><br> {{review}} </body> </html> | cs |
flask 스크립트
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 | from flask import Flask, render_template, request app = Flask(__name__) print(app.template_folder) @app.route("/") def homeform() : return render_template("homeform.html") @app.route("/completeSend") def completeSend() : # request.args.get : form, get 방식으로 받은 데이터를 받는 방식 # 매개변수로는 html form 태그에서 작성한 name 값을 쓴다. id = request.args.get("id") review = request.args.get("review") return render_template("completeSend.html",id = id, review = review) if __name__ == "__main__": app.run(host="0.0.0.0", port=5000) | cs |
- get 방식의 경우 html form 태그는 default 설정이 되어있음
- homeform.html → flask python → completeSend.html 의 형태로 데이터가 전송됨
※ render_templete() 로 값을 return 할 때, id = id, review = review 는 completeSend.html 에서 id, review 데이터를 갖는 id, review 변수로 사용하겠다는 것을 의미한다.
→ id, review 변수명은 completeSend.html 에서 '{{ }}' 기호 안에 사용된다.
![]() |
| - get 방식이기에 전송 데이터가 전부 노출된다 |
- post 방식 데이터 전송 예시
post 방식은 아래의 항목을 수정하면 된다.
flask
- completeSend 의 methods=["POST","GET"]
- request.args.get() → request.form.get() 수정
- 내부 로직 수정
homeform.html
- form 태그 method="post" 추가
form 태그에 대한 데이터 값은 request.form.get() 메소드로 가져온다
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 | from flask import Flask, render_template, request app = Flask(__name__) print(app.template_folder) @app.route("/") def homeform() : return render_template("homeform.html") @app.route("/completeSend", methods=["POST","GET"]) def completeSend() : # request.form.get : form, post 방식으로 받은 데이터를 받는 방식 # 매개변수로는 html form 태그에서 작성한 name 값을 쓴다. # 새로고침(F5)에 대하여 조건문을 통하여 get, post 방식에 대한 각각의 동작을 if request.method == "POST" : id = request.form.get("id") review = request.form.get("review") return render_template("completeSend.html",id = id, review = review) return render_template("completeSend.html") if __name__ == "__main__": app.run(host="0.0.0.0", port=5000) | cs |
homeform.html 의 경우, method = "post" 속성을 추가하기만 하면 된다.



댓글
댓글 쓰기