1. channel-techtok

    Posted

    channel-techtok
Changes in title
+Flaskチュートリアル#2 ~POST, PUT, DELETEリクエスト編~
Changes in tags
Changes in body
Source | HTML | Preview
@@ -0,0 +1,72 @@
+# 今回やること
+
+前回はGETリクエストに対する処理を主に実装していきました([チュートリアル#1](https://qiita.com/channel-techtok/items/468505d524041e6bcabe))。今回はFlaskでPOSTリクエスト、PUTリクエスト、DELETEリクエストに対する処理をそれぞれ書いていきます。なお、DB連携は次の記事で紹介するので今回はグローバル変数に定義した配列に対して変更を加えていきたいと思います。
+
+詳しくは以下の動画で紹介しています
+https://youtu.be/hLgzPDjYDII
+
+# POSTリクエスト
+まずはPOSTリクエストに対する処理を書いていきます。POSTは主にデータの追加に使われます。
+今回はリクエスト側はテストを簡単にするために`curl`コマンドを使っていきます。
+
+```terminal
+$ 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側はこんな感じになります
+
+```python: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: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側のコードはこんな感じです
+
+```python: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:terminal
+$ curl -X DELETE localhost:5000/post/delete/1
+```
+
+updateの時と一緒で最後にパラメータとして消したい記事の配列のインデックスを渡しています。
+
+flaskの方はこんな感じです。
+
+```python: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リクエストに対する処理を実装しました。次回はrouteはそのままでDB連携をしていきたいと思います。