Python Flask Header & Payload Reflection
mkdir flask
cd flask
python3 -m venv venv
venv\Scripts\activate
pip install Flask
啟動 flask
flask --app main run
flask --app main --debug run
/main.py /templates/base.html /templates/index.html /templates/form.html /templates/404.html
Routing
@app.route("/", methods = ['GET', 'POST'])
def htmlRequest():
if request.method == 'GET':
...
if request.method =='POST':
...
Error Handle
@app.errorhandler(404)
def page_not_found(error):
return make_response(render_template('404.html', error=error), 404)
Json Response
from flask import jsonify
@app.route("/json", methods = ['GET', 'POST'])
def jsonRequest():
viewModel = {
"headers": { k:v for k, v in request.headers.items()},
}
return jsonify(viewModel)
Url Generate
<a class="btn btn-primary" href="{{ url_for('postFormRequest') }}">Post Form</a>
<form method="post" action="{{ url_for('htmlRequest', foo=10, bar=30) }}">
...
</form>
HTTP Data Handle
注意 request 的資料物件不是 Dict 在 jsonift 會發生例外錯誤,必須主動透過 dict generator 轉換為 dict 以正確處理。
viewModel = {
"headers": { k:v for k, v in request.headers.items()},
"querystring": { k:v for k, v in request.args.items()},
"payload": { k:v for k, v in request.form.items()},
"json": { k:v for k, v in request.json.items()}
}