LoginSignup
1
1

More than 1 year has passed since last update.

【自分用メモ】FlaskでPOSTを受け取る~入力した日付から曜日を取得するAPIを作成~

Posted at

投稿日:2022/12/08

はじめに

 今回、webサーバーを作る勉強として、Flaskを利用したAPIの作成を行いました。
勉強したことを自分用メモとして記事にまとめました。
間違い等、お気づきの場合はご指摘いただけると幸いです。

APIの作成

入力した日付から曜日を取得するAPIを作成していきます。

app.py
from datetime import datetime
from flask import Flask, request
import pytz

# Flaskのインスタンスをappという名前で作成
app = Flask(__name__)

# Flaskでpostを受けとるにはrouteの第二引数に methods=['post'] を指定
# localhost:5000/dateへPOSTメソッドでリクエストを受信したら、関数「week_caluculation」を実行する
@app.route('/date', methods=['POST'])
def week_caluculation():

    # 曜日情報のリストを作成
    week_list = ['', '', '', '', '', '', '']

    # request.form.get は POST送信 された値を取得するプロパティ
    # ('days')は、送信されたデータのキーを指定しており、このキーで送信された値を取得する
    input_date = request.form.get('days')

    # 受け取った文字を日付に変換する
    date = datetime.strptime(input_date, '%Y-%m-%d')

    # 日付を曜日に変換する
    # date オブジェクトは曜日情報を0から6の整数で保持
    week = date.weekday()

    return f'{date}{week_list[week]}曜日です'


if __name__ == "main":
    app.run()

Python 曜日情報を取得

    # 受け取った文字を日付に変換する
    date = datetime.strptime(input_date, '%Y-%m-%d')

strptime(): 文字列から日付、時間への変換

    # 日付を曜日に変換する
    week = date.weekday()

datetimeモジュールにあるdateオブジェクトのweekdayメソッドを使用

date オブジェクトは曜日情報を0から6の整数で保持。
0なら月曜日、1なら火曜日と順番に並んで最後の6が日曜日になる。

curlコマンドでPOSTする

curlコマンド
サーバーとデータを送受信するコマンド

$ curl -X POST -d 'days=2022-12-08' http://localhost:5000/date
  • -X POST : POSTリクエストを送る
  • -d : POSTする際、何らかのパラメータやデータを付与してリクエストする(--dataの省略形)
    指定された文字列データをそのまま送信(days=2022-12-08という文字列が渡される)
    オプションに渡す値の形としては 変数名=値 の形式で値を指定する。
  • http://localhost:5000/date : エンドポイントのURLを指定

ターミナルでサーバーを立ち上げて動作確認

プロジェクトのディレクトリへ移動

virtualenvによるPythonの仮想環境を有効化
$ source env/bin/activate
下記のコマンドでサーバーを立ち上げ
$ flask run

↓サーバーを立ち上げたターミナルとは別に、新しくターミナルを表示

ターミナルからcurlコマンドでリクエストを送信
$ curl -X POST -d 'days=2022-12-08' http://localhost:5000/date
>> 2022-12-08 00:00:00は木曜日です

成功です。

参考文献

以下のサイト、記事を参考にさせていただきました。

1
1
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
1
1