LoginSignup
0
0

FlaskでPUTしてみた

Last updated at Posted at 2024-03-26

背景

いままで、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を使用しました。

image.png

これからプログラムで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のみ実現可能となっております。
以上。。。。。

0
0
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
0
0