LoginSignup
0
3

More than 3 years have passed since last update.

Flaskチュートリアル#2 ~POST, PUT, DELETEリクエスト編~

Last updated at Posted at 2020-02-16

今回やること

前回はGETリクエストに対する処理を主に実装していきました(チュートリアル#1)。今回はFlaskでPOSTリクエスト、PUTリクエスト、DELETEリクエストに対する処理をそれぞれ書いていきます。なお、DB連携は次の記事で紹介するので今回はグローバル変数に定義した配列に対して変更を加えていきたいと思います。

詳しくはこちらで紹介しています

POSTリクエスト

まずはPOSTリクエストに対する処理を書いていきます。POSTは主にデータの追加に使われます。
今回はリクエスト側はテストを簡単にするためにcurlコマンドを使っていきます。

$ curl -X POST -H "Content-Type: application/json" -d '{"title":"新規投稿", "body":"新規投稿です"}' localhost:5000/post/add

-Xはリクエストのメソッド、-Hはリクエストヘッダ、-dはリクエストボディをそれぞれ指定しています。これはjson形式でlocalhost:5000/post/addにPOSTリクエストを送るという意味の文になります。

flask側はこんな感じになります

app.py
@app.route('/post/add', methods=['POST'])
def create_post():
    post = request.json
    db_data.append(post)
    return jsonify(db_data)

json形式でリクエストされたボディはrequest.jsonで受け取ることができます。受け取った記事を配列にappendして記事追加処理の完成です。今回はテストとして全てのレスポンス処理で変更された記事一覧(db_data)を返却しています。

PUTリクエスト

次にPUTリクエストに対する処理を書いていきます。これは主にデータの修正に使われます。

terminal
$ curl -X PUT -H "Content-Type: application/json" -d '{"title":"投稿修正", "body":"修正済み投稿です"}' localhost:5000/post/update/0

localhost:5000/post/update/0にPUTリクエストを送るという意味の文になります。ここでは/updateのあとに記事のidとして配列のインデックスを指定しています。

flask側のコードはこんな感じです

app.py
@app.route('/post/update/<id>', methods=['PUT'])
def update_post(id):
    post = request.json
    db_data[int(id)] = post
    return jsonify(db_data)

flaskではrouteに/<パラメータ>という風に指定することで関数にパラメータを渡すことができます。配列のid番目の記事をリクエストから受け取った記事内容で置き換えています。

DELETEリクエスト

最後にDELETEリクエストに対する処理です。これは主にデータを削除する場合に使われます。

terminal
$ curl -X DELETE localhost:5000/post/delete/1

updateの時と一緒で最後にパラメータとして消したい記事の配列のインデックスを渡しています。

flaskの方はこんな感じです。

app.py
@app.route('/post/delete/<id>', methods=['DELETE'])
def delete_post(id):
    db_data.pop(int(id))
    return jsonify(db_data)

updateの時とほとんど変わりません。

まとめ

いかがだったでしょうか?今回はFlaskでPOST, PUT, DELETEリクエストに対する処理を実装しました。#3ではrouteはそのままでDB連携をしていきたいと思います。

0
3
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
3