ジャンゴレストフレームワークチュートリアルの ゲット/プット/デルタを エクセプトで作成する
何をやるのか
前々回の記事と前回の記事で、SnippetCountリストの一覧の APIを エクセプトと 視界で ゲット/ポストできるようにした.
今回は 詳細の詳細の APIを CSRF検証を無効化して作成する
スニペット/ URLに 詳細のルーティングを追加
urlpatterns = [
path('snippets/', views.snippet_list),
path('snippets/<int:pk>/', views.snippet_detail),
]
スニペット/1や スニペット/99のパスにアクセスした時に見るところを見解の 詳細に設定する
スニペット/ビューに 詳細を記載
@csrf_exempt
def snippet_detail(request, pk):
"""
Retrieve, update or delete a code snippet.
"""
try:
snippet = Snippet.objects.get(pk=pk)
except Snippet.DoesNotExist:
return HttpResponse(status=404)
if request.method == 'GET':
serializer = SnippetSerializer(snippet)
return JsonResponse(serializer.data)
elif request.method == 'PUT':
data = JSONParser().parse(request)
serializer = SnippetSerializer(snippet, data=data)
if serializer.is_valid():
serializer.save()
return JsonResponse(serializer.data)
return JsonResponse(serializer.errors, status=400)
elif request.method == 'DELETE':
snippet.delete()
return HttpResponse(status=204)
モデルからのオブジェクトの取り出し、ゲット/プット/削除の JSONレスポンスへの処理
これらを書いている
一つ一つ見ていく
CSRF検証無効化と リクエストと 京大理
@csrf_exempt
def snippet_detail(request, pk):
最初に CSRF検証無視を記載リクエストと 京大理を受け取る
主キーつまり ID
スニペットモデルからオブジェクトを取得、例外処理
try:
snippet = Snippet.objects.get(pk=pk)
except Snippet.DoesNotExist:
return HttpResponse(status=404)
受け取った 京大理からデータを取り、変数 スニペットに入れるそれがなくて失敗したら、404を返す
ゲット
if request.method == 'GET':
serializer = SnippetSerializer(snippet)
return JsonResponse(serializer.data)
ゲットの時は普通にモデルから取り出したデータをシリアライズして JSONレスポンスで返す
プット
elif request.method == 'PUT':
data = JSONParser().parse(request)
serializer = SnippetSerializer(snippet, data=data)
if serializer.is_valid():
serializer.save()
return JsonResponse(serializer.data)
return JsonResponse(serializer.errors, status=400)
プットの時は リクエストの中身を JSONパーサーにかけてシリアライザにかけて、中身があれば JSONレスポンスで返す.
削除
elif request.method == 'DELETE':
snippet.delete()
return HttpResponse(status=204)
削除の時は単に取ってきたオブジェクトに .delete ()をかけてレスポンスの 404 を返している
ポストは存在しない.
詳細では既にあるものにアクセスしてるからだ.
まとめ
詳細では
スニペットモデルから渡された id ( pk )のデータをとって
なかった場合は 404を返して
ゲットの場合はシリアライズして JSONで返す
プットの場合は JSONパーサーしてシリアライズに成功すれば保存
失敗すれば 400でエラーを返す
削除の場合は delete ()をかけて 204を返す
これで詳細ページの APIが作れた
Reference
この問題について(ジャンゴレストフレームワークチュートリアルの ゲット/プット/デルタを エクセプトで作成する), 我々は、より多くの情報をここで見つけました https://dev.to/kaede_io/django-rest-framework-tutorial-8-snippetdetail-no-getputdelte-wo-csrfexempt-dezuo-cheng-suru-21pdテキストは自由に共有またはコピーできます。ただし、このドキュメントのURLは参考URLとして残しておいてください。
Collection and Share based on the CC Protocol