こんにちは、MSKです。
出退勤時間を記録するアプリ開発の続きです。
今回はAPIを作成していきます。
関連する記事は以下になります。
出退勤の時間を記録するWebアプリの作り始め!
出退勤時間を記録するアプリのAPIを作る! <- この記事はここ!
出退勤時間を記録するアプリのユーザー登録と認証を実装する!
ファイルの準備など
前回作成したアプリのフォルダの中にurls.py、serializers.pyを追加します。
プロジェクトの中にあるurls.pyを次のように変更して、アプリへのつなぎこみを行います。
urlpatterns = [ path('admin/', admin.site.urls), path('api/',include('api.urls')), ]
シリアライザー作成
モデルで定義したtypeとcreated_atを取得したいので、serializers.pyは次のようにしました。
class ApiSerializer(serializers.ModelSerializer): created_at = serializers.DateTimeField(format="%Y-%m-%d %H:%M", read_only=True) class Meta: model = ApiModel fields = ['id','type','created_at']
APIの作成
view.pyに次のように記述しました。
使うシリアライザーとモデルを渡しているだけですね。
class ApiViewSet(viewsets.ModelViewSet): queryset = ApiModel.objects.all() serializer_class = ApiSerializer
アプリの中にあるurls.pyに次のように記述します。
django rest frameworkの機能を使って、簡単にCRUDを実現することができます。
from rest_framework import routers from .views import ApiViewSet router = routers.DefaultRouter() router.register('',ApiViewSet) urlpatterns = [ path('',include(router.urls)) ]
動作確認
runserverをして、GETとPOSTの動作確認をします。
動作確認にはPostmanを使用します。
Postmanのインストーラーのダウンロードはこのページから行うことができます。
Postmanの画面中央上部にタブがあるので、+を押して新しいリクエストを作成します。
まずはGETを試します。
選択肢からGETを選びます。(デフォルトでGETになっていると思うので、そのままでOKです。)
その隣にURLを入力します。
今回はlocalhostなので、http://127.0.0.1:8000/api/と入力します。

入力したらSendボタンを押します。
次のように以前に登録したデータが返ってきました。
成功です。

次にPOSTを試します。
新しいタブを作成して、左側の選択肢からPOSTを選択します。
URLはそのままです。
Bodyに登録したいデータを入力します。
フォームの形でデータを渡すので、x-www-form-urlencodedを選択します。
今回はtype=1(出勤)で登録します。
created_atは自動で作成されるようにしているので入力しません。

Sendボタンを押すと次のように結果が返され、正常に登録ができました。

念のため、もう一度GETしてみると次のようになり、新しく追加した項目が増えています。

POSTも正常に動いています。
最後に
今回はAPIを作成しました。
django rest frameworkを使うと簡単にGETやPOSTなどのREST APIが作成できてしまいます。
今の状態だとURLが分かってしまうと誰にでもPOSTやGETができてしまうので問題です。
次回は認証関係を作っていきたいと思います。
以上、「出退勤時間を記録するアプリのAPIを作る!」でした。
最後までご覧いただき、ありがとうございました。