背景
いままで、app.postやapp.getを実装していましたが、
app.putもできるよねとChatGPTに聞いてみたが、サポートしていませんと一点張り
しかし、できるんですよね。これが、
へへへ、ChatGPTに勝っている気になってきた。
from flask import Flask
app = Flask(__name__)
@app.get('/')
def index():
return 'Index Page'
@app.put('/test/<id>')
def put_test(id):
print(id)
return 'OK',200
if __name__ == "__main__":
app.run(debug=True, host='0.0.0.0')
プログラミングは超簡単なやつ
これでできました!
127.0.0.1 - - [27/Mar/2024 00:50:27] "GET / HTTP/1.1" 200 -
1000
127.0.0.1 - - [27/Mar/2024 00:50:31] "PUT /test/1000 HTTP/1.1" 200 -
1000
127.0.0.1 - - [27/Mar/2024 00:50:41] "PUT /test/1000 HTTP/1.1" 200 -
但し、ブラウザだと簡単に実行できないので、POSTMANを使用しました。
これからプログラムでPUTになりそうなものは、PUTで行こうと思います。
実際のプロジェクトで使てみた。
まずは、受ける側
@app.put("/finish_tv")
@flask_login.login_required
def finish_tv():
# 受け取り側でjsonで受け取る
Movie_info.update_movie_flag(request.json["id"])
return "", 200
putする側
// tv終了用
function finish_tv(id, name) {
var xhr = new XMLHttpRequest();
xhr.open('PUT', '/finish_tv');
xhr.setRequestHeader('Content-Type', 'application/json;charset=UTF-8');
xhr.onload = function() {
if (xhr.status === 200) {
window.location.href = '/thanks/2/' + name;
}
};
xhr.send(JSON.stringify({
"id": id,
"name": name
}));
}
DB側の変更は必要なし
127.0.0.1 - - [27/Mar/2024 00:59:50] "PUT /finish_tv HTTP/1.1" 200 -
よーーし。
GET/POST/PUTを分けることによる役割が分かりやすい。
HTML側で対応していない問題
<!DOCTYPE html>
<html lang="jp">
<head>
<meta charset="UTF-8">
<title>test_flask</title>
</head>
<body >
<h1>12345</h1>
<form method="post" action="/test2">
<input type="hidden" name="_method" value="PUT">
<button type="submit" value="100">submit</button>
</form>
</body>
</html>
from flask import Flask, render_template, request
app = Flask(__name__)
@app.get('/')
def index():
return render_template('index.html')
@app.put('/test/<id>')
def put_test(id):
print(id)
return 'OK',200
@app.route('/test2', methods=['POST'])
def put_002():
res = request.form.get("_method")
if res == 'PUT':
print('PUT TEST OK')
return 'OK',200
if __name__ == "__main__":
app.run(debug=True, host='0.0.0.0')
結局はこうなる。
PUTはJavaScriptのみ実現可能となっております。
以上。。。。。