前回の復習
前回の記事で sinppets/views.py で
@csrf_exempt
で JSON レスポンスを通して GET と POST を実装した
APIView で GET/POST を確認
https://www.django-rest-framework.org/tutorial/2-requests-and-responses/#wrapping-api-views
from rest_framework import status from rest_framework.decorators import api_view from rest_framework.response import Response
status コードの 200 ~ 500 を使うために status
@api_view
を使うために api_view
Response として返すために Response
これらをインポート
@api_view(['GET', 'POST']) def snippet_list(request):
@api_view
で GET, POST を受けることを snippet_list の上に記載
AssertionError at /snippets/ @api_view missing list of allowed HTTP methods
@api_view
のみだと、HTTP メソッドの許可がないエラーになる。
GET
snippet_list の中にかく
if request.method == 'GET': snippets = Snippet.objects.all() serializer = SnippetSerializer(snippets, many=True) return Response(serializer.data)
GET は前回と大きくは変わらない。
JsonResponse を Response に変更して safety=false がなくなったくらい。
POST
elif request.method == 'POST': serializer = SnippetSerializer(data=request.data) if serializer.is_valid(): serializer.save() return Response(serializer.data, status=status.HTTP_201_CREATED) return Response(serializer.errors, status=status.HTTP_400_BAD_REQUEST)
POST は大きく変わった。
JSON parser を使わず、request.data から直接シリアライズし
JsonResponse を使えわず、Response で
status.HTTP_201_CREATED
や status.HTTP_400_BAD_REQUEST
をステータスとして返すようにする
ブラウザで REST FRAMEWORK の API View を試す
上記のメソッドをちゃんと記載していれば
API View を使って、REST FRAMEWORK の UI で綺麗にレスポンスが見れる。
POST /snippets/ HTTP 201 Created Allow: OPTIONS, POST, GET Content-Type: application/json Vary: Accept { "id": 8, "title": "from REST API VIEW", "code": "print(\"updated\")", "linenos": false, "language": "python", "style": "friendly" }
Postman と同じように POST も JSON データを送れる。
まとめ
@api_view(['GET', 'POST'])
と定義して関数を書くと
ブラウザで Django REST framework の API View の形で
GET, POST を扱える。
Top comments (0)