概要
FlaskにおけるPOST通信の内容が曖昧だったので、GET/POST通信どちらもここにまとめる。
内容としては、「フォームによる通信」/「Json形式による通信」が存在する。「Flask POST」的に検索すると情報がごちゃごちゃで出てくる。ちなみにPython 3.7です。
GET通信
from flask import Flask, request, jsonfy
app = Flask(__name__)
@app.route("/", methods=["GET"])
def test():
data = request.args.get('hoge', '') # ?hoge=valueの値を取得
return data # サンプルのためそのまま返す
POST通信
Json形式による通信
from flask import Flask, request, jsonfy
import json
app = Flask(__name__)
@app.route("/", methods=["POST"])
def test():
if not request.is_json:
return jsonify({"error": "Missing JSON in request"}), 400
data = request.json # request.dataをutf-8にデコードしてjsonライブラリにてディクショナリ型とする
return jsonfy(data) # サンプルのためそのまま返す
フォームによる通信
from flask import Flask, request, jsonfy
app = Flask(__name__)
@app.route("/", methods=["POST"])
def test():
data = request.form["hoge"] # フォームに存在する「"hoge"」キーの値を取得
return jsonfy(data) # サンプルのためそのまま返す
CORS(Cross-Origin Resource Sharing)対応について
今回の内容では特に関係ないですが、次いでにCORS対応について説明します。
私はWeb系エンジニアではなので、詳しいことは分からないんですが、簡単に言うと別のサーバリソースを使用する際ためのルールとかって話らしいです(もう少し突っ込んで説明すると、URLのベースが同じか同じかどうかって感じですかね)。
ひとまずpipにて「flask-cors」をインストールする。
pip install flask-cors
あとは以下のような感じで。
from flask import Flask
from flask_cors import CORS # これと
app = Flask(__name__)
CORS(
app,
supports_credentials=True
) #これ
参考
- Flask クイックスタート:https://a2c.bitbucket.io/flask/quickstart.html
- 1AngularからFlask APIを呼んで、No 'Access-Control-Allow-Origin...で怒られた時の対処法:https://qiita.com/mitch0807/items/cd18e8fc15bb12416f3d
- JSONでPOSTしたものをpythonで使う方法:https://qiita.com/naoko_s/items/04d68998cfdbe9c1b5f2
- Flask-CORS:https://flask-cors.readthedocs.io/en/latest/
- CORS (Cross-Origin Resource Sharing) ってなに?:https://aloerina01.github.io/blog/2016-10-13-1