次に,ID を指定してそのコメントの詳細情報を表示(出力)する機能を作成します.このために,views.py に CommentDetail
クラスを定義します.このクラスの定義は CommentList
クラスとほぼ同じで,違いは ListAPIView
を継承するか RetrieveAPIView
を継承するかという部分だけです.
comments\views.py
from django.shortcuts import render
from rest_framework import generics
from .models import Comment
from .serializers import CommentSerializer
# Create your views here.
class CommentList(generics.ListAPIView):
queryset = Comment.objects.all()
serializer_class = CommentSerializer
class CommentDetail(generics.RetrieveAPIView):
queryset = Comment.objects.all()
serializer_class = CommentSerializer
URL に /comments/1/ のように ID を指定すると詳細情報が得られるように urls.py にそのルートを定義します.
comments\urls.py
from django.urls import path
from comments import views
urlpatterns = [
path('comments/', views.CommentList.as_view()),
path('comments/<int:pk>/', views.CommentDetail.as_view()),
]
Web サーバを起動したままであっても urls.py などを保存すると自動的に再起動されているはずです.停止していた場合には python manage.py runserver
で Web サーバを起動します.その後,別のコマンドプロンプトから接続します.
...\django_comment_api>curl http://127.0.0.1:8000/comments/1/ ⏎ {"id":1,"title":"最初のコメント","body":"コメントの本文","updated_at":"2023-11-23T11:01:00"} ...\django_comment_api>curl http://127.0.0.1:8000/comments/2/ ⏎ {"id":2,"title":"2個目のコメント","body":"コメントの本文2","updated_at":"2023-11-23T11:02:00"} ...\django_comment_api>curl http://127.0.0.1:8000/comments/100/ ⏎ {"detail":"見つかりませんでした。"} ...\django_comment_api>
Web ブラウザからでも正しく詳細情報が得られていることを確認します.