Help us understand the problem. What is going on with this article?

Flaskチュートリアル#1 ~GETリクエスト編~

Flaskとは

FlaskとはPythonのWebアプリケーションフレームワークです
Djangoと同じ働きをします。
しかし、マイクロフレームワークと呼ばれ最小限で実装されている点がDjangoと異なります。
Djangoのチュートリアルをしていていきなりデータベース接続だったりテンプレートやビューだったりとたくさんの要素が出てきてついて行けなかった人もいるんじゃないでしょうか?

実装のゴール

今回はビューもテンプレートも使わずJSON形式のレスポンスを返すAPIサーバを構築していきます。
こちらの記事が最終ゴールです

こちらで詳細に紹介しています

準備

flaskをインストールします。

pip install flask

これだけです。簡単!

HelloWorld

まずはhelloworldからやってみましょう。app.pyを作って

app.py
from flask import Flask

app = Flask(__name__)

@app.route('/', methods=['GET'])
def index():
    return 'hello world'

アプリのインスタンスを作って、routeを定義します。routeの定義の下には指定したURLにリクエストがきた場合の処理を書いていきます。
これは、ルートにGETリクエストがきたらhello worldが返却されるという意味の文です。

app.py
if __name__ == '__main__':
    app.debug = True
    app.run()

さっきの文の下にメインの処理を書きます。debugモードをTrueにしておくことでプログラムが書き換えられた場合に自動で再起動してくれます。
ここまでできたら

terminal
python app.py

で実行です。
ブラウザでlocalhost:5000にアクセスしたらhello worldが現れると思います。

GETリクエスト

次にGETリクエストに対する処理を書いていきます。これは主にデータの取得に利用されます。今回はブログアプリを仮定していきます。なお、DB接続は#3でやるのでここではグローバル変数に記事一覧を定義します。記事内容は簡単にtitleとbodyだけとします。
それでは実装していきます。

app.py
from flask import Flask, jsonify, request # <= jsonify, request追加

db_data = [
    {'title': 'タイトル1', 'body': '本文1'},
    {'title': 'タイトル2', 'body': '本文2'},
    {'title': 'タイトル3', 'body': '本文3'},
    {'title': 'タイトル4', 'body': '本文4'},
    {'title': 'タイトル5', 'body': '本文5'},
]

app.config['JSON_AS_ASCII'] = False 

@app.route('/posts', methods=['GET'])
def get_all_posts():
    limit = request.args['limit']
    return jsonify(db_data[:int(limit)])

これは/postsにGETリクエストが来た時に記事全件取得するという意味の文です。URLにクエリを渡してあげた場合にrequest.args['クエリ名']で対応するクエリの値を取得できます。
今回はlimitで取得する記事の個数を指定します。
レスポンスの形式はjson形式にしたいのでjsonifyという関数を使います。

完成したのでブラウザで確認してみましょう。
localhost:5000/posts?limit=3でアクセスしてみると、3件の記事が表示されるはずです。

パラメータ指定

次はIDを指定して個別記事を取得していきます。
flaskのコードはこんな感じになります。

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

flaskでは/<パラメータ名>でURLにパラメータを指定出来ます。指定したパラメータは関数で受け取ることが出来ます。今回はDBがわりに配列を使ってるので配列のインデックスを指定します。

ブラウザでlocalhost:5000/post/0でアクセスすると0番目の記事が取得できると思います。

まとめ

いかがだったでしょうか?今回はFlaskで主にGETリクエストに対する処理を試してみました。#2ではPOST, PUT, DELETEリクエストに対する処理を実装しています。

channel-techtok
TechTokちゃんねるのとくまるです! プログラミングのことについて幅広く取り上げていきます! 自然言語処理/Python/TensorFlow/スクレイピング/ Web/JavaScript/Node/Vue/React/Go/PHP Cloud/Firebase Blog/WordPress
https://www.youtube.com/channel/UC8HBsYr7qz1znAyoGMMU6ZA
Why not register and get more from Qiita?
  1. We will deliver articles that match you
    By following users and tags, you can catch up information on technical fields that you are interested in as a whole
  2. you can read useful information later efficiently
    By "stocking" the articles you like, you can search right away
Comments
No comments
Sign up for free and join this conversation.
If you already have a Qiita account
Why do not you register as a user and use Qiita more conveniently?
You need to log in to use this function. Qiita can be used more conveniently after logging in.
You seem to be reading articles frequently this month. Qiita can be used more conveniently after logging in.
  1. We will deliver articles that match you
    By following users and tags, you can catch up information on technical fields that you are interested in as a whole
  2. you can read useful information later efficiently
    By "stocking" the articles you like, you can search right away
ユーザーは見つかりませんでした