実現したいこと
実現方法
jsonデータを受け取る場合
from flask import Flask, request, jsonify
import json
import logging
app = Flask(__name__)
app.logger.setLevel(logging.INFO)
@app.route('/sample_json', methods=['POST'])
def sample_json():
data = request.get_json()
app.logger.info(data)
return jsonify(data), 201
$ curl -X POST -H "Content-Type:application/json" -d "{\"param1\": \"value1\", \"param2\": \"value2\"}" http://localhost:5000/sample_json
{"param1":"value1","param2":"value2"}
web_flask-1 | [2025-02-05 22:22:53,555] INFO in app: {'param1': 'value1', 'param2': 'value2'}
web_flask-1 | 172.19.0.1 - - [05/Feb/2025 22:22:53] "POST /sample_json HTTP/1.1" 201 -
wget --method=POST --header="Content-Type: application/json" --body-data="{\"param1\":\"value1\",\"param2\":\"value2\"}" http://localhost:5000/samp
le_json
--2025-02-05 22:29:45-- http://localhost:5000/sample_json
Resolving localhost (localhost)... 127.0.0.1
Connecting to localhost (localhost)|127.0.0.1|:5000... connected.
HTTP request sent, awaiting response... 201 CREATED
Length: 38 [application/json]
Saving to: ‘sample_json’
sample_json 100%[=======================================================================================================>] 38 --.-KB/s in 0s
2025-02-05 22:29:45 (9.34 MB/s) - ‘sample_json’ saved [38/38]
$ cat sample_json
{"param1":"value1","param2":"value2"}
web_flask-1 | [2025-02-05 22:29:45,449] INFO in app: {'param1': 'value1', 'param2': 'value2'}
web_flask-1 | 172.19.0.1 - - [05/Feb/2025 22:29:45] "POST /sample_json HTTP/1.1" 201 -
formデータを受け取る場合
from flask import Flask, request, jsonify
import json
import logging
app = Flask(__name__)
app.logger.setLevel(logging.INFO)
@app.route('/sample_form', methods=['POST'])
def sample_form():
data = request.form.to_dict()
app.logger.info(data)
return json.dumps(data), 201
$ curl -X POST -d "param1=value1" -d "param2=value2" http://localhost:5000/sample_form
{"param1": "value1", "param2": "value2"}
web_flask-1 | [2025-02-05 22:23:58,211] INFO in app: {'param1': 'value1', 'param2': 'value2'}
web_flask-1 | 172.19.0.1 - - [05/Feb/2025 22:23:58] "POST /sample_form HTTP/1.1" 201 -
$ wget --post-data="param1=value1¶m2=value" http://localhost:5000/sample_form
--2025-02-05 22:32:33-- http://localhost:5000/sample_form
Resolving localhost (localhost)... 127.0.0.1
Connecting to localhost (localhost)|127.0.0.1|:5000... connected.
HTTP request sent, awaiting response... 201 CREATED
Length: 39 [text/html]
Saving to: ‘sample_form’
sample_form 100%[=======================================================================================================>] 39 --.-KB/s in 0s
2025-02-05 22:32:33 (6.89 MB/s) - ‘sample_form’ saved [39/39]
$ cat sample_form
{"param1": "value1", "param2": "value"}
web_flask-1 | [2025-02-05 22:32:33,390] INFO in app: {'param1': 'value1', 'param2': 'value'}
web_flask-1 | 172.19.0.1 - - [05/Feb/2025 22:32:33] "POST /sample_form HTTP/1.1" 201 -
参考
- Flaskサーバはdocker compose利用して立ち上げた
- Dockerfile
FROM python:3.11-alpine3.21
ARG project_directory
WORKDIR $project_directory
RUN pip install flask
services:
web_flask:
build:
context: .
args:
project_directory: "/projects/"
ports:
- "5000:5000"
volumes:
- "./projects:/projects"
environment:
TZ: "Asia/Tokyo"
FLASK_ENV: "development"
command: "flask run --host 0.0.0.0 --port 5000"
$ docker compose up -d
[+] Running 2/2
✔ Network rest_relay_default Created 0.0s
✔ Container rest_relay-web_flask-1 Started 0.3s
$
$ docker compose logs
web_flask-1 | * Debug mode: off
web_flask-1 | WARNING: This is a development server. Do not use it in a production deployment. Use a production WSGI server instead.
web_flask-1 | * Running on all addresses (0.0.0.0)
web_flask-1 | * Running on http://127.0.0.1:5000
web_flask-1 | * Running on http://172.19.0.2:5000
web_flask-1 | Press CTRL+C to quit
$